AGB  ·  Datenschutz  ·  Impressum  







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

JPEG-Fehler: #41

Ein Thema von clues1 · begonnen am 11. Feb 2004 · letzter Beitrag vom 20. Feb 2004
Antwort Antwort
Seite 1 von 2  1 2      
clues1

Registriert seit: 11. Feb 2004
97 Beiträge
 
#1

JPEG-Fehler: #41

  Alt 11. Feb 2004, 10:10
Hi, habe folgendes Problem:

Ich öffne Bilder, mit TImage.
Dann lade ich das bild in ein TJPEGImage ein.
> jpg.assign(Image.Picture.Graphic);
dieses JPG speichere ich in ein FileStream.
> jpg.savetofilestream(fs);

Nun will ich diese Datei wieder laden.
> jpg.loadfromfilestream(fs);
Das Funktioniert auch.
Wenn ich das Bild ins Image wieder lade funkt das auch.
> img.picture.assign(jpg);
Manchmal kommt aber hier an der Stelle folgende Meldung:
"JPEG-Fehler: #41" Vorallem wenn ich in der Datei mehr als ein Bild mit FileStream Speichere.

was könnte das sein?
  Mit Zitat antworten Zitat
clues1

Registriert seit: 11. Feb 2004
97 Beiträge
 
#2

Re: JPEG-Fehler: #41

  Alt 11. Feb 2004, 11:57
Ich nochmal.
Ich habe noch ein bissel rum probiert.
wenn ich das gleiche mit TBitmap mache funktioniert das super.
Leider nicht mit JPEG. Nur das Erste Bild wird ordentlich geladen. Ich will mehrere Bilder in eine Datei per FS speichern aber die Bilder so stark wie möglich Komprimieren.
Kann das sein das JPEGImage ein Bug hat?
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: JPEG-Fehler: #41

  Alt 11. Feb 2004, 14:08
Hi! Willkommen in der DP! (Delphi-Groups reichen net mehr? )

Ein kleiner Auszug aus dem BDN:

Zitat:
If you have used the TJpegImage class you may be familiar with the "JPEG error #xx" error that comes up on occasion. You may want to know exactly what went wrong, and how to get more information based on that number.

Luckily, the TJpegImage pascal source is included on the Delphi CD. Looking at the source, you will notice that it is a wrapper around some C code. There is one particular file called "jerror.h" which contains an enumeration of error strings. Based on the offset in this enum, you can find out what a given error number means.

For ease of use, I converted the "jerror.h" file to pascal in the unit JpegErrors.pas. To use this unit, simply reference the string array cJpegErrors, passing a given error number to find the error string, such as:

Label1.Caption := cJpegErrors[StrToInt(Edit1.Text)]
Note that the JpegErrors.pas unit was based on the Jpeg source that comes with Delphi 5. If the order of the error messages in "jerror.h" ever changes, the JpegErrors.pas will not by in sync with it and has to be updated.
Dann findest du zu mindest heraus, was das für ein Fehler ist.
Alternativ könnte man mit Resourcen arbeiten. Die lassen sich, so wie ich das mal las, auch nachträglich zur Laufzeit modifizieren. Wie genau, müsste bei Bedarf gesucht werden. Ich will nix falsches sagen


gruss,
dizzy
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
clues1

Registriert seit: 11. Feb 2004
97 Beiträge
 
#4

Re: JPEG-Fehler: #41

  Alt 11. Feb 2004, 14:54
Zitat:
Hi! Willkommen in der DP! (Delphi-Groups reichen net mehr? )
hi ich habe mir gedacht, wenn ich hier noch frage ist die chance zum lösen höher.

Mein Quellcode funktioniert mit TBitmap und TPNGObject, aber nicht mit TJPEGImage .
Wenn ich die Bilder Speichere und wieder lade, läd der bei JPEG mittels LoadFromStream nur das erste Bild, danach bringt der bei jedem weiteren Bild eine Fehlermeldung (siehe oben). Ich kann mir das erste Bild anzeigen lassen aber die anderen nicht . Ich habe dann einfach mal TJPEGImage mit TPNGObject überschrieben, das funktioniert auch, sowie TBitmap.
Ich möchte aber die Foto-Bilder nicht mit PNG speichern, da Sie je größer sind.
.
Danke erstmal für dein Tipp, folgende Text gibt es mir aus "Empty input file". Ah das bild exisitiert nicht im Speicher, toll warum läd der das nicht aus/ins Stream?
  Mit Zitat antworten Zitat
clues1

Registriert seit: 11. Feb 2004
97 Beiträge
 
#5

Re: JPEG-Fehler: #41

  Alt 12. Feb 2004, 08:21
@all

Problem habe ich nun gelöst:

Code:
function LoadJPGFromStream(FS: TFileStream; var JPG: TJPEGImage): boolean;
var MS: TMemoryStream;
    s: Cardinal;
    offset: cardinal;
begin
  MS := TMemoryStream.Create;

  FS.ReadBuffer(S, sizeof(s));
  offset := FS.Position;

  JPG.LoadFromStream(FS);
  FS.Position := offset + s;

  MS.free;
end;

function SaveJPGToStream(FS: TFileStream; JPG: TJPEGImage): boolean;
var MS: TMemoryStream;
    s: Cardinal;
begin
  MS := TMemoryStream.Create;

  JPG.SaveToStream(MS);
  s := MS.Size;

  FS.WriteBuffer(S, sizeof(s));
  JPG.SaveToStream(FS);

  MS.free;
end;
Ich habe nun diese 2 Funktionen zu speichern und lesen von JPEGImages erstellt.
Das Problem in JPEGImage liegt daran, das LoadFromStream immer zum ende des Streams springt.
  Mit Zitat antworten Zitat
clues1

Registriert seit: 11. Feb 2004
97 Beiträge
 
#6

Re: JPEG-Fehler: #41

  Alt 12. Feb 2004, 08:21
@all

Problem habe ich nun gelöst:

Code:
function LoadJPGFromStream(FS: TFileStream; var JPG: TJPEGImage): boolean;
var MS: TMemoryStream;
    s: Cardinal;
    offset: cardinal;
begin
  MS := TMemoryStream.Create;

  FS.ReadBuffer(S, sizeof(s));
  offset := FS.Position;

  JPG.LoadFromStream(FS);
  FS.Position := offset + s;

  MS.free;
end;

function SaveJPGToStream(FS: TFileStream; JPG: TJPEGImage): boolean;
var MS: TMemoryStream;
    s: Cardinal;
begin
  MS := TMemoryStream.Create;

  JPG.SaveToStream(MS);
  s := MS.Size;

  FS.WriteBuffer(S, sizeof(s));
  JPG.SaveToStream(FS);

  MS.free;
end;
Ich habe nun diese 2 Funktionen zu speichern und lesen von JPEGImages erstellt.
Das Problem in JPEGImage liegt daran, das LoadFromStream immer zum ende des Streams springt.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: JPEG-Fehler: #41

  Alt 12. Feb 2004, 08:23
Ich vermisse eine Ressourcen-Schutzblock mit try-finally.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
clues1

Registriert seit: 11. Feb 2004
97 Beiträge
 
#8

Re: JPEG-Fehler: #41

  Alt 12. Feb 2004, 09:05
habe ich nun gemacht siehe hier:
http://www.delphi-groups.de/YaBBSe/i...threadid=18990
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: JPEG-Fehler: #41

  Alt 13. Feb 2004, 02:55
Zitat von clues1:
Das Problem in JPEGImage liegt daran, das LoadFromStream immer zum ende des Streams springt.
Also auf DIE Idee wär ich jetzt nicht gekommen (keine Ironie!!!). Das ist in der Tat böse. Und das ist NIRGENDWO dokumentiert!? Höftig...

Aber gut, dass ich jetzt weiss wo ich suchen muss, denn ich progge auch recht häufig an Grafiksachen mit jpegs rum

gruss,
dizzy

PS: Dass DragonsLear diesen Thread noch nicht gefunden, und den auf DG geschlossen hat...
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
clues1

Registriert seit: 11. Feb 2004
97 Beiträge
 
#10

Re: JPEG-Fehler: #41

  Alt 13. Feb 2004, 07:37
schön freut mich das das nicht nur mir Hilf, sondern auch andere.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 06:38 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