Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi JPEG-Fehler #42? (https://www.delphipraxis.net/40219-jpeg-fehler-42-a.html)

VirusXP 12. Feb 2005 16:48


JPEG-Fehler #42?
 
Hi Leutz,
ich hab mit meiner Handykamera (Nokia 7610) ein JPG geschossen und per Bluetooth auf den PC übertragen. Dann hab ich des Bild mit diversen FileStreams schlussendlich in einen MemoryStream kopiert, von dort wollt ich das über Image1.Picture.Graphic.loadfromStream(MyMemStream) anzeigen lassen, aber sobald das Prog auf die Zeile stößt und versucht das Bild anzuzeigen gibt es die Exception 'JPEG-Fehler #42' aus. Da hab ich mir gedacht übertrage ichs erst in ein TJPEGImage, vielleicht kommt ja Image1 nicht mit meinem MemoryStream JPEG klar; das hat dann auch geklappt über den Befehl JPEGImage1.loadFromstream(MyMemStream) aber als ich versuchte dann mit Image1.Picture.Graphic:=JPEGImage1 das Bild zu laden kam die gleiche Exception wieder. Auch der Versuch es in eine PaintBox mit Canvas.Draw zu zeichenen scheiterte. Außerdem hab ich das JPEG schon mal mit Paint geöffnet und dann wieder gespeichert (im Glauben Delphi käme nicht mit dem Nokia JPEG klar), aber auch das nichts. Als Bitmap mag ich es nicht speichern und laden, da ein Bitmap zu groß für den Anwendungszweck ist den ich mir Vorstelle.

Und so zu meiner Frage: WAS SOLL ICH NOCH MACHEN, DAMIT DAS DUMME JPEG ANGEZEIGT WIRD? :wall:

P.S.:Wenn ich das gleiche JPEG direkt mit dem ObjectInspektor in das Image einlade dann wirds angezeigt. *verzweifel*

Luckie 12. Feb 2005 16:51

Re: JPEG-Fehler #42?
 
Du musst das JPEG erst in ein Bitmap konvertieren, bevor du es in einem normalen TImage anzeigen kannst.

VirusXP 19. Feb 2005 16:26

Re: JPEG-Fehler #42?
 
Wie stelle ich des an; ich hab jetz schon versucht mit TBitmap.Assign(TJPEGImage) des in ein Bitmap umzuwandeln, ging zwar glatt und ohne Fehler, aber angezeigt hats mir des Bitmap dann nicht.

kiar 19. Feb 2005 16:29

Re: JPEG-Fehler #42?
 
schau hier

http://www.delphipraxis.net/internal...ight=jpegtobmp

raik

Neutral General 19. Feb 2005 16:31

Re: JPEG-Fehler #42?
 
geht das nicht einfach wenn man die unit jpeg einbindet ?

negaH 19. Feb 2005 16:51

Re: JPEG-Fehler #42?
 
Den Fehler #42 dürftest du trotzdem bekommen, egal ob du es in eine Bitmap vorher konvertierst. Das Problem entsteht ja gerade dann wenn aus dem TJpegImage eine Bitmap erzeugt werden soll die auf dem Display gezeichnet werden soll. Jpeg's zeichnen sich immer über den Umweg über Bitmaps.

Lade das JPEG in CorelPaint oä. und speichere es von dort aus erneut als neuse JPEG mit leicht geänderten Einstellungen ab. Dann ist die Wahrscheinlichkeit hoch das die JPEG Unit vom Delphi es lesen kann.
Nebenbei bemerkt die JPEG Unit im Delphi ist nicht die allerbeste.

Gruß Hagen

VirusXP 24. Feb 2005 17:24

Re: JPEG-Fehler #42?
 
Das JPEG in ein anderes JPEG umzuwandeln und dann zu laden, hab ich schon versucht mit dem gleichen negativen Ergebnis. :?
Was könnte ich noch probieren, gibts vielleicht ein ähnlich kleines und grafisch gutes Grafikformat des ich dann auch sicher laden kann?

negaH 24. Feb 2005 17:30

Re: JPEG-Fehler #42?
 
Jpeg nach Bitmap konverierten, danach diese Bitmap wieder nach Jpeg. Wenn es danach nicht funktioniert dann, jo dann weis ich auch nicht weiter. Was ist so besonderes an deiner JPEG ?

Gruß Hagen

VirusXP 24. Feb 2005 18:01

Re: JPEG-Fehler #42?
 
Hab ich jetz probiert und ich seh....nix.
Des einzig außergewöhnliche is halt, dass es ein JPEG is des mit der Handykamera meines Nokia 7650 aufgenommen is.

negaH 24. Feb 2005 23:55

Re: JPEG-Fehler #42?
 
Poste es doch mal ich vermute das das Jpeg irgendwie verkorkst ist.

Gruß Hagen

VirusXP 27. Feb 2005 14:06

Re: JPEG-Fehler #42?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ok ich poste mal son komisches JPEG. Probier du mal ob dus irgendwie schaffst.

negaH 27. Feb 2005 21:35

Re: JPEG-Fehler #42?
 
Ok, du bekommst den Fehler #41 (unter Delphi 5) und ich weis jetzt was DU falsch gemacht hast.

Alle Stream Operationen verändern den Stream-Zeiger -> Stream.Position, auch .LoadFromStream(). Will man erneut auf die Daten im Stream zugreifen so MUSS man vorher die .Position wieder auf den Anfang der Daten zurücksetzen. Sorry, aber ein oft gemachter Anfängerfehler.

Kurz gesagt: die Operationen der Streams in der VCL können die .Position innerhalb des Streams verändern sie dürfen sie aber niemals automatisch wieder auf 0 zurücksetzen. Das muß der Programmierer machen, logisch da ansonsten zb. in einem Stream nicht mehrere Bilder gespeichert werden könnten.

In deinem Falle

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  M: TMemoryStream;
  I: TJpegImage;
begin
  M := TMemoryStream.Create;
  I := TJpegImage.Create;
  try
    M.LoadFromFile(ExtractFilePath(ParamStr(0)) + '303649.jpg');

    M.Position := 0;        //  <--- so ist es richtig
//    M.Position := M.Size; //  <--- so ist es bei dir und Fehler #41 kommt
    I.LoadFromStream(M);

    Image1.Picture.Assign(I);
  finally
    M.Free;
    I.Free;
  end;
end;
Dein JPEG ist also absolut in Ordnung. Im obigen Beispiel wird .LoadFromFile() benutzt, und diese Funktion setzt sehr wohl M.Position auf 0 zurück. Das ist auch in diesem Falle logisch. Das Beispiel dient also nur als Demonstation wenn du zb. statt .LoadFromFile() .LoadFromStream() benuzten würdest.

Gruß Hagen

VirusXP 2. Mär 2005 18:52

Re: JPEG-Fehler #42?
 
Jetzt funzts endlich, :hello:
obwohl ich schon so lang und so oft des programmiert hab, vergess ich immer des wieder auf null zu setzen. Nochmal tausend dank. Sollten wir uns mal irgendwo über den weg laufen geb ich dir einen aus! :cheers:


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:57 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 by Thomas Breitkreuz