Witam, chciałbym zapytać czy przypadkiem nie ma ktoś jakiejs procedury ktora by stopniowo zmieniała kolorowy obrazek w obrazek w skali szarości i odwrotnie.
Za pomoc z gory thx :)
Witam, chciałbym zapytać czy przypadkiem nie ma ktoś jakiejs procedury ktora by stopniowo zmieniała kolorowy obrazek w obrazek w skali szarości i odwrotnie.
Za pomoc z gory thx :)
he he znajome pytanie
Function RGBToLightness(const R, G, B: Byte):Integer;
begin
Result:=(MinIntValue([R, G, B])+MaxIntValue([R, G, B])) div 2;
end;
masz kodzik który dostałem od DetoX`a
you have prolems i have solution! Pick one that fits your needz:
Function RGBToSaturation(const R, G, B: Byte):Byte;
begin
if MaxIntValue([R, G, B])=0 then
Result:=0
else
Result:=Round(((MaxIntValue([R, G, B])-MinIntValue([R, G, B]))/MaxIntValue([R, G, B]))*255);
end;
Function RGBToLightness(const R, G, B: Byte):Integer;
begin
Result:=(MinIntValue([R, G, B])+MaxIntValue([R, G, B])) div 2;
end;
Function RGBToIntensity(const R, G, B: Byte):Integer;
begin
Result:=(R+G+B) div 3;
end;
Procedure RGBToAvgRGB(var R, G, B: Byte; Pass: TAvgPass);
var
Red, Red2, Green, Green2, Blue, Blue2: Real;
I: Byte;
begin
Red2:=(R+((R+G+B)/3))/2;
Green2:=(G+((R+G+B)/3))/2;
Blue2:=(B+((R+G+B)/3))/2;
Red:=Red2;
Green:=Green2;
Blue:=Blue2;
if Pass>1 then
for I:=2 to Pass do
begin
Red2:=(Red+((Red+Green+Blue)/3))/2;
Green2:=(Green+((Red+Green+Blue)/3))/2;
Blue2:=(Blue+((Red+Green+Blue)/3))/2;
Red:=Red2;
Green:=Green2;
Blue:=Blue2;
end;
R:=Round(Red2);
G:=Round(Green2);
B:=Round(Blue2);
end;
Function RGBToYOfYIQ(const R, G, B: Byte): Byte;
begin
Result:=Byte(Integer(77*R+150*G+29*B) div 256);
end;
function RGBToMaxV(const R, G, B: Byte): Byte;
begin
Result:=MaxIntValue([R, G, B]);
end;
function RGBToMinV(const R, G, B: Byte): Byte;
begin
Result:=MinIntValue([R, G, B]);
end;
//Function Bound is used interially by RGB->LightnessRGB and RGB->ContrastRGB
Function Bound(Min, Max: Byte; Value: Integer): Byte;
begin
if Value<Min then
Result:=Min
else
If Value>Max then
Result:=Max
else
Result:=Value;
end;
function RGBToAvg(const R, G, B: Byte; AvgOp: TAvgOp): Byte;
begin
case AvgOp of
aoArithmetic: Result:=Round((R+G+B)/3);
aoGeometric: Result:=Round(Power(R*G*B, 1/3));
aoHarmonic: Result:=Bound(0, 255, Round(3/((1/(R+1))+(1/(G+1))+(1/(B+1))))-1);
aoSquare: Result:=Round(Power(((R*R)+(G*G)+(B*B)/3), 1/2))
else
Result:=Round((R+G+B)/3);
end;
end;
i jest jeszcze desaturacja, ale to nie tu...
ps. Beldzio: Kodzik, który dostałeś od detoxa został napisany przeze mnie...
Co do tego stopniowego zamieniania to masz 2 sposoby:
1.Użyć RGBToAvgRGB z pass na 1 (po ośmiu obrazek jest kompletnie w skali szarości) i tak używając 9 obrazków i animując między nimi masz cool efekt przejścia między nimi.
(jak bedziesz chciał do obu sposobów mogę dać gotowce)