AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Probleme mit Streams
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit Streams

Ein Thema von Legolas · begonnen am 28. Sep 2003 · letzter Beitrag vom 29. Sep 2003
Antwort Antwort
Benutzerbild von Legolas
Legolas

Registriert seit: 28. Sep 2003
Ort: Frankfurt am Main
72 Beiträge
 
Delphi 2005 Personal
 
#1

Probleme mit Streams

  Alt 28. Sep 2003, 12:24
Hallo alle zusammen,

ich nehme heute das erste mal aktiv an eurem Forum teil 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:

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;
Wie Ihr sehen könnt versuche ich einen TBlobStream in einen TMemoryStream zu kopieren. Aber anscheinend funktioniert das nicht so, oder?

Wo habe ich da einen Fehler gemacht und wer kann mir einen entscheidenden Tip geben.

Gruß Legolas
Grüße Legolas

Wissen ist Macht.
Wir wissen nichts, macht nichts.
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#2

Re: Probleme mit Streams

  Alt 28. Sep 2003, 12:26
Füge mal direkt vor der Problemzeile folgende Zeile ein.
ms.Position := 0; ......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#3

Re: Probleme mit Streams

  Alt 28. Sep 2003, 12:55
Hallo und herzlich Willkommen in der DP!
Zitat von Legolas:
Delphi-Quellcode:
    ms.
  finally
WAs fehlt denn da noch hinter dem ms.?
  Mit Zitat antworten Zitat
Benutzerbild von Legolas
Legolas

Registriert seit: 28. Sep 2003
Ort: Frankfurt am Main
72 Beiträge
 
Delphi 2005 Personal
 
#4

Re: Probleme mit Streams

  Alt 28. Sep 2003, 23:32
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
Grüße Legolas

Wissen ist Macht.
Wir wissen nichts, macht nichts.
  Mit Zitat antworten Zitat
Benutzerbild von Legolas
Legolas

Registriert seit: 28. Sep 2003
Ort: Frankfurt am Main
72 Beiträge
 
Delphi 2005 Personal
 
#5

Re: Probleme mit Streams

  Alt 28. Sep 2003, 23:54
Hallo sakura,

prima 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
Grüße Legolas

Wissen ist Macht.
Wir wissen nichts, macht nichts.
  Mit Zitat antworten Zitat
Benutzerbild von Legolas
Legolas

Registriert seit: 28. Sep 2003
Ort: Frankfurt am Main
72 Beiträge
 
Delphi 2005 Personal
 
#6

Re: Probleme mit Streams

  Alt 29. Sep 2003, 00:25
Soooooooooooooo,

an alle die Interesse daran haben, diese Procedure ist jetzt voll funktionstüchtig und tut das was sie soll:

Delphi-Quellcode:
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;
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.

Wer Verbesserungvorschläge in Bezug auf Geschwindigkeit und Optimierung (oder sonstige Ideen) hat kann sie hier gerne Vorstellen.

Grüße Legolas
Grüße Legolas

Wissen ist Macht.
Wir wissen nichts, macht nichts.
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:30 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