AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Jpeg als TGPBitmap aus Resource laden
Thema durchsuchen
Ansicht
Themen-Optionen

Jpeg als TGPBitmap aus Resource laden

Ein Thema von Amateurprofi · begonnen am 13. Feb 2016 · letzter Beitrag vom 17. Feb 2016
Antwort Antwort
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.058 Beiträge
 
Delphi XE2 Professional
 
#1

Jpeg als TGPBitmap aus Resource laden

  Alt 13. Feb 2016, 13:51
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?
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.058 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Jpeg als TGPBitmap aus Resource laden

  Alt 17. Feb 2016, 03:01
Hat dazu wirklich niemand eine Idee?
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#3

AW: Jpeg als TGPBitmap aus Resource laden

  Alt 17. Feb 2016, 05:07
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?
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.087 Beiträge
 
Delphi 12 Athens
 
#4

AW: Jpeg als TGPBitmap aus Resource laden

  Alt 17. Feb 2016, 08:34
Da gab es doch gerade einen schönen Hinweis von Sir Rufo ...

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

Rollo
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Jpeg als TGPBitmap aus Resource laden

  Alt 17. Feb 2016, 09:36
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)
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Jpeg als TGPBitmap aus Resource laden

  Alt 17. Feb 2016, 11:05
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 IStream -Referenz der Referenzzähler erhöht wird (ohne die Klasse 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;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.058 Beiträge
 
Delphi XE2 Professional
 
#7

AW: Jpeg als TGPBitmap aus Resource laden

  Alt 17. Feb 2016, 12:04
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.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.058 Beiträge
 
Delphi XE2 Professional
 
#8

AW: Jpeg als TGPBitmap aus Resource laden

  Alt 17. Feb 2016, 12:18
@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
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  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 21:27 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