Ähm... Worin besteht das Problem?
Wird einem Bitmap ein PNG-Bild zugewiesen, wird automatisch (falls vorhanden) die Transparenz übergeben und das Bitmap hat 32 Bit Farbtiefe (RGBA). Wird das Bitmap jetzt zur Image-Liste hinzugefügt, wird auch dabei die Transparenz berücksichtigt. Einzige Bedingung dabei: TImageList.ColorDepth muß auf cd32Bit stehen.
Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
var
Bmp: TBitmap;
begin
Bmp:=TBitmap.Create;
try
//Die Übergabe der Bilddaten erfolgt dabei von
//TPNGImage.AssignTo(Bmp):
Bmp.Assign(Image1.Picture.Graphic);
//Die Maske ist egal, weil der Alpha-Kanal schon
//im Bitmap enthalten ist:
ImageList1.Add(Bmp,nil);
finally
Bmp.Free;
end;
end;
Weshalb also die ganzen Kopfstände mit
GDI+, TPngImageList und Co.?
P.S.:
Text wird nun einmal ohne Hintergrund gerendert. Willst Du das nicht, setze
Delphi-Quellcode:
Canvas.TextFlags:=Canvas.TextFlags or ETO_OPAQUE;
//...