![]() |
Probleme mit Streams
Hallo alle zusammen,
ich nehme heute das erste mal aktiv an eurem Forum teil :-D und hoffe die richtige Sparte erwischt zu haben. Da es um JPEG-Dateien geht, denke ich das schon. Nun zu meinem Problem: Ich habe ein JPEG-Bild das ich mit einer Routine in der Größe verkleinern und komprimieren möchte. Dafür habe ich mich einiger Beiträge aus diesem Forum bedient. Folgenden Code habe ich erstellt:
Delphi-Quellcode:
Wie Ihr sehen könnt versuche ich einen TBlobStream in einen TMemoryStream zu kopieren. Aber anscheinend funktioniert das nicht so, oder?procedure StoreJPEGImage(Table: TTable; Field: STRING); var s : TBlobStream; fs: TFileStream; ms: TMemoryStream; bmp : TBitmap; jpeg: TJPEGImage; begin bmp := tbitmap.create; jpeg := tjpegimage.create; fs := TFileStream.Create(Haupt.CoverDialog.FileName, fmOpenRead); s := TBlobStream.create(Table.FieldByName(Field) AS TBlobField, bmWrite); ms:=TMemoryStream.Create; try jpeg.LoadFromStream(fs); bmp.assign(jpeg); If jpeg.width>jpeg.Height then begin bmp.width:=400; bmp.height:=250; end else begin bmp.width:=250; bmp.Height:=400; end; jpeg.compressionquality := 50; jpeg.assign(bmp); jpeg.SaveToStream(ms); ms. finally bmp.free; jpeg.free end; [color=#ff0024]s.CopyFrom(ms, ms.Size);[/color] <-- HIER ENTSTEHT EINE EXCEPTION DER KLASSE EReadError AUF. fs.free; MELDUNG: Stream-Lesefehler !!! s.Free; end; Wo habe ich da einen Fehler gemacht und wer kann mir einen entscheidenden Tip geben. Gruß Legolas |
Re: Probleme mit Streams
Füge mal direkt vor der Problemzeile folgende Zeile ein.
Delphi-Quellcode:
...:cat:...
ms.Position := 0;
|
Re: Probleme mit Streams
Hallo und herzlich Willkommen in der DP!
Zitat:
|
Re: Probleme mit Streams
Hallo,
@Daniel B: Das ms. habe ich nur zum testen ausprobiert. Hatte ich dann vergessen zu löschen. Hat also keinerlei Bedeutung. @sakura: Ich probiere deinen Vorschlag mal aus. Vielleicht hilft es was. Grüße Legolas |
Re: Probleme mit Streams
Hallo sakura,
prima :-D dein Tip hat mir geholfen. Allerdings muß ich gestehen das die Routine noch nicht so ganz ausgereift ist. Sie macht zwar was sie soll (JPEG komprimieren und in der Größe verkleinern) aber sie verkleinert das Bild nicht wirklich sondern zeigt (kopiert?) mir nur einen Bildausschnitt in der Größe die ich angegeben habe (400x250) ausgehend von der oberen rechten Bildecke. Das ist natürlich nicht der Sinn und Zweck dieser Routine. Ich wollte schon das ganze Bild haben. Naja, werde nochmal ein bisschen weitertüfteln. Ich melde mich nochmal wenn ich es gelöst habe. Sollte jemand Interesse an der Routine haben kann ich sie ja nachmal posten (wenn Sie fertig ist). Grüße Legolas |
Re: Probleme mit Streams
Soooooooooooooo, :-D
an alle die Interesse daran haben, diese Procedure ist jetzt voll funktionstüchtig und tut das was sie soll:
Delphi-Quellcode:
Da ich sie speziell an meine Bedürfnisse angepasst und in einer seperaten Unit ausgelagert habe muß sie natürlich noch an gewissen Punkten angepasst werden.
procedure StoreJPEGImage(Table: TTable; Field: STRING);
var s : TBlobStream; fs: TFileStream; ms: TMemoryStream; bmp : TBitmap; jpeg: TJPEGImage; begin bmp := tbitmap.create; jpeg := tjpegimage.create; fs := TFileStream.Create(Haupt.CoverDialog.FileName, fmOpenRead); s := TBlobStream.create(Table.FieldByName(Field) AS TBlobField, bmWrite); ms:=TMemoryStream.Create; try jpeg.LoadFromStream(fs); bmp.assign(jpeg); If jpeg.width>jpeg.Height then begin bmp.width:=400; bmp.height:=250; end else begin bmp.width:=250; bmp.Height:=400; end; bmp.canvas.StretchDraw(Rect(0,0,bmp.width,bmp.height),jpeg); jpeg.compressionquality := 50; jpeg.assign(bmp); jpeg.SaveToStream(ms); finally bmp.free; jpeg.free end; ms.Position:=0; s.CopyFrom(ms, ms.Size); fs.free; s.Free; end; Wer Verbesserungvorschläge in Bezug auf Geschwindigkeit und Optimierung (oder sonstige Ideen) hat kann sie hier gerne Vorstellen. Grüße Legolas |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:24 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