AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Alpha-PNG zur Laufzeit in eine TImageList laden (XE2)
Thema durchsuchen
Ansicht
Themen-Optionen

Alpha-PNG zur Laufzeit in eine TImageList laden (XE2)

Ein Thema von Codehunter · begonnen am 11. Feb 2013 · letzter Beitrag vom 12. Feb 2013
Antwort Antwort
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#1

Alpha-PNG zur Laufzeit in eine TImageList laden (XE2)

  Alt 11. Feb 2013, 12:59
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
Miniaturansicht angehängter Grafiken
image45.png   image46.png  
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: Alpha-PNG zur Laufzeit in eine TImageList laden (XE2)

  Alt 11. Feb 2013, 17:15
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;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Alpha-PNG zur Laufzeit in eine TImageList laden (XE2)

  Alt 11. Feb 2013, 21:44
Doch, funktioniert.... genauso bescheiden wie mein Versuch oben.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: Alpha-PNG zur Laufzeit in eine TImageList laden (XE2)

  Alt 11. Feb 2013, 23:57
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
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Alpha-PNG zur Laufzeit in eine TImageList laden (XE2)

  Alt 12. Feb 2013, 07:42
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.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden

Geändert von Codehunter (12. Feb 2013 um 07:45 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:06 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