Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Bild in TImage --> jpeg-Fehler #52 (https://www.delphipraxis.net/74322-bild-timage-jpeg-fehler-52-a.html)

Nisbo 1. Aug 2006 12:14


Bild in TImage --> jpeg-Fehler #52
 
Moin Moin,

ich lade anhand einer Liste Artikelbilder aus dem Internet, das funktioniert auch soweit auch die URL stimmt und das Bild vorhanden ist.

ist dies nicht der fal dann bekomme ich jpeg-Fehler #52 als Error

Delphi-Quellcode:
          // JPG
          if bildart = 'jpg' then begin
          try
            Form2.Image1.Visible := true;
            form2.image1.Picture.Graphic.LoadFromStream(aStream);
            except
               // showmessage('fehler'); // jpeg-Fehler #52   
               on E: Exception do showmessage('Fehler');

            end;

          end;
anhand von bildart wird unterschieden welches timage ich nutze also jpg oder gif, das schalte ich dann sichtbar aber das ist ja nicht das problem

habe mir also gedacht machste ne exeption rein, ok das programm stürzt nicht mehr ab, allerdings kommt weiterhin noch die fehlermeldung mit jpeg-Fehler #52 und nicht nur Fehler und genau das möchte ich vermeiden, also diesen standardfehler unterdrücken

Bernhard Geyer 1. Aug 2006 12:45

Re: Bild in TImage --> jpeg-Fehler #52
 
1, Vermutlich kommt hier keine Exception hoch sondern ein Message-Dialog in der Implementierung. Und den wirst du nicht unterdrücken können (außer duch Thread der diesen Dialog mit OK bestätigt)

2, Wieso überprüfst du denn nicht ob die JPEG-Datei überhaupt existiert und dann die gefährtete Aktion nicht durchführst.

Nisbo 1. Aug 2006 12:54

Re: Bild in TImage --> jpeg-Fehler #52
 
wie willste das denn überprüfen ?
die datei liegt im internet und da kommt immer was zurück, sei es nur ein 404
in dem fall wird wohl mittels htaccess ein mod_rewrite auf ein anderes bild geleitet

siehe selber
http://www.leserservice.de/leserserv.../101_cover.jpg

sakura 1. Aug 2006 13:06

Re: Bild in TImage --> jpeg-Fehler #52
 
#52 ist leider ein Standardfehler mit einigen Bildern und der Komponente. Meines Wissens nach gibt es da keine vernünftige Lösung und tritt unabhängig von Internet/Lokal auf :?

...:cat:...

DP-Maintenance 1. Aug 2006 13:06

DP-Maintenance
 
Dieses Thema wurde von "sakura" von "Object-Pascal / Delphi-Language" nach "Multimedia" verschoben.

Aenogym 1. Aug 2006 13:08

Re: Bild in TImage --> jpeg-Fehler #52
 
hi nisbo,

bits du dir denn sicher, dass du einfach die bilder von der seite laden darfst? wenn das erlaubt ist, gibt es meist eigene APIs, die dann auch funktionen zum überprüfen bereitstellen.
wenn nicht, dann ist die verwendung der bilder meistens auch nciht gestattet.

wenn du doch die erlaubnis hast, es aber keine API gibt, dann würde ich empfehlen, aus dem erhaltenen bild eine prüfsumme zu errechnen (MD5 tut's gut) und anhand dieser zu prüfen, ob es das "nicht verfügbar"-bild ist.

aeno

Nisbo 1. Aug 2006 13:12

Re: Bild in TImage --> jpeg-Fehler #52
 
dabei handelt es sich um affili.net welche auch die csv-daten bereitstellen in denen dann die links zu den artikelbildern sind, affili-net ist ja ein sammelanbieter und somit wird es wohl mit functionen zum überprüfen schwer werden

naja md5 checksumme wird mir da vermutlich auch nicht weiterhelfen, zumindest wüßte ich nicht wie denn diese checksumme muß ja schon irgendwie vorhanden sein, wird aber bei affilinet nicht angeboten

DGL-luke 1. Aug 2006 13:24

Re: Bild in TImage --> jpeg-Fehler #52
 
Naja, du kannst sie einfach selber machen... Hier im Forum suchenMD5 Datei Checksum da solltest du genug finden. Such dir das Bild einfach, mach die Checksumme davon, und dann speicherst du sie in deinem Programm und überprüfst sie.

sakura 1. Aug 2006 13:26

Re: Bild in TImage --> jpeg-Fehler #52
 
Hast Du das spezielle Bild, welches Dir Probleme macht, mal runtergeladen und einfach in der IDE versucht dieses in ein Image zu laden. Geht das?

...:cat:...

Nisbo 1. Aug 2006 13:29

Re: Bild in TImage --> jpeg-Fehler #52
 
@ DGL-luke

Zitat:

Leider konnte die Suchanfrage nicht beantwortet werden,
da die gesuchten Begriffe nicht in der Datenbank vorhanden sind.
naja wie soll ich da eine checksumme machen wenn ich das bild vorher ja nicht habe, das ganze ist ein von affilinet vorgebener content in einem csv file, wird online generiert mit immer aktuellen daten, dabei ist auch die url zum bild mit drin, kann da also keine checksum erstellen, nur von der url aber dann bin ich ja immer noch nicht weiter

@ sakura

http://www.leserservice.de/leserserv.../101_cover.jpg

das problem ist das dies eine weiterleitung ist, klicke einfach mal drauf dann wirst du es in der browserzeile sehen

DGL-luke 1. Aug 2006 13:33

Re: Bild in TImage --> jpeg-Fehler #52
 
ähm ja das mit der suche hab ich auch grad gemerkt....

Du kannst doch mit den Komponenten, mit denen du das Bild lädst (Indy?), sicher die Umleitung abfangen? und wenn die Umleitung auf default.jpg erfolgt, dann lass es halt sein ^^

Un die Checksumme kannst du dopch auch pber deault.jpg machen, oder meinst du, das ändert sich so schnell?

Nisbo 1. Aug 2006 13:36

Re: Bild in TImage --> jpeg-Fehler #52
 
das können ja verschiedene bilder sein, shop a hat default.jpg shop b dann keinbild.jpg usw
das ganze ist ja dynamisch deswegen bräuchte ich da was universelles

ach ja ich nutze indy

DGL-luke 1. Aug 2006 13:44

Re: Bild in TImage --> jpeg-Fehler #52
 
Ok. in Indy sollte es doch ein OnRedirect geben, oder?

Nisbo 1. Aug 2006 13:47

Re: Bild in TImage --> jpeg-Fehler #52
 
stimmt dieser punkt geht an dich :)
stellt sich jetzt nur die frage wie ich das mitten im programm abfragen kann ?

also das muß dann ja da irgendwie rein oder ?

Delphi-Quellcode:
// JPG
          if bildart = 'jpg' then begin
          try
            Form2.Image1.Visible := true;
            form2.image1.Picture.Graphic.LoadFromStream(aStream);
            except
               // showmessage('fehler'); // jpeg-Fehler #52   
               on E: Exception do showmessage('Fehler');

            end;

          end;

DGL-luke 1. Aug 2006 13:53

Re: Bild in TImage --> jpeg-Fehler #52
 
Nein.

Ich weiss nicht, welche Version der Indys hast, und wie dein restlcihe Implementation aussieht, aber du hast folgende Möglcihketien:

- Im OnReconnect den Reconnect abbrechen. Keine Ahnung, was dein IdHTTP1.Get dann zurückliefert.
- Im OnReconnect ein Boolean setzen, nach dem Zurückkerhen des Get Boolean prüfen und falls true ergebnis verwerfen
- Im OnReconnect dem Ding dein eigenes Fehlerbild unterjubeln, ka ob/wie das geht.

Nisbo 1. Aug 2006 13:56

Re: Bild in TImage --> jpeg-Fehler #52
 
mmm asche auf mein haupt, war ne kleine fehlinfo dabei, in dem teil arbeite ich gar nicht mit den indys sondern habe da ne funktion gefunden welche ich an meine bedürfnisse angepasst habe, die ganze funktion schaut so aus eventuell hilft das weiter

Delphi-Quellcode:
function DownloadURL(const aUrl: string; bildart: string): Boolean;
var
  hSession: HINTERNET;
  hService: HINTERNET;
  lpBuffer: array[0..1024 + 1] of Char;
  dwBytesRead: DWORD;
  aStream : TFileStream;
begin
  Result  := False;
  hSession := InternetOpen('MyApp', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  try
    if Assigned(hSession) then begin
      hService := InternetOpenUrl(hSession, PChar(aUrl), nil, 0, 0, 0);
      if Assigned(hService) then
        try
          aStream := TFileStream.Create('temp_bild'+ ExtractFileExt(aURL), fmCreate);
          while True do begin
            dwBytesRead := 1024;
            InternetReadFile(hService, @lpBuffer, 1024, dwBytesRead);
            if dwBytesRead = 0 then break;
            lpBuffer[dwBytesRead] := #0;
            aStream.WriteBuffer(lpBuffer, dwBytesRead);
          end;    
          aStream.Position := 0;

          // JPG
          if bildart = 'jpg' then begin
          try
            Form2.Image1.Visible := true;
            form2.image1.Picture.Graphic.LoadFromStream(aStream);
            except
               // showmessage('fehler'); // jpeg-Fehler #52   
               on E: Exception do showmessage('Fehler beim Laden des Artikelbildes');
            end;
          end;

          // Gif
          if bildart = 'gif' then begin
            Form2.Image2.Visible := true;
            form2.image2.Picture.Graphic.LoadFromStream(aStream);
          end;

          Result := True;
        finally
          FreeAndNil(aStream);
          InternetCloseHandle(hService);
        end;
    end;
  finally
    InternetCloseHandle(hSession);
  end;
end;


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