请大家帮我看个函数
我改了Graphics单元里的这个函数,让它可以读取经过异或加密过的图片
函数中两行
/////
/////
之间的是我改的,其他都是函数原来的。
计算好之后,我要把一个TMemoryStream对象赋给函数中要使用的TStream对象
结果就在那里除了问题。
请各位大师帮我查错,多谢~~~~procedure TGraphic.LoadFromFile(const Filename: string);
var
  Stream: TStream;
  ms,   msDes:   TMemoryStream;
  byX1,   byX2:   BYTE;
  pbySrcByte:   PByte;
  i:   integer;
begin
  Stream := TFileStream.Create(Filename, fmOpenRead or fmShareDenyWrite);
  /////////////////////////////////////////////
  //读取经异或加密过的图片
  byX1   :=   100;
  ms   :=   TMemoryStream.Create();
  msDes   :=   TMemoryStream.Create();
  //ms.LoadFromFile(Filename);
  ms.LoadFromStream(Stream);
  pbySrcByte   :=   PByte(ms.Memory);
  for   i   :=   0   to   ms.Size   -   1   do
  begin
    byX2   :=   pbySrcByte^   xor   byX1;
    msDes.Write(byX2,   1);
    Inc(pbySrcByte);
  end;
  ms.Free();
  msDes.Seek(0, 0);
  msDes.SaveToStream(Stream);//到这句就出错!!!!!!!!!!!!!!!!!!
  msDes.Free();
  ////////////////////////////////////////////
  try
    LoadFromStream(Stream);
  finally
    Stream.Free;
  end;
end;

解决方案 »

  1.   

    Tstream是抽象类,不能直接使用他创建对象实例
    var 
      Stream: TStream; -》Tfilestream
      

  2.   

    不好意思说错了,Tstream是抽象类,可以使用他创建对象实例 
      

  3.   

    msDes.SaveToStream(Stream);//到这句就出错!!!!!!!!!!!!!!!!!! 
    这里不需要SaveToStream,你这样子保存实际就改写了文件.
    你可以在这个时候直接LoadFromStream(msDes)
      

  4.   

    已经找到问题所在
    Stream := TFileStream.Create(Filename, fmOpenRead or fmShareDenyWrite);
    使得msDes.SaveToStream(Stream);出错
    我改成Stream := TFileStream.Create(Filename, fmOpenReadWrite);即没问题了。
    多谢各位。