AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Bitmap mit Zlib speichern und laden
Thema durchsuchen
Ansicht
Themen-Optionen

Bitmap mit Zlib speichern und laden

Ein Thema von heiopei · begonnen am 21. Jun 2006 · letzter Beitrag vom 23. Jun 2006
 
heiopei
(Gast)

n/a Beiträge
 
#1

Bitmap mit Zlib speichern und laden

  Alt 21. Jun 2006, 10:37
hallo,
ich möchte in einen Filestream meine Daten schreiben, darunter wie der Titel schon sagt auch Bilder.
Um die Größe der Datei zu verringern verwende ich die ZLibEx-Unit (Zlib 1.2.3). Wenn ich meine Daten ohne Bilder speichere und dann lade, funktioniert das ganze.

Wenn ich jetzt aber auch Bilder speichere, dann kommt beim Laden immer eine AV! Ich hab hier im Forum nur den Hinweis gelesen, dass angeblich LoadFromStream bis zum Ende des Streams ließt. Wenn dem so wäre, ist natürlich klar worans liegt ...

hier mal mein Code:

Delphi-Quellcode:
procedure Speichere(const DateiName: string);
var
  Datei: TFileStream;
  Zipper: TZCompressionStream;
  Grafik: TGraphic;
begin
  //... Fehlerüberprüfungen
  try
    //Datei erzeugen, bzw. leeren
    Datei := TFileStream.Create(Dateiname, fmCreate, fmShareExclusive)
    //Zipper erzeugen und mit "Datei" verknüpfen
    Zipper := TZCompressionStream.Create(Datei, zcMax);
    try
      //... Infos und Anzahl der gespeicherten Bilder schreiben
      for b := 1 to AnzahlBilder do
      try
        Grafik := TBitmap.Create;
        with Grafik as TBitmap do
        begin
          LoadFromFile(GrafikPfad[b - 1]);
          SaveToStream(Zipper);
        end;
      finally
        FreeAndNil(Grafik);
      end;
    except
      //... Fehlerbehandlung
    end;
  finally
    //Zipper wieder freigeben
    FreeAndNil(Zipper);
    //Datei wieder freigeben
    FreeAndNil(Datei);
  end;
end;

procedure Lade(const DateiName: string);
var
  Datei: TFileStream;
  EntZipper: TZDecompressionStream;
begin
  try
    //Datei zum Lesen öffnen
    Datei := TFileStream.Create(Dateiname, fmOpenRead, fmShareExclusive)
    //EntZipper erzeugen und mit "Datei" verknüpfen
    EntZipper := TZDecompressionStream.Create(Datei);
    try
      //... Infos und Anzahl der gespeicherten Bilder auslesen
      for b := 1 to AnzahlBilder do
      begin
        Grafiken[b - 1] := TBitmap.Create;
        with (Grafiken[b - 1] as TBitmap) do
          LoadFromStream(EntZipper); //<--- HIER DER FEHLER!!!
      end;
    except
      //... Fehlerbehandlung
    end;
  finally
    //EntZipper wieder freigeben
    FreeAndNil(EntZipper);
    //Datei wieder freigeben
    FreeAndNil(Datei);
  end;
end;

end.
ps: ich hab den code auf das Wesentliche reduziert, das sollte auch die case-schleife und die
Verwendung von TGraphic statt TBitmap erklären...
pps: die anderen Werte schreibe ich mit Zipper.Read(Variable, SizeOf(Variable)) und lese sie so auch
wieder
  Mit Zitat antworten Zitat
 


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:43 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-2025 by Thomas Breitkreuz