Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Jpeg in Speicher laden und auf Form darstellen. (https://www.delphipraxis.net/141606-jpeg-speicher-laden-und-auf-form-darstellen.html)

stiftII 12. Okt 2009 15:06


Jpeg in Speicher laden und auf Form darstellen.
 
Hallo zusammen,

(1)Wie kann ich ein Jpeg von einem Webserver in den Speicher laden(Sodass keine Datei erzeugt werden muss), kann man das einfach über die indykomponenten(idhttp) in eine TStringList laden ?

(2)Gibt es in Delphi soetwas wie ein "Tjpeg" objekt, mit dem man diesen Stream auf einem Canvas zeichnen könnte. Wie würde ich den Stream auf den Bildschirm zeichnen ?

Hoffe ihr könnt mir helfen.

~stift

Klaus01 12. Okt 2009 15:28

Re: Jpeg in Speicher laden und auf Form darstellen.
 
Hallo stiftII,

zu deiner ersten Frage:

TidHttp.get gibt es in einer überladenen Version welche einen Stream zurückgibt.
Diesen kannst Du nutzen.

Zur zweiten Frage:
Du kannst das jpg in ein TImage laden wenn Du die jpeg Unit in den uses eingebunden hast.

Grüße
Klaus

stiftII 12. Okt 2009 16:08

Re: Jpeg in Speicher laden und auf Form darstellen.
 
Vielen Dank, Klaus01.

Es klappt aber noch nicht ganz, beim laden des Streams gibt es eine Zugriffsverletzung.

Muss ich den Stream irgendwie initialisieren ? Ist TMemoryStream für Bilder geeignet ?

Ausschnitt aus meinem Quelltext:
Delphi-Quellcode:
var
mjpg : tidhttp;
mstream : Tmemorystream;
mimage : TImage;

begin
  mjpg := tidhttp.Create(form1);
  mstream := Tmemorystream.Create;
  mimage := Timage.Create(form1);


  mjpg.Get('www.internetse.de/bild.jpg',mstream);

  mimage.Picture.Graphic.LoadFromStream(mstream); // access violation hier

  form1.Canvas.Draw(0,0,mimage.Picture.Graphic);


....
~stift

Klaus01 12. Okt 2009 16:51

Re: Jpeg in Speicher laden und auf Form darstellen.
 
Hallo stift,

versuche es mal damit die Leseposition im Stream wieder auf den Anfang zu setzen.
Delphi-Quellcode:
var
mjpg : tidhttp;
mstream : Tmemorystream;
mimage : TImage;

begin
  mjpg := tidhttp.Create(form1);
  mstream := Tmemorystream.Create;
  mimage := Timage.Create(form1);


  mjpg.Get('www.internetse.de/bild.jpg',mstream);
  mstream.seek(0,soFromBeginning);        
  mimage.Picture.Graphic.LoadFromStream(mstream); // access violation hier

  form1.Canvas.Draw(0,0,mimage.Picture.Graphic);


....

Grüße
Klaus

stiftII 12. Okt 2009 17:07

Re: Jpeg in Speicher laden und auf Form darstellen.
 
Hallo nochmal.

Hat leider nicht geklappt, immer noch "access violation".

~stift

x000x 12. Okt 2009 17:12

Re: Jpeg in Speicher laden und auf Form darstellen.
 
Moin moin,

da du sowieso direkt auf die Form zeichnest, nehm doch ein TJPEGImage...
Delphi-Quellcode:
uses jpeg;
//..
var
   mjpg : tidhttp;
   mstream : Tmemorystream;
   mimage : TJpegImage;
begin
   mjpg   := tidhttp.Create(form1);
   mstream := Tmemorystream.Create;
   mimage := TJpegImage.Create;
   try
      mjpg.Get('www.internetse.de/bild.jpg',mstream);
      mstream.Position := 0;
      mimage.LoadFromStream(mstream);
      form1.Canvas.Draw(0,0,mimage);
   finally
      mimage.Free;
      mstream.Free;
      mjpg.Free;
   end;
end

stiftII 12. Okt 2009 20:44

Re: Jpeg in Speicher laden und auf Form darstellen.
 
Sowas gibts auch ? :D.
Klasse, funktioniert einwandfrei. Danke! :)

~stift


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:48 Uhr.

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