Einzelnen Beitrag anzeigen

r29d43

Registriert seit: 18. Jan 2007
287 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: IconToBitmap mit weißem Hintergrund

  Alt 29. Okt 2008, 17:21
Das was da immer schwarz wird sind diejenigen Pixels, für die weder Rot noch Grün noch Blau einen Wert >0 hat. Ergo sind sie eigentlich auch tatsächlich schwarz. Gleichzeitig sind diese Pixels in einer Ikone gemäß deren bmMask aber für gewöhnlich auch wieder auf transparent geschaltet, werden also sowieso nicht ausgegeben. Sie beim Transfer auf das Bitmap mit clWhite zu laden geht schon, allerdings sollte dann bei der Ausgabe dieses Bitmaps dieser AlphaKanal ignoriert werden (denn da ist ja jetzt als Spezialität dieser Routine auch diese mbMask mit eingearbeitet worden), was aber meistens auch der Fall ist.


Pixels auf clWhite-Landen:

Delphi-Quellcode:
...
for x := 0 to result.Width-1 do
  for y := 0 to result.Height-1 do begin
    pRGBALine(result.Scanline[y])^[x].rgbReserved := NOT pRGBALine(mask.Scanline[y])^[x].rgbRed;
    if pRGBALine(mask.Scanline[y])^[x].rgbRed = 255 then result.Canvas.Pixels[X,Y] := clWhite; // die transparenten Pixels werden im Ziel-Bitmap weiß!
  end;
...
Aufruf und Anzeigen der-Ikone/des-Bitmaps, z.B.:

Image1.Picture.Bitmap := IconToBitmap(Application.Icon.Handle);
Wenn du die Ikone nur auf einem Bitmap anzeigen möchtest, ohne die Icon-bmMask danach wirklich noch zu benötigen, dann könnte man statt der Proc "IconToBitmap" einfacherweise auch die ApiFunktion "DrawIcon" benutzen:

Delphi-Quellcode:
DrawIcon(ABitmap.Canvas.Handle,0,0,Application.Icon.Handle);
Image1.Picture.Bitmap := ABitmap;
  Mit Zitat antworten Zitat