Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
Delphi XE3 Enterprise
|
AW: TBitmap.draw und transparenz
22. Jun 2012, 20:49
Delphi-Quellcode:
type
pRGBQuadArray = ^TRGBQuadArray;
TRGBQuadArray = ARRAY[0..$effffff] OF TRGBQuad;
Procedure SetAlpha(bmp:TBitMap;Alpha:Byte);
// 20120622 by Thomas Wassermann
var
pscanLine32 : pRGBQuadArray;
i,j:Integer;
begin
Bmp.PixelFormat := pf32Bit;
bmp.HandleType := bmDIB;
bmp.ignorepalette := true;
bmp.alphaformat := afDefined;
for i := 0 to bmp.Height -1 do
begin
pscanLine32 := bmp.Scanline[i];
for j := 0 to bmp.Width -1 do
begin
pscanLine32[j].rgbReserved := Alpha;
pscanLine32[j].rgbBlue := 0;
pscanLine32[j].rgbRed := 0;
pscanLine32[j].rgbGreen := 0;
end;
end;
end;
procedure TForm5.Button1Click(Sender: TObject);
var
Bmp,bmp2: TBitmap;
p : TPNGImage;
begin
Bmp:=TBitmap.Create;
Bmp2:=TBitmap.Create;
bmp2.Width := 300;
bmp2.height := 300;
SetAlpha(bmp2,0);
p:=TPNGImage.Create;
try
p.LoadFromFile('C:\Icons\IconCollection\ix_ap_all\48x48\shadow\about.png');
Bmp.Assign(p);
bmp2.Canvas.Draw(0,0,bmp);
bmp2.Canvas.Draw(50,50,bmp);
Canvas.Draw(0,0,bmp);
Canvas.Draw(100,100,bmp2);
finally
Bmp.Free;
bmp2.Free;
p.Free;
end;
end;
ich habe gerade mal experimentiert ... man kann auch mit GDI+ wie erwartet malen (Alpha verhält sich wie gewünscht im Gegensatz zu den Canvasroutinen), auch ein Image behält die Transparenz.
Delphi-Quellcode:
procedure TForm5.Button1Click(Sender: TObject);
var
Bmp,bmp2: TBitmap;
p : TPNGImage;
g : TGPGraphics;
b:TGPSolidBrush;
begin
Bmp:=TBitmap.Create;
Bmp2:=TBitmap.Create;
bmp2.Width := 300;
bmp2.height := 300;
SetAlpha(bmp2,50);
p:=TPNGImage.Create;
try
p.LoadFromFile('C:\Icons\IconCollection\ix_ap_all\48x48\shadow\about.png');
Bmp.Assign(p);
bmp2.Canvas.Draw(20,20,bmp);
bmp2.Canvas.Draw(50,50,bmp);
g := GetGraphics(bmp2.Canvas);
b := GetSolidBrush(clRed,128);
try
g.FillRectangle(b,100.0,100.0,100.0,100.0);
g.FillRectangle(b,150.0,150.0,100.0,100.0);
Canvas.Draw(100,100,bmp2);
image1.Picture.Assign(bmp2);
finally
g.Free;
b.Free;
end;
finally
Bmp.Free;
bmp2.Free;
p.Free;
end;
end;
Thomas Wassermann H₂♂ Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂♂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
Geändert von Bummi (23. Jun 2012 um 07:49 Uhr)
|
|
Zitat
|