Czy ktoś wie jak zrobić, aby to coś działało na Win 98 SE ?
Mam teorie, ale nie wiem jak to zrobić:
kolor pixela na formie mixujesz w odpowiednich proporcjach z kolorem backgrounda i będzie działać. są do tego funkcje jak CreateROP4 czy rop2 ale jeszcze nigdy z nich nie kożystałem
mój autorski :
type
TPunkt = record // piksel sklada sie z dwóch współrzędnych
x,y : real;
end;
//-------
function MonoAlfa(source, dest, fade : word) : byte;
// result := fade * (dest - source) / 256 + source;
// zwraca składową koloru z zastosowaniem efektu Alpfa-Blending
asm
push ebx
mov ebx, 0
mov bx, source
sub dest, source
mov ax, dest
mul fade
shr ax, 8 // ax / 256
add ax, bx
pop ebx
end;
procedure rysujAlfa(punkt : TPunkt; fade : real; rysunek : TBitmap; transparent : TColor; plotno : Tcanvas);
var x, y : integer;
tempBmp, bmp : TBitmap;
linia, linia2, linia3 : PByteArray;
fade256 : integer;
begin
fade256 := trunc((1-fade)*256);
tempBmp := TBitmap.Create;
bmp := TBitmap.Create;
tempBmp.PixelFormat:=pf24Bit;
Bmp.PixelFormat:=pf24Bit;
rysunek.PixelFormat:=pf24Bit;
tempBmp.Width := rysunek.Width;
bmp.Width := rysunek.Width;
tempBmp.Height := rysunek.Height;
bmp.Height := rysunek.Height;
bmp.Canvas.CopyRect(rect(0,0,rysunek.width,rysunek.height),plotno,rect(round(punkt.x),round(punkt.y),round(punkt.x)+rysunek.width,round(punkt.y)+rysunek.height));
try
for y := 0 to rysunek.height - 1 do
begin
linia := bmp.ScanLine[y];
linia2 := rysunek.ScanLine[y];
linia3 := tempBmp.ScanLine[y];
x := 0;
repeat
if rgb(linia2[x+2],linia2[x+1],linia2[x]) transparent then begin
linia3[x] := MonoAlfa(linia2[x],linia[x],fade256);
linia3[x+1] := MonoAlfa(linia2[x+1],linia[x+1],fade256);
linia3[x+2] := MonoAlfa(linia2[x+2],linia[x+2],fade256);
end else begin
linia3[x] := linia[x];
linia3[x+1] := linia[x+1];
linia3[x+2] := linia[x+2];
end;
x := x + 3;
until x > (rysunek.Width-1)*3;
end;
plotno.Draw(round(punkt.x),round(punkt.y),tempBmp);
except
on E: Exception do obslugaWiadomosci('Nie mogę narysować bitmapki alfa z powodu : '+E.Message);
end;
bmp.free;
tempBmp.free;
end;
potem w programie uzywasz go tak :
rysujAlfa(punkt, fade{od 0 do 1}, rysunek{jakas bitmapka TBitmap}, transparent{kolor przezroczystosci},plotno{canvas na ktorym rysujesz}
A moze wie ktos jak zrobic zeby to tak nie obciazalo systemu? Mam na formie text fader i text mi skacze :/ Zna ktos jakis sposob?
Jezeli ma to byc nawet mała animacja, czy nawet sam efekt to korzystaj z DelphiX : DirectDraw. Naprawdę polecam!
Ja tyz pisalem zrodelko do AlphaBledningu :) zobacz moze zadziala :)