AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

JPG per Http einbinden

Ein Thema von WIng2005 · begonnen am 21. Aug 2008 · letzter Beitrag vom 11. Jan 2009
Antwort Antwort
WIng2005

Registriert seit: 20. Mär 2006
Ort: Thüringen
388 Beiträge
 
Delphi XE Starter
 
#1

JPG per Http einbinden

  Alt 21. Aug 2008, 12:05
Hallo Gemeinde,

ich möchte in ein Objekt vom Typ TGraphic eine JPG-Datei laden. Funktioniert auch soweit.
Versuche ich jedoch die Datei von einem Webserver zu laden, schlägt der Aufruf fehl:

Delphi-Quellcode:
var pfad:string;
    jpg:TGraphic;
 
pfad:='http://192.168.0.1/bilder/bild.jpg';

jpg:=TJPEGImage.create;
jpg.LoadFromFile(pfad); //->Pfad='C:\.....\Http:\192.168.0.1\Bilder\bild.jpg
.
.
.
.
freeandnil(jpg);
Wie könnte man das umgehen? Ziel ist es, ein Bild in einem Grid (NextGrid) anzuzeigen (ObjectReference).

MFG
Steffen
  Mit Zitat antworten Zitat
Benutzerbild von smallsmoker
smallsmoker

Registriert seit: 12. Nov 2007
Ort: Duisburg
283 Beiträge
 
#2

Re: JPG per Http einbinden

  Alt 21. Aug 2008, 12:16
die datei herunterladen und dann in jpg laden ?


Delphi-Quellcode:
uses
  URLMon;

[...]

function DownloadFile(SourceFile, DestFile: string): Boolean;
begin
  try
    Result := UrlDownloadToFile(nil, PChar(SourceFile), PChar(DestFile), 0, nil) = 0;
  except
    Result := False;
  end;
end;
mfg smallsmoker
  Mit Zitat antworten Zitat
kachel81

Registriert seit: 21. Okt 2004
25 Beiträge
 
#3

Re: JPG per Http einbinden

  Alt 21. Aug 2008, 12:18
Ja, die LoadFromFile Funktion kann nicht per HTTP downloaden, sondern nur lokale Dateien oder was per UNC-Pfad aus dem Netzwerk so zu erreichen ist.

Vom Ablauf her mußt Du die Datei runterladen, dann hast Du sie als Stream und den mußt Du Deinem TJPEGimage zuweisen.

Delphi-Quellcode:
var
  myClient: TidHTTP;
  myMemoryStream: TMemoryStream;
  myJPEG: TJPEGimage;
begin
  myClient := TidHTTP.Create(Self);
  myMemoryStream := TMemoryStream.Create;
  myJPEG := TJPEGImage.Create;

  try
    myClient.Get('http://meinbild.de/bild.jpg', myMemoryStream);
    myMemoryStream.Position := 0;
    myJPEG.LoadFromStream(myMemoryStream);
  finally
    myJPEG.Free;
    myMemoryStream.Free;
    myClient.Free;
  end;
end;
Code ist ungetestet!
  Mit Zitat antworten Zitat
WIng2005

Registriert seit: 20. Mär 2006
Ort: Thüringen
388 Beiträge
 
Delphi XE Starter
 
#4

Re: JPG per Http einbinden

  Alt 21. Aug 2008, 12:51
Vielen Dank für die Tips..!!
Auf das "Runterladen" hätte ich auch kommen sollen ... .. naja, manchmal steht man auf dem Schlauch!
Habe mich an der ersten Version orientiert, funktioniert sehr gut... Trotzdem Danke an euch BEIDE!!

MFG
Steffen
  Mit Zitat antworten Zitat
TheThrust

Registriert seit: 30. Jan 2008
19 Beiträge
 
#5

Re: JPG per Http einbinden

  Alt 11. Jan 2009, 16:08
Hey!

Sorry, dass ich in diesem realtiv alten Thread noch einmal poste, aber mein Problem passt dort einfach perfekt hin.

Ich habe eine JPEG-Datei runtergeladen und möchte die jetzt aber auch bearbeiten können.
Soweit ich weiß geht das nur mit bmp's, also hab ich folgendes versucht:

Delphi-Quellcode:
var
  myClient: TidHTTP;
  myMemoryStream: TMemoryStream;
  myJPEG: TJPEGimage;
  var bitm : TBitmap; //<----
begin
  myClient := TidHTTP.Create(Self);
  myMemoryStream := TMemoryStream.Create;
  myJPEG := TJPEGImage.Create;
  try
    myClient.Get('http://server/img.jpg', myMemoryStream);
    myMemoryStream.Position := 0;
    myJPEG.LoadFromStream(myMemoryStream);
    Image1.Picture.Graphic := myJPEG; //Das funktionier hervorragend
    bitm := TBitmap.Create;
    bmp_img.Assign(myJPEG); //Hier liegt das Problem!!
    Image1.Picture.Bitmap := bmp_img;
  finally
    myJPEG.Free;
    myMemoryStream.Free;
    myClient.Free;
  end;
end;
Als Parameter fordert die .Assign() Funktion einen TPersistent, kann es sein, das dort der Fehler liegt, weil mein JPEG nicht gespeichert ist?
Generell habe ich mit der Funktion und JPEG-Dateien nie ein Problem gehabt, aber die kamen auch nie aus einem Stream...
Hat jemand eine Idee, wieso da folgende Fehlermeldung kommt??
Zitat:
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00487C29 in module 'Project1.exe'. Read of address 00000000'. Process stopped. Use Step or Run to continue.
Vielen Dank noch an kachel81 für den Quelltext!
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#6

Re: JPG per Http einbinden

  Alt 11. Jan 2009, 16:58
Hi,

du musst die Bitmap noch vorher erstellen. Also TBitmap.Create.

Mfg
FAlter
Felix Alter
  Mit Zitat antworten Zitat
TheThrust

Registriert seit: 30. Jan 2008
19 Beiträge
 
#7

Re: JPG per Http einbinden

  Alt 11. Jan 2009, 17:03
Ja, ich hab mich oben vertippt, die Bitmap war schon erstellt, nur das Problem war, dass auch schon per .LoadFromFile() eine JPEG-Datei eingebunden war, was das Problem zu sein schein.

Ich habe das ganze mit einer "leeren" Bitmap versucht und voilà, es funktiuoniert

Trotzdem Danke für deinen Beitrag FAlter!

Problem gelöst
  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 18:41 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