|
AlphaBlend
GDI újdonságai 4. rész
|
|
Példaprogram letöltése
8758 bájt
|
Grafikai alkalmazásokban gyakran találkozhatunk olyan effekttel, amikor egy képet a másik fölé helyezünk úgy, hogy a felül lévő kép valamilyen fokban átlátszó. Létezik egy függvény, amellyel mi is megvalósíthatunk hasonló effektust. Erről lesz szó ebben a cikkben.
Mindenekelőtt nézzük meg az AlphaBlend függvény paramétereit:
function AlphaBlend(DC: HDC; p2, p3, p4, p5: Integer; DC6: HDC;
p7, p8, p9, p10: Integer; p11: TBlendFunction): BOOL; stdcall;
A paraméterek jelentése:
DC
Annak a canvas-nak az azonosítója (Handle), ahová a képet másolni szeretnénk. (pl. Form1.Canvas.Handle).
p2, p3
A célkép X, és Y pozíciója.
p4, p5
A célkép szélessége és magassága.
DC6
A forrás kép canvas-ának azonosítója (pl. Image1.Canvas.Handle).
p7, p8
A forrás kép X és Y koordinátái.
p9, p10
A forrás kép szélessége és magassága.
p11
Egy TBlendFunction típusú rekord, amiben a művelet tulajdonságait kell beállítani. Ezt majd lejjebb, a forráskódnál láthatjuk!
Ha a forrás- és a célkép mérete nem egyezik meg, akkor a célkép ennek megfelelően átméretezve jelenik meg.
A Form-on elhelyeztünk egy TrackBar komponenst. Ennek Position property-je határozza meg a kép átlátszóságát, ezért a kép kirajzolást is a TrackBar OnChange eseményénél fogjuk elvégezni. Ahhoz, hogy lássuk is az eredményt, a kép alá egy kockás hátteret is rajzolunk. Ebből az is látszik, hogy a függvény nem csupán halványabban rajzolja meg a képet, hanem a kép alatti rajz is látható.
procedure TForm1.TrackBar1Change(Sender: TObject);
var BlendF:TBlendFunction;
x,y, xp, yp:integer;
begin
Első lépésben megrajzoljuk a kockás hátteret, ami "fölé" az átlátszó képet másoljuk.
with Image2.Canvas do
begin
Brush.Color:=clBtnFace;
FillRect(Rect(0, 0, 128, 128));
Brush.Color:=clBtnShadow;
for x:=0 to 31 do
for y:=0 to 31 do
begin
xp:=(x+(y mod 2))*4;
yp:=(y+(x mod 2))*4;
FillRect(Rect(xp, yp, xp+4, yp+4));
end;
end;
Most kerül sor az TBlendFunction rekord mezőinek beállítására. Az Első mező a BlendOp, aminek az értéke mindig 0. A BlendFlags mező értéke kötelezően 0. Ez a két mező valószínűleg későbbi fejlesztések miatt került bele a rekordba. A SourceConstantAlpha határozza meg a kép átlátszóságát. Ha az értéke 0, akkor a kép teljesen átlátszó lesz, míg. 255-nél, ami a maximálisan megadható érték, a kép egyáltalán nem lesz átlátszó, vagyis az eredmény az eredeti kép lesz. Az AlphaFormat mező értéke szintén 0.
BlendF.BlendOp:=0;
BlendF.BlendFlags:=0;
BlendF.SourceConstantAlpha:=TrackBar1.Position;
BlendF.AlphaFormat:=0;
Most már következhet a függvény felhasználása, vagyis a kép kirajzolása:
AlphaBlend(
Image2.Canvas.Handle, 0, 0, 128, 128,
Image1.Canvas.Handle, 0, 0, 128, 128,
BlendF);
end;
|
Könyv
Ez a cikk megtalálható ebben a könyvben:
Delphi Software Offline 2001 évkönyv 214. oldal
Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!
|