请大家帮我看个函数
我改了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;
我改了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;
var
Stream: TStream; -》Tfilestream
这里不需要SaveToStream,你这样子保存实际就改写了文件.
你可以在这个时候直接LoadFromStream(msDes)
Stream := TFileStream.Create(Filename, fmOpenRead or fmShareDenyWrite);
使得msDes.SaveToStream(Stream);出错
我改成Stream := TFileStream.Create(Filename, fmOpenReadWrite);即没问题了。
多谢各位。