Du kannst via Canvas eine Graphic auf eine andere Zeichnen:
Code: Alles auswählen
procedure DrawOpacity(PosX, PosY: integer; c: TCanvas; g: TGraphic; Opac: double);
type
TRGB = packed record
case byte of
0: (R, G, B: byte);
1: (Color: TColor);
end;
var
x, y: integer;
bmp: TBitmap;
r, r2: TRGB;
begin
bmp := TBitmap.Create;
try
bmp.Assign(g);
for y := 0 to bmp.Height do
for x := 0 to bmp.Width do
begin
r.Color := c.Pixels[PosX + X, PosY + y];
r2.Color := bmp.Canvas.Pixels[X, Y];
r.R:=round(r.R*(1-Opac)+r2.R*Opac);
r.G:=round(r.G*(1-Opac)+r2.G*Opac);
r.B:=round(r.B*(1-Opac)+r2.B*Opac);
c.Pixels[PosX + X, PosY + y]:=r.Color;
end;
finally
bmp.Free;
end;
end;
ist nur etwas langsam, also das zeichnen dauert so c.a. 0,5 Sekunden
Ich habe aber auch mal vor etwas längerer Zeit eine Komponente Geschrieben für Images mit mehreren Layern vielleicht finde ich die wieder
Edit: Die Komponente (TLayeredImage):
Link
PS: Bei Großen Bildern extrem Langsam (habe sie für kleine bilder so 100x50 px verwendet, da war die Komponente schon nicht schnell)
Ansonsten kannst du auch OpenGL oder SDL oder DirectDraw verwenden