压缩的BMP图像流可以写入Buffer吗?(50分)

  • 主题发起人 主题发起人 zljzyj
  • 开始时间 开始时间
Z

zljzyj

Unregistered / Unconfirmed
GUEST, unregistred user!
我把一个BMP图像压缩,
但是当
BmpStream.ReadBuffer(Buf,SendSize);
时,出错,提示为Stream read error 其中SendSize为2048

对压缩以后的流文件也没有问题,因为我把它在写内buffer之前存入了一个临时文件,对此完全可以恢复,但不知为何写入BUffer却出错了。
对图像的压缩代码为

procedure Tform1.CompressBitmap(var CompressedStream: TMemoryStream;const CompressionLevel: TCompressionLevel);
var
SourceStream: TCompressionStream;
DestStream: TMemoryStream;
Count: Integer;
Begin
//获得图像流的原始尺寸
Count := CompressedStream.Size;
DestStream := TMemoryStream.Create;
SourceStream:=TCompressionStream.Create(CompressionLevel, DestStream);
Try
//SourceStream中保存着原始的图像流
CompressedStream.SaveToStream(SourceStream);
//将原始图像流进行压缩, DestStream中保存着压缩后的图像流
SourceStream.Free;
compressedStream.Clear;
//写入原始图像的尺寸
CompressedStream.WriteBuffer(Count, SizeOf(Count));
//写入经过压缩的图像流
CompressedStream.CopyFrom(DestStream, 0);
finally
DestStream.Free;
end;
end;

 
我也遇见过类似的问题.
你要注意,从流里读或写时流的指针是否在正确的位置上,试试放在开始,不行就放在末尾,我忘了
具体应该放在什么地方了,反正不是开始就是结尾.
 
同意nani。
加POSTION:=0即OK。
 
POSTION:=0即OK。
 
用zlib没问题。
 
建议用LAH
原因: ZLIB 压缩速度和压缩绿都比不上它.
 
LAH哪有弄的?
 
写错了,是LHARC
应该是LZRW1/KH的改进版本
个人使用经验如下:
ZLIB压缩比较慢
LZRW1/KH好一点.但是在有些情况下,比如说你把一个或多个流压缩后添加到一个EXE中,
而那个EXE已经用ASPACK/UPX之类压缩过的话,会出错.
LHA 也有很多版本,有些是有问题的.
左兄,我已发了一个完好版本的.
 
谢了,我已收到:-)
 
to jingtao,左倾侯:
能给我发一份吗?谢谢.
 
发给我一份吧
panying@sina.com
 
多人接受答案了。
 
后退
顶部