große Jpeg-Datei in Picture laden. ---> Fehlermeldung

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
br_klaus
Beiträge: 244
Registriert: Do 21. Jan 2010, 22:33
OS, Lazarus, FPC: Windows Vista (L 0.9.31 FPC 2.5.1)
CPU-Target: 32Bit
Wohnort: z.z. Brasilien, sonst 82335 Berg-Leoni (südlich von München)

große Jpeg-Datei in Picture laden. ---> Fehlermeldung

Beitrag von br_klaus »

Hallo,

bisher hatte ich mit FreeImage gearbeitet (Open Source, aus Delphi portiert), um große jpg-Dateien zu laden (ca. 5000 x 6000 Pixel, das heißt etwa 90 MB große Bitmap im Speicher bei 24 bpp).
Das hat jedoch den Nachteil, daß man da immer eine große FreeImage.dll (unter Windows) mit sich herumschleppen muß (>1MB). - Gibt es vielleicht eine Möglichkeit, den Compiler anzuweisen, nur das in das Programm zu laden, was er braucht und dann in der Unit mit abzuspeichern, so daß die Library dann nicht mehr gebraucht wird? -

Beim Versuch, dasselbe mit der Funktion

Code: Alles auswählen

image1.picture.LoadFromFile(filename)

zu machen, erhalte ich jedoch eine Fehlermeldung: ungültiges jpeg-Format.
Alle anderen Programme, wie zB irfanview oder Quickview im FreeCommander haben mit den Dateien keinerlei Probleme, Lazarus schon. Ist das ein Bug? Oder woran kann das liegen?
(Ich benutze Lazarus-0.9.31 - FPC-2.5.1 und Windows Vista).

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: große Jpeg-Datei in Picture laden. ---> Fehlermeldung

Beitrag von MAC »

kommt der fehler bei imag1.picture.loadfromfile nur bei großen jpeg bildern oder bei allen, normalerweise sollte es immer klappen...
du kannst du .dll warscheinlich nicht in dein programm einbinden, was du aber kannst ist dir den source code zu besorgen (da opensource) du benötigten funktionen rauszukopieren und bei dir in de extra unit einfügen und dann gan normal miitkompilieren.
normalerweise nen bischen strg+c + strg+v und 2-3 sachen abändern...

Code: Alles auswählen

Signatur := nil;

br_klaus
Beiträge: 244
Registriert: Do 21. Jan 2010, 22:33
OS, Lazarus, FPC: Windows Vista (L 0.9.31 FPC 2.5.1)
CPU-Target: 32Bit
Wohnort: z.z. Brasilien, sonst 82335 Berg-Leoni (südlich von München)

Re: große Jpeg-Datei in Picture laden. ---> Fehlermeldung

Beitrag von br_klaus »

Habe den Fehler entdeckt: war eine PNG-Datei mit falscher JPG-Erweiterung. Nur schade, daß das keines der Lazarus-Komponenten und anderen Units erkennen kann. Habe es erst durch OpBitmap gemerkt, als ich sah, daß das erste gelesene Byte <> FF war. Das gab dann eine Fehlermeldung.

Was die Einbindung bzw Herauskopieren der einzelnene Prozeduren aus der DLL-Source betrifft: ist leider alles in C, damit kann ich nur wenig anfangen...

Aber herzilichen Dank für den Hinweis.

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: große Jpeg-Datei in Picture laden. ---> Fehlermeldung

Beitrag von Socke »

br_klaus hat geschrieben:Habe den Fehler entdeckt: war eine PNG-Datei mit falscher JPG-Erweiterung. Nur schade, daß das keines der Lazarus-Komponenten und anderen Units erkennen kann. Habe es erst durch OpBitmap gemerkt, als ich sah, daß das erste gelesene Byte <> FF war. Das gab dann eine Fehlermeldung.

In solchen Fällen hilft auch das Unix-Programm file weiter, aber das ist unter Windows nicht immer (eher selten) zu finden. Da du TPicture zum Laden verwendest, könntest man anregen, TPicture.LoadFromFile() dahingehend zu erweitern, dass file aufgerufen wird, wenn es vorhanden ist, und anhand des Ergebnisses und nicht anhand des Dateinamens das Bild zu laden.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Antworten