Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Alpha-PNG zur Laufzeit in eine TImageList laden (XE2) (https://www.delphipraxis.net/173178-alpha-png-zur-laufzeit-eine-timagelist-laden-xe2.html)

Codehunter 11. Feb 2013 12:59

Alpha-PNG zur Laufzeit in eine TImageList laden (XE2)
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo!

Ich habe eine TImageList und darin per Property-Editor ein Alpha-PNG geladen. Dieses PNG wird zur Laufzeit z.B. auf einem SpeedButton korrekt angezeigt (Screenshot 1). Wenn ich das selbe PNG (exakt die selbe Datei) zur Laufzeit in die ImageList nachlade, dann sieht es aus wie im Screenshot 2. Wo mache ich da den Denkfehler?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  PNG: TPngImage;
  BMP: TBitmap;
begin
  PNG:= TPngImage.Create;
  BMP:= TBitmap.Create;
  try
    PNG.LoadFromFile('test.png');
    BMP.PixelFormat:= pf32bit;
    PNG.AssignTo(BMP);
    ImageList_Add(ImageList.Handle, BMP.Handle, 0);
    SpeedButton.ImageIndex:= 1;
  finally
    PNG.Free;
//    BMP.Free;
  end;
end;
PS: Das eine fehlende Free ist mir schon klar, nur zu Testzwecken ;-)

Bummi 11. Feb 2013 17:15

AW: Alpha-PNG zur Laufzeit in eine TImageList laden (XE2)
 
ich habe gerade nur D2010 zur Hand, folgendes funktioniert bei Dir nicht?

Delphi-Quellcode:
var
  PNG: TPngImage;
  BMP: TBitmap;
begin
  PNG:= TPngImage.Create;
  BMP:= TBitmap.Create;
  try
    PNG.LoadFromFile('.......\xyz.png');
    bmp.Assign(png);
    Imagelist.Add(bmp,nil);
  finally
    PNG.Free;
    BMP.Free;
  end;
end;

Codehunter 11. Feb 2013 21:44

AW: Alpha-PNG zur Laufzeit in eine TImageList laden (XE2)
 
Doch, funktioniert.... genauso bescheiden wie mein Versuch oben.

Bummi 11. Feb 2013 23:57

AW: Alpha-PNG zur Laufzeit in eine TImageList laden (XE2)
 
einen Versuch hätte ich noch anzubieten
Delphi-Quellcode:
var
 ico:TIcon;
begin
 ico:=TIcon.Create;
 try
   LoadPNGAsIcon('C:\Bilder\IconCollection\ix_ap_all\32x32\shadow\about.png',ico);
   imagelist1.AddIcon(ico);
   Action1.ImageIndex := 0;
   Speedbutton1.Action := Action1;

 finally
   ico.Free;
 end;
end;
mit der Routine von hier

Codehunter 12. Feb 2013 07:42

AW: Alpha-PNG zur Laufzeit in eine TImageList laden (XE2)
 
Jau! :-) Das funktioniert. Übrigens auch ohne den Umweg über TAction, wovon ich in anderen Threads hier auch schon gelesen habe. Ich würde das Ganze so interpretieren, dass das Standard-VCL-TBitmap entgegen allen Erwartungen doch nicht 100% RGBA-fähig ist.

Hätte aber nicht gedacht, dass man solche Klimmzüge machen muss. Gerade weil Delphi inzwischen spezialisierte Klassen wie TPNGObject und TPNGImage mitliefert und TBitmap eigentlich RGBA unterstützen soll.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:36 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz