![]() |
Bitmap 32Bit und Alpha Kanal
Hallo,
ich habe eine Bitmap erstellt:
Code:
Der Alphakanal gibt die Transparenz für den jeweiligen Pixel an.
tmp:=TBitmap.Create;
tmp.SetSize(bmp.Width, bmp.Height); tmp.PixelFormat:=pf32Bit; tmp.AlphaFormat:=afDefined; ... tmp.Free; Wenn ich nun die Bitmap so bearbeite
Code:
ist sie bei Ausgabe mit Line: PRGBQuadArray; ... R:=0; G:=0; B:=0; Alpha:=0; for y:=0 to tmp.Height-1 do begin Line:=tmp.ScanLine[Y]; for x:=0 to tmp.Width-1 do begin Line[X].rgbRed:=R; Line[X].rgbGreen:=G; Line[X].rAgbBlue:=B; Line[X].rgbReserved:=Alpha; end; end;
Code:
völlig tranzparent. Bei einer Bearbeitung mit
Canvas.Draw(0, 0, tmp);
Code:
ist sie bei Ausgabe mit Line: PRGBQuadArray; ... R:=255; G:=255; B:=255; Alpha:=0; for y:=0 to tmp.Height-1 do begin Line:=tmp.ScanLine[Y]; for x:=0 to tmp.Width-1 do begin Line[X].rgbRed:=R; Line[X].rgbGreen:=G; Line[X].rAgbBlue:=B; Line[X].rgbReserved:=Alpha; end; end;
Code:
nur halbtranzparent.
Canvas.Draw(0, 0, tmp);
Habe ich da ein Verständnisproblem? Beste Grüße |
AW: Bitmap 32Bit und Alpha Kanal
Bei Bitmap32 brauchst du die Verrenkung mit der Scanline nicht mehr zu machen. Die Eigenschaft Pixels[] ist dort anders, und weitaus performanter umgesetzt als bei den alten VCL Bitmaps. Versuche mal, die Farben so zuzuweisen:
Delphi-Quellcode:
Das zeichnen dann besser auch anders herum: tmp.DrawTo(Canvas.Handle), da Canvas.Draw() den Alpha-Kanal möglicherweise nicht beachtet. Sicher bin ich mir nicht, aber mit der hier genannten Variante bin ich immer gut gefahren.
R:=0; G:=0; B:=0; Alpha:=0;
for y:=0 to tmp.Height-1 do for x:=0 to tmp.Width-1 do tmp.Pixels[x, y] := Color32(R, G, B, A); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz