Witam. Chciałbym się zapytać czy zna ktoś jakiś skuteczny sposób na przyciemnienie jakiejś cześci programu, np. jak to ma miejsce w niektórych skryptach Ajaxa (przykład chociażby tutaj: http://www.huddletogether.com/projects/lightbox2/. Oczywiście efekt po kliknięciu w obrazek ;)). Próbowałem zrobić to przy pomocy obrazka i tego kodu:
var
Alfa, x, y : Integer ;
r1,g1,b1,r2,g2,b2,rk,gk,bk: Integer;
begin
Alfa := StrToInt(Edit1.Text); //poziom przezroczystości od 0-255
for y := 0 to Image1.Height do
for x:= 0 to Image1.Width do
begin
r1:=GetRValue(Image1.Canvas.Pixels[x, y]); //pobieranie czerwonego koloru do zmiennej
g1:=GetGValue(Image1.Canvas.Pixels[x, y]); //pobieranie zielonego koloru do zmiennej
b1:=GetBValue(Image1.Canvas.Pixels[x, y]); //pobieranie niebieskiego koloru do zmiennej
r2:=GetRValue(Image2.Canvas.Pixels[x, y]); //pobieranie czerwonego koloru do zmiennej
g2:=GetGValue(Image2.Canvas.Pixels[x, y]); //pobieranie zielonego koloru do zmiennej
b2:=GetBValue(Image2.Canvas.Pixels[x, y]); //pobieranie niebieskiego koloru do zmiennej
//obliczanie średniego koloru pixela
rk:=(alfa*((r2+64)-r1)) div 256 + r1 - (alfa div 4);
gk:=(alfa*((g2+64)-g1)) div 256 + g1 - (alfa div 4);
bk:=(alfa*((b2+64)-b1)) div 256 + b1 - (alfa div 4);
// wyświetlanie wszystkiego w Image1
Image1.Canvas.Pixels[x, y]:=RGB(rk,gk,bk);
end;
end;
Co prawda działa to, ale zmiana Alpy jest mało płynna i trwa z sekundę, co przy serii przyciemniania/rozjaśnienia nie wygląda estetycznie... Bardzo proszę o pomoc.
Pozdrawiam