AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi jpeg in FileStream speichern

jpeg in FileStream speichern

Ein Thema von Hyperspacer · begonnen am 8. Apr 2009 · letzter Beitrag vom 9. Apr 2009
Antwort Antwort
Hyperspacer

Registriert seit: 23. Apr 2006
53 Beiträge
 
Delphi 7 Personal
 
#1

jpeg in FileStream speichern

  Alt 8. Apr 2009, 17:12
Hallo,
Ich versuche nun schon eine ganze weile ein jpeg in einen filestream zuspeichern. Vorher lade ich das jpeg entweder aus einem bitmap oder aus einem vorhandenen jpeg. leider wird beim speichern gar nichts geschrieben... Und ich weiß nicht warum

Das ist der Code den ich verwende:
Delphi-Quellcode:
var
  Datei : TFileStream;
  jpeg : TJpegImage;
  bmp : TBitmap;
begin
  Datei := TFileStream.Create(Savedialog1.FileName,fmOpenWrite);

  // Bild laden
  jpeg := TJpegImage.Create;
  jpeg.CompressionQuality := 90;

  If ExtractFileExt(mmFiles.Lines[i]) = '.bmp'
    then
      begin
        bmp := TBitmap.Create;
        bmp.LoadFromFile(mmFiles.Lines[i]);

        jpeg.Assign(bmp);

        bmp.Free;
      end
    else jpeg.LoadFromFile(mmFiles.Lines[i]);

  jpeg.Compress;
    
  // in Stream schreiben
  jpeg.SaveToStream(datei);

  jpeg.Free;
Liebe Grüße
Daniel
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: jpeg in FileStream speichern

  Alt 8. Apr 2009, 17:19
Ist die Datei schon vorhanden? Ansonsten müsstest du anstatt fmOpenWrite -->fmCreate verwenden.

Und hat jpeg keine SaveToFile-Methode?
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#3

Re: jpeg in FileStream speichern

  Alt 8. Apr 2009, 19:34
Hallo,
erstens würde ich hier auch fmCreate nehmen, weil die Datei allerwahrscheinlichkeit nach nicht existiert.

Ich würde auch zweitens folgenden Code empfehlen:
Delphi-Quellcode:
var
  Datei : TFileStream;
  jpeg : TJpegImage;
  Bild: TPicture;
begin
  Datei := TFileStream.Create(Savedialog1.FileName,fmCreate);
  // JPEG erzeugen
  jpeg := TJpegImage.Create;
  jpeg.CompressionQuality := 90;

  Bild := TPicture.Create;
  Bild.LoadFromFile(mmFiles.Lines[i]);
  jpeg.Assign(Bild.Graphic);
  jpeg.Compress;
  Bild.Free;

  // in Stream schreiben
  jpeg.SaveToStream(datei);
  jpeg.Free;
  datei.free;
Der Vorteil bei dieser geänderten Version liegt darin, dass TPicture alle verfügbaren Dateiformate lesen kann (auch JPEG, etc.), sobald die Unit für den Graphic-Typ in die Uses-Liste eingetragen wird. (Es geht z.B. auch PNG).
Des weiteren hast du für ein Speicherleck gearbeitet, da du deinen File-Stream nie aus dem Speicher gekehrt hast. Heißt auch, dass die Datei noch offen war.
Falls dich noch ein wenig die Dateisicherheit interessiert, guck doch mal nach folgendem:
Code:
fmShareExclusive   Kein Lese- und Schreibzugriff.
fmShareDenyWrite   Kein Schreibzugriff.
fmShareDenyRead   Kein Lesezugriff. Verwenden Sie diesen Modus nicht in plattformübergreifenden Anwendungen.
fmShareDenyNone   Andere haben uneingeschränkten Zugriff.
Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Hyperspacer

Registriert seit: 23. Apr 2006
53 Beiträge
 
Delphi 7 Personal
 
#4

Re: jpeg in FileStream speichern

  Alt 9. Apr 2009, 13:11
Dankeschön! Das werde ich gleich mal ausprobieren

Allerdings muss ich zu meiner Verteidigung sagen:
Zitat von rollstuhlfahrer:
Des weiteren hast du für ein Speicherleck gearbeitet, da du deinen File-Stream nie aus dem Speicher gekehrt hast. Heißt auch, dass die Datei noch offen war.
dass ich das gemacht habe. Ich habs hier nur nicht mehr mit gepostet. Aber dem aufmerksamen leser fällt das natürlich sofort auf

lg
Daniel
  Mit Zitat antworten Zitat
Hyperspacer

Registriert seit: 23. Apr 2006
53 Beiträge
 
Delphi 7 Personal
 
#5

Re: jpeg in FileStream speichern

  Alt 9. Apr 2009, 13:25
Es passiert immer noch nichts Das jpeg wird nicht in den Stream geschrieben.

hier noch einmal der komplette code, falls irgendwo anders ein doofer fehler ist, der das verursacht.
ich schreibe am anfang einen hashwert eines passworts in die datei. dieser wert wird geschrieben.
Dann möchte ich aus einer liste (mmFiles = Memo) dateien laden und in den stream schreiben. Ich hab im debug überprüft, ob er auch brav alle schritte ausführt. und das tut er. aber trotzdem wird nichts in die datei geschrieben..
Delphi-Quellcode:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtDlgs, ExtCtrls, JPEG, MD5;

procedure TForm2.Button1Click(Sender: TObject);
var
  Datei : TFileStream;

  passwort : String;
  Context : TMD5_CTX;
  Hash : TMD5Digest; // 16 Bytes in einem Array 0-15

  i : Integer;
  jpeg : TJpegImage;
  bild : TPicture;
begin
  // Datei erstellen
  Datei := TFileStream.Create(Savedialog1.FileName,fmCreate);

  // Passwort Hash ermitteln
  passwort := edPasswort.Text;
  MD5Init(Context);
  MD5Update(Context, pChar(passwort), Length(passwort));
  MD5Final(Context, Hash);

  // Passwort schreiben
  Datei.Write(Hash[0],16);

  // Bilder schreiben
  For i := 0 to mmFiles.Lines.Count -1 do
    begin
      if not fileexists(mmFiles.Lines[i])
        then continue;

      // Bild laden
      jpeg := TJpegImage.Create;
      jpeg.CompressionQuality := 90;

      Bild := TPicture.Create;
      Bild.LoadFromFile(mmFiles.Lines[i]);

      jpeg.Assign(Bild.Graphic);
      Bild.Free;

      jpeg.Compress; // Kompriemieren
      
      // in Stream schreiben
      jpeg.SaveToStream(datei);

      jpeg.Free;
    end;

  Datei.Free;
end;
  Mit Zitat antworten Zitat
soulies

Registriert seit: 9. Dez 2005
234 Beiträge
 
#6

Re: jpeg in FileStream speichern

  Alt 9. Apr 2009, 14:09
hoi,

funzt es wenn du statt
Bild.LoadFromFile(mmFiles.Lines[i]); das verwendest
Bild.Bitmap.LoadFromFile(mmFiles.Lines[i]); ?

und beim speichern eben
jpeg.Assign(Bild.Bitmap); cya
  Mit Zitat antworten Zitat
Hyperspacer

Registriert seit: 23. Apr 2006
53 Beiträge
 
Delphi 7 Personal
 
#7

Re: jpeg in FileStream speichern

  Alt 9. Apr 2009, 14:22
aber dann kann ich als quelle doch nur bitmaps verwenden oder nicht? hauptsächlich möchte ich aber jpegs verwenden..
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 02:45 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