![]() |
Bitmap transparent aus TImageList holen
Hallo,
ich bin am Verzweifeln und habe schon einige Stunden im Netz recherchiert, aber keine wirkliche Lösung gefunden, die mein simples Problem löst. Ich habe eine TImageList, die mit transparenten Bitmaps gefüllt ist. Nun möchte ich ein TImage mit einem Bitmap aus der Imagelist transparent füllen.
Delphi-Quellcode:
Imagelist-Eigentschaften:
procedure TForm1.Button2Click(Sender: TObject);
var IconData : TBitmap; TransColor : TColor; begin IconData := TBitmap.Create; ImageList1.GetBitmap(1, IconData); // das zweite Image soll angezeigt werden // IconData.PixelFormat := pf32Bit; // IconData.HandleType := bmDIB; // IconData.alphaformat := afDefined; IconData.Transparent := true; IconData.TransparentColor := clFuchsia; // IconData.TransparentMode := tmAuto; Image1.Picture.Bitmap := IconData; end; BKColor: clFuchsia; ColorDepth : cd32Bit; Masked: true; Und das TImage ist auf Transparent : true gesetzt. Nichts passiert, egal welche Eigenschaft ich oben aktiviere, die Grafik wird immer mit dem Hintergrund dargestellt, der als BKColor angegeben ist. Außer bei ClNone, da wird der Hintergrund weiß. Kann mir vielleicht jemand einen Tipp geben? Besten Dank. |
AW: Bitmap transparent aus TImageList holen
Auf was ist denn
Delphi-Quellcode:
gesetzt?
ImageList1.DrawingStyle
|
AW: Bitmap transparent aus TImageList holen
Delphi-Quellcode:
ist auf dsTransparent gesetzt.
ImageList1.DrawingStyle
|
AW: Bitmap transparent aus TImageList holen
Probier mal GetImage statt GetBitmap
|
AW: Bitmap transparent aus TImageList holen
Wo meinst Du?
TImageList hat keine solche Methode. |
AW: Bitmap transparent aus TImageList holen
Zitat:
|
AW: Bitmap transparent aus TImageList holen
Zitat:
Danach sollten alle transparent sein. Hatten wir schon..
Delphi-Quellcode:
Erst dann sind die Bitmaps in der ImageList wirklich Transparent.
function ImageListToGPBitmap(SourceImageList: TImageList): TGPBitmap;
var bmp: TGPBitmap; g: TGPGraphics; dc: HDC; i: Integer; x: Integer; procedure GdipCheck(Status: Winapi.GDIPAPI.TStatus); begin if Status <> Ok then raise Exception.CreateFmt('%s', [GetStatus(Status)]); end; begin //Note: Code is public domain. No attribution required. bmp := TGPBitmap.Create(SourceImageList.Width*SourceImageList.Count, SourceImageList.Height); GdipCheck(bmp.GetLastStatus); g := TGPGraphics.Create(bmp); GdipCheck(g.GetLastStatus); g.Clear($00000000); GdipCheck(g.GetLastStatus); dc := g.GetHDC; for i := 0 to dmGlobal.imgImages.Count-1 do begin x := i * dmGlobal.imgImages.Width; ImageList_DrawEx(dmGlobal.imgImages.Handle, i, dc, x, 0, dmGlobal.imgImages.Width, dmGlobal.imgImages.Height, CLR_NONE, CLR_DEFAULT, ILD_TRANSPARENT); end; g.ReleaseHDC(dc); g.Free; Result := bmp; end; ![]() gruss |
AW: Bitmap transparent aus TImageList holen
Und wo soll die Bitmap reingeladen werden? Die Unterstützung für transparente Bitmaps, also solche die einen Alphakanal haben, nicht die Trickserei mit irgendwelchen "transparenten" Farben wie clFuchsia, ist IIRC auch in Rio nicht korrekt/vollständig eingebaut. Dafür aber eine wunderbare Unterstützung von PNGs. Ich befülle meine ImageListe mit PNGs und kann die mit einem Einzeiler in ein TImage füllen, transparent.
Delphi-Quellcode:
Sherlock
notesImg.Bitmap := GlobalDataModule.IconList.Bitmap(TSizeF.Create(cSmallImgSize, cSmallImgSize ), ImgIndex);
|
AW: Bitmap transparent aus TImageList holen
Zitat:
Zitat:
Einmalig beim Start der Anwendung wenn man es denn richtig macht. gruss |
AW: Bitmap transparent aus TImageList holen
Ahja, tut mir Leid, falscher Begriff. Wo soll die Bitmap schlußendlich angezeigt werden? Ein TImage kann auch PNG, und TSpeedButton ebenso. Ich will eigentlich nur sagen: es werden endlich "moderne" Bilddatentypen unterstützt. Warum nicht nutzen?
Sherlock |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:17 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-2025 by Thomas Breitkreuz