Einzelnen Beitrag anzeigen

heiopei
(Gast)

n/a Beiträge
 
#5

Re: Bitmap mit Zlib speichern und laden

  Alt 21. Jun 2006, 14:31
hallo,
funktioniert doch nicht wie ichs mir gedacht hab.

mir ist ein Fehler im Code von H4ndy aufgefallen:
Delphi-Quellcode:
  begin
    Entzipper.Read(Groese, sizeof(Groese));
    MemStream := TMemoryStream.Create;
    [color=#ff001f]MemStream.LoadFromStream(EntZipper, Groese);[/color]

    MemStream.Position := 0;
    Bitmap.LoadFromStream(MemStream);
es gibt kein LoadFromStream, bei dem ein weiterer Größenparameter angegeben werden kann


ich hab das Bild in einen MemoryStream geladen, dann die Größe des Streams mit MemStream.Size ermittelt und in den Zipper geschrieben und danach mit MemStream.SaveToStream(Zipper) das "Bild" gespeichert.

Delphi-Quellcode:
  ...
  MemStream := TMemoryStream.Create;
  ...
  Bild.SaveToStream(MemStream);
  TempI64 := MemStream.Size;
  Zipper.Write(TempI64, SizeOf(TempI64);
  MemStream.SaveToStream(Zipper);
  ...
  FreeAndNil(MemStream);
Das funktioniert auch, nur ob es wirklich richtig ist, bezweifle ich da ich beim Auslesen die Fehlermeldung "invalid Bitmap..." erhalte.

Beim Lesen ermittle ich erstmal die Größe des MemStreams. Dann Lade ich den Stream. Allerdings weis ich nicht, welche die richtigere Methode zum Laden wäre:

Delphi-Quellcode:
  ...
  MemStream := TMemoryStream.Create;
  ...
  EntZipper.Read(TempI64, SizeOf(TempI64));
  //welche Methode ist die richtige?
  MemStream.LoadFromStream(EntZipper); // Dann bräuchte ich aber die Größenangabe nicht, oder muss
                                       // ich erst mit SetSize die Größe bestimmen???
  MemStream.CopyFrom(EntZipper, TempI64);
  ...
  Bild.LoadFromStream(MemStream);
  ...
  FreeAndNil(MemStream);
geht es nicht doch irgendwie das ganze auch ohne den umständlichen MemoryStream-Weg zu lösen. Bei einem TFileStream funktioniert das ganze - erst bei der Verwendung von der ZLibEx / Zlib tritt der Fehler auf!!

danke für hilfe,
heiopei
  Mit Zitat antworten Zitat