AGB  ·  Datenschutz  ·  Impressum  







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

Bitmap mit Zlib speichern und laden

Ein Thema von heiopei · begonnen am 21. Jun 2006 · letzter Beitrag vom 23. Jun 2006
Antwort Antwort
Benutzerbild von H4ndy
H4ndy

Registriert seit: 28. Jun 2003
Ort: Chemnitz
515 Beiträge
 
Delphi XE3 Professional
 
#1

Re: Bitmap mit Zlib speichern und laden

  Alt 23. Jun 2006, 07:34
Sorry, dass ich mich erst so spät zurück melde

Beim ersten Post ist mir leider ein Flüchtigkeitsfehler unterlaufen.
Wie du schon bemerkt hast, musst du MemoryStream.CopyFrom(Entzipper, Groeße); nehmen.

Soweit ich das beurteilen kann müsste es theoretisch gehen.
Der Umweg über einen temporären Stream (MemoryStream) musst leider bei Verwendung
einen ZStreams gehen, da du eben nur immer kleine Stückchen aus dem gesammten liest.

Ich versuche nachher nochmal dein Problem bei mir im Delphi zu lösen,
wenn ich das weiterhin aus dem Kopf heraus versuche, könnte es kompliziert werden


[EDIT]

OK, das hat mich jetzt nicht losgelassen ^^

Ich hatte jetzt leider nur die Borland zLib, du musst also ab und zu die Parameter etwas angleichen.
Folgender Code funktioniert bei mir.

Delphi-Quellcode:
var MemStream: TMemoryStream; // oder FileStream, etc - zum Speichern & Lesen
    tmpMemStream: TMemoryStream; // zum arbeiten
    comStream: TCompressionStream;
    decomStream: TDecompressionStream;
    bmp: TBitmap; // Test-Bitmap
    Groesse: integer;
begin
  MemStream := TMemoryStream.Create;
  try
    bmp := TBitmap.Create;
    try
      bmp.Width := 250;
      bmp.Height := 250;
      
      // packen
      tmpMemStream := TMemoryStream.Create;
      try
        bmp.SaveToStream(tmpMemStream);
        Groesse := tmpMemStream.Size;
        comStream := TCompressionStream.Create(clDefault, MemStream);
        try
          comStream.Write(Groesse,sizeof(Groesse)); // Größe speichern
          comStream.CopyFrom(tmpMemStream,0); // Bitmap speichern
        finally
          comStream.Free; // Unbedingt nötig, bevor man weiterarbeitet! (Damit der Puffer des Streams 100%ig gespeichert)
        end;
      finally
        tmpMemStream.Free;
      end;
    finally
      bmp.Free;
    end;

    bmp := TBitmap.Create;
    try
      // entpacken
      MemStream.Position := 0;

      tmpMemStream := TMemoryStream.Create;
      try
        decomStream := TDecompressionStream.Create(MemStream);
        try
          decomStream.Read(Groesse,sizeof(Groesse)); // Größe lesen
          tmpMemStream.CopyFrom(decomStream,Groesse); // Bitmap entpacken
          tmpMemStream.Position := 0;
          bmp.LoadFromStream(tmpMemStream); // Bitmap laden
        finally
          decomStream.Free;
        end;
      finally
        tmpMemStream.Free;
      end;
    finally
      bmp.Free;
    end;
  finally
    MemStream.Free;
  end;
Manuel
  Mit Zitat antworten Zitat
Antwort Antwort

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 22:46 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