alzaimar hat folgendes geschrieben : |
Ach, und den OutputStream sollte man auch noch freigeben... |
jo klar hab ich nicht vergessen ^^ wie gesagt ich arbeite mit outputstream dann noch weiter.
edit: ich hab deinen vorschlag jetzt ausprobiert aber ich bekomme eine exception beim dekomprimieren:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35:
| procedure TForm2.Button1Click(Sender: TObject); var InputStream, OutputStream: TMemoryStream; DeCompressionStream: TZDecompressionStream; CompressionStream: TZCompressionStream; InputFileName, OutputFileName: string; begin Image1.Canvas.Pixels[1,1] := clblack;
InputStream := TMemoryStream.Create; Image1.Picture.Graphic.SaveToStream(inputstream);
OutputStream := TMemoryStream.Create; CompressionStream := TZCompressionStream.Create(OutputStream, zcFastest); CompressionStream.CopyFrom(InputStream, 0); CompressionStream.Free; InputStream.Free;
OutputStream.SaveToFile('.\test.jpg.bzip');
Outputstream.Position := 0; InputStream := TMemoryStream.Create; Inputstream := Outputstream; Outputstream.Free; Outputstream := TMemoryStream.Create; DecompressionStream := TZDecompressionStream.Create(InputStream); OutputStream.CopyFrom(DecompressionStream, 0); Outputstream.SaveToFile('.\test2.jpg'); DecompressionStream.Free; OutputStream.Free; InputStream.Free;
end; |
das ist die gesamte testprozedur. ich kann jede anweisung ausführen aber am ende komm trotzdem eine exception die sagt "ungültige zeigeroperation". und die test2.jpg ist 0kb groß, das bzip archiv ist 4kb groß also das könnte bei ner fast weißen bitmap schon hinkommen.
aber wie dekomprimieren?
edit2: es geht, Inputstream := Outputstream; ist natürlich vollkommener blödsinn
also so geht es jetzt, für alle die es auch brauchen:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35:
| procedure TForm2.Button1Click(Sender: TObject); var InputStream, OutputStream: TMemoryStream; DeCompressionStream: TZDecompressionStream; CompressionStream: TZCompressionStream; InputFileName, OutputFileName: string; begin Image1.Canvas.Pixels[1,1] := clblack;
InputStream := TMemoryStream.Create; Image1.Picture.Graphic.SaveToStream(inputstream);
OutputStream := TMemoryStream.Create; CompressionStream := TZCompressionStream.Create(OutputStream, zcFastest); CompressionStream.CopyFrom(InputStream, 0); CompressionStream.Free; InputStream.Free;
OutputStream.SaveToFile('.\test.jpg.bzip');
Outputstream.Position := 0; InputStream := TMemoryStream.Create; Outputstream.SaveToStream(inputstream); Outputstream.Free; Outputstream := TMemoryStream.Create; DecompressionStream := TZDecompressionStream.Create(InputStream); OutputStream.CopyFrom(DecompressionStream, 0); Outputstream.SaveToFile('.\test2.jpg'); DecompressionStream.Free; OutputStream.Free; InputStream.Free;
end; |