procedure 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
    CompressedStream.SaveToStream(SourceStream);//我的理解是:把传近来的内存流的内容的内容保存到压缩流,其实是通过这个压缩流把内存流的内容压缩并且保存在另外一个内存流里去(DestStream)
    SourceStream.Free;//我做过实验,不把这个压缩流释放,DestStream的大小就是0,我的理解是:释放压缩流的同时触发:把压缩过的流保存到另外一个内存流里去
    CompressedStream.Clear;//清空穿进来的内存流,准备把压缩后的内容给它(因为它是个var变量,所以操作的是地址)
   CompressedStream.WriteBuffer(Count,SizeOf(Count));//这句话我就不明白了,我看帮助上说WriteBuffer的第一个变量应该是buffer,说实话,我现在还不太清楚buffer到底是什么,怎么用,但是我想最起码应该是PChar之类的吧,但是奇怪的是,这个例子里的竟然是个整数!还有就是SizeOf(Count)是什么意思,是取count的内存大小吗?例如:1000的sizeof(1000)是什么呢?
    CompressedStream.CopyFrom(DestStream, 0);//给CompressedStream赋值
  finally
    DestStream.Free;//释放
  end;
end;
我提出的问题,希望大家能够解答,最好在qq上给我解答,谢谢了,我的qq 12416204,我真的是想搞清楚问题,至于分数,好说,好说。

解决方案 »

  1.   

    去看《Object Pascal精要》里面把Object Pascal语法的东西写的非常清楚了,应该写明了什么是Buffer,Buffer就是缓冲区!Sizeof自己看帮助是干什么用的,这些东西你还是看书比较好
      

  2.   

    因为count是integer 类型的所以sizeof(count)等于integer占用的空间
    即用writebuffer(1000,sizeof(integer))是一样的
      

  3.   

    CompressedStream.WriteBuffer(Count,SizeOf(Count));//这句话我就不明白了,我看帮助上说WriteBuffer的第一个变量应该是buffer,说实话,我现在还不太清楚buffer到底是什么,怎么用,但是我想最起码应该是PChar之类的吧,但是奇怪的是,这个例子里的竟然是个整数!