Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Jpeg als TGPBitmap aus Resource laden (https://www.delphipraxis.net/188254-jpeg-als-tgpbitmap-aus-resource-laden.html)

Amateurprofi 13. Feb 2016 12:51

Jpeg als TGPBitmap aus Resource laden
 
Um Jpegs aus einer Resource zu laden gehe ich zur Zeit so vor:

Delphi-Quellcode:
PROCEDURE TMain.LoadFromResource(const S:String; var Bmp:TBitmap);
var Jpg:TJpegImage; Stream:TResourceStream;
begin
   Jpg:=TJPEGImage.Create;
   Stream:=TResourceStream.Create(HInstance,S, RT_RCDATA);
   Jpg.LoadFromStream(Stream);
   if not Assigned(Bmp) then Bmp:=TBitmap.Create;
   Bmp.Assign(Jpg);
   Stream.Free;
   Jpg.Free;
end;
Ich würde aber gern in eine TGPBitmap laden und habe versucht:
Delphi-Quellcode:
{
uses
  ...,
  Winapi.Gdipapi, Winapi.GdipObj,
  ...;
}
Delphi-Quellcode:
PROCEDURE TMain.LoadFromResource(const S:String; var Bmp:TGPBitmap);
var Stream:TResourceStream;
begin
   Stream:=TResourceStream.Create(HInstance,S, RT_RCDATA);
   Bmp:=TGPBitmap.Create(Stream,False);
   Stream.Free;
end;
Das geht so aber nicht, weil:
[DCC Fehler] Memory_Main.pas(2195): E2250 Es gibt keine überladene Version von 'Create', die man mit diesen Argumenten aufrufen kann

Mir ist klar, dass dass das TGPBitmap.Create(Stream,False); als ersten Parameter einen IStream erwartet, statt TResourceStream,
was mir aber nicht klar ist:
Wie bekomme ich einen IStream?
Oder allgemeiner gefragt: Wie kann ich eine Jpeg als TGPBitmap aus einer Resource laden?

Amateurprofi 17. Feb 2016 02:01

AW: Jpeg als TGPBitmap aus Resource laden
 
Hat dazu wirklich niemand eine Idee?

Delphi-Laie 17. Feb 2016 04:07

AW: Jpeg als TGPBitmap aus Resource laden
 
Zitat:

Zitat von Amateurprofi (Beitrag 1330590)
Hat dazu wirklich niemand eine Idee?

Soll das so sein, daß Du bmp als Variablenparameteran der Prozedur übergibst bzw. in diese einschleust, dann aber in der Prozedur erst erzeugst?

Rollo62 17. Feb 2016 07:34

AW: Jpeg als TGPBitmap aus Resource laden
 
Da gab es doch gerade einen schönen Hinweis von Sir Rufo ...

http://www.delphipraxis.net/1330587-post3.html

Rollo

Neutral General 17. Feb 2016 08:36

AW: Jpeg als TGPBitmap aus Resource laden
 
Hallo,

Probiers mal so:
Delphi-Quellcode:
procedure TMain.LoadFromResource(const S:String; var Bmp:TGPBitmap);
var Stream:TResourceStream;
    adapter: TStreamAdapter;
begin
   Stream:=TResourceStream.Create(HInstance,S, RT_RCDATA);
   adapter := TStreamAdapter.Create(Stream);
   Bmp:=TGPBitmap.Create(adapter, False);
   adapter.Free;
   Stream.Free;
end;
(PS: Ein try-finally ist beim Erzeugen/Zerstören von Objekten sehr sinnvoll)

Sir Rufo 17. Feb 2016 10:05

AW: Jpeg als TGPBitmap aus Resource laden
 
Zitat:

Zitat von Neutral General (Beitrag 1330613)
Delphi-Quellcode:
procedure TMain.LoadFromResource(const S:String; var Bmp:TGPBitmap);
var Stream:TResourceStream;
    adapter: TStreamAdapter;
begin
   Stream:=TResourceStream.Create(HInstance,S, RT_RCDATA);
   adapter := TStreamAdapter.Create(Stream);
   Bmp:=TGPBitmap.Create(adapter, False);
   adapter.Free;
   Stream.Free;
end;
(PS: Ein try-finally ist beim Erzeugen/Zerstören von Objekten sehr sinnvoll)

Kleine Änderung, da man nicht weiß ob bei der übergebenen
Delphi-Quellcode:
IStream
-Referenz der Referenzzähler erhöht wird (ohne die Klasse
Delphi-Quellcode:
TGPBitmap
zu untersuchen)
Delphi-Quellcode:
procedure TMain.LoadFromResource( const S: String; var Bmp: TGPBitmap );
var
  Stream: TResourceStream;
  adapter: IStream;
begin
  Stream := TResourceStream.Create( HInstance, S, RT_RCDATA );
  adapter := TStreamAdapter.Create( Stream, soOwned );
  Bmp := TGPBitmap.Create( adapter, False );
end;

Amateurprofi 17. Feb 2016 11:04

AW: Jpeg als TGPBitmap aus Resource laden
 
Zitat:

Zitat von Delphi-Laie (Beitrag 1330591)
Zitat:

Zitat von Amateurprofi (Beitrag 1330590)
Hat dazu wirklich niemand eine Idee?

Soll das so sein, daß Du bmp als Variablenparameteran der Prozedur übergibst bzw. in diese einschleust, dann aber in der Prozedur erst erzeugst?

Ja, das ist bewusst so gemacht; trotzdem danke für den Hinweis.

Amateurprofi 17. Feb 2016 11:18

AW: Jpeg als TGPBitmap aus Resource laden
 
@Neutral General:
@Sir Rufo:

Vielen Dank, das funktioniert hervorragend.

@Neutral General: Zu (PS: Ein try-finally ist beim Erzeugen/Zerstören von Objekten sehr sinnvoll)
Ja, in meinem Programm ist das auch alles schön verpackt.
Ich wollte das in meiner Frage etwas vereinfacht darstellen


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:33 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