Autor Beitrag
Ares
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 128



BeitragVerfasst: Mi 05.11.08 19:46 
Hallo!

Kann mir jemand sagen wie ich ein PNG Bild aus einer Resource-Datei in einem TImage anzeige? Ich verwende Delphi 2009, dort lassen sich PNGs ja ohne weitere Probelem im TImage anzeigen, nur wie bekomme ich ein PNG aus einer Resource-Datei dort rein?

Mit Bitmaps und JPGs ist das kein Problem, nur PNGs wollen mir nicht gelingen:

ausblenden Quelltext
1:
2:
3:
BMP BITMAP DISCARDABLE "Test.bmp"
JPG RCDATA DISCARDABLE "Test.jpg"
PNG RCDATA DISCARDABLE "Test.png"


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
{$R 'Test.RES'}

procedure TForm1.Button1Click(Sender: TObject);
var
  Stream: TResourceStream; 
  jpg: TJpgImage;
begin
  Image1.Bitmap.LoadFromResourceName(HInstance, 'BMP', RT_BITMAP); // OK
  
  Stream:=TResourceStream.Create(HInstance, 'JPG', RT_RCDATA);
  jpeg := TJpegImage.Create; 
  jpg.LoadFromResourceStream(Stream); // OK
  Image2.Picture.Assign(jpg);
  
  Stream:=TResourceStream.Create(HInstance, 'PNG', RT_RCDATA);
  Image1.Picture.Graphic.LoadFromStream(Stream); // Nicht OK
end;


Das Laden des PNGs klappt so leider nichts. Es passiert einfach nicht. Für ein direktes Laden per LoadFromResourceName wie beim TBitmap fehlt mirein TPng oder dergleichen...

Wie bekomme ich das PNG also in das Image?

Besten Dank
Ares
delphi10
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 447
Erhaltene Danke: 2

W2K, XP, Vista64, Win7 64
RAD-Studio 2010
BeitragVerfasst: Mi 05.11.08 20:46 
Guckst du hier: www.delphipraxis.net...=loadpngintobitmap32
letzter Beitrag ganz unten

_________________
Salus populi suprema lex esto
ub60
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 764
Erhaltene Danke: 127



BeitragVerfasst: Mi 05.11.08 21:34 
Suche mal nach GraphicEx, damit sollte es gehen.

ub60
Ares Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 128



BeitragVerfasst: Do 06.11.08 10:45 
Mmh, das müsste doch eigentlich auch ohne zusätzliche Komponenten gehen oder? Bislang habe ich mit Delphi 2007 gearbeitet und dort die zusätzliche Komponente TPNGImage für die PNG-Unterstüzung installiert. Das ganze stammte aus dem PNGComponentesPack wo auch ein PNGButton, eine PNGImageList, etc. enthalten waren.

Soweit ich weiß ist genau diese Komponente nun aber direkt in Delphi2009 integriert und müsste daher eigentlich nicht mehr extra installiert werden. Wenn ich versuche den PNGComponentesPack zu installieren erhalte ich auch die Meldung

Zitat:

Package 'PNGComponentsPack kann nicht geladen werden.' Es enthält die Unit 'pngimage,'die auch im Package 'vclimg120' enthalten ist.


Wie kann ich dieses (vorhandene) PNGImage nutzen?
ub60
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 764
Erhaltene Danke: 127



BeitragVerfasst: Do 06.11.08 10:48 
so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
var PNGObjekt : TPNGObject;
begin
  // mit Dateien
  PNGObjekt:=TPNGObject.Create;
  PNGObjekt.LoadFromFile('bild.png');
  PNGImage.Picture.Assign(PNGObjekt);
  PNGObjekt.Free;
  // mit Ressourcen
  PNGObjekt:=TPNGObject.Create;
  PNGObjekt.LoadFromResourceName(HInstance, 'PNG1');
  PNGImage2.Picture.Assign(PNGObjekt);
  PNGObjekt.Free;
end;

ub60
Ares Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 128



BeitragVerfasst: Do 06.11.08 10:57 
Hallo ub60!

Das funktioniert unter Delphi 2007 prima wenn ich den PNGComponentsPack installiert und die Unit PNGImage referenziert habe. Aber welche Unit muss ich unter Delphi 2009 referenzieren um TPNGObject nutzen zu können?
ub60
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 764
Erhaltene Danke: 127



BeitragVerfasst: Do 06.11.08 11:22 
Habe leider auch kein D2009. Meine Variante war auch für eine frühere Delphi-Version.
Aber:
Man muss die Dateien nicht installieren. Das Vorhandensein im Suchpfad sollte reichen.

ub60
Ares Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 128



BeitragVerfasst: Do 06.11.08 11:37 
user profile iconub60 hat folgendes geschrieben Zum zitierten Posting springen:
Man muss die Dateien nicht installieren. Das Vorhandensein im Suchpfad sollte reichen.


Ich müsste die PNGImage.pas aber in einer eigenen Komponente verwenden. Diese muss ich ja installieren. Versuche ich dies erhalte ich die genannte Fehlermeldung. Komisch ist, dass ich das Package vlmimg120 nirgends finden kann...