假设有这么一个类:
TTmp=class
private
FBackBmp:TBitmap;
FCurBMP:TBitmap;
xPos:integer;
yPos:integer;
public
procedure SaveToFile(const Filename:string);
procedure LoadFromFile(const FileName:string);
end;现在,FBackBmp已经载入一张图片a,FCurBMP载入一张图片b,xpos=10,yPos=50;
现在调用SaveToFile方法,把这个类保存起来,假设存为 abc.dat 这个文件。下次运行的时候,调用LoadFromFile('abc.dat')方法,那么,FBackBmp的图片应该是a,而FCurBMP的图片是b,xpos=10,yPos=50.
请问大家怎么组织这个abc.dat的结构,如何这样保存呢?
thanks.
TTmp=class
private
FBackBmp:TBitmap;
FCurBMP:TBitmap;
xPos:integer;
yPos:integer;
public
procedure SaveToFile(const Filename:string);
procedure LoadFromFile(const FileName:string);
end;现在,FBackBmp已经载入一张图片a,FCurBMP载入一张图片b,xpos=10,yPos=50;
现在调用SaveToFile方法,把这个类保存起来,假设存为 abc.dat 这个文件。下次运行的时候,调用LoadFromFile('abc.dat')方法,那么,FBackBmp的图片应该是a,而FCurBMP的图片是b,xpos=10,yPos=50.
请问大家怎么组织这个abc.dat的结构,如何这样保存呢?
thanks.
FCurBmp: TBitmp = {用十六进制编码表示图片b的数据}
xPos = 10
yPos = 50十六进制编码: 一个字节使用 2 个 0..F 字母表示.
这样数据肯定不会丢失, 也易于读取.
procedure TTmp.SaveToFile(const Filename:string);
var
fm : TFileStream;
mm1,mm2 : TMemoryStream;
dwSize1,dwSize2, dwOffset : DWORD;
begin
mm1 := TMemoryStream.Create;
FBackBmp.SaveToStream(mm1);
mm2 := TMemoryStream.Create;
FCurBMP.SaveToStream(mm2);
dwSize1 := mm1.size;
dwSize2 := mm2.size;
dwOffset :=0; fm := TFileStream.Create('c:\abc.dat',fmCreate );
//先把两个bmp的大小写入文件流
fm.write( dwSize1,sizeof(DWORD));
fm.write( dwSize2,sizeof(DWORD));
//再写入两个bmp在文件中的偏移地址
fm.write( dwOffset,sizeof(dwoffset));
dwOffset := dwSize1;
fm.write( dwOffset,sizeof(dwoffset));
//再把两个bmp写入文件流
fm.copyfrom(mm1,0);
fm.copyfrom(mm2,0); fm.free;
mm1.free...
end;
procedure TTmp.LoadFromFile(const FileName:string);var
fm : TFileStream;
mm1,mm2 : TMemoryStream;
dwSize1,dwSize2, dwOffset1,dwOffset2 : DWORD;
begin
fm := TFileStream.Create('c:\abc.dat',fmOpenRead);
fm.read(dwSize1,sizeof(DWORD);
fm.read(dwSize2,sizeof(DWORD);
fm.read(dwOffset1,sizeof(DWORD));
fm.read(dwOffset2,sizeof(DWORD)); mm1 := TMemoryStream.Create;
mm1.copyfrom(fm,dwSize1);
FBackBmp.LoadFromStream(mm1); mm2 := TMemoryStream.Create;
mm2.copyfrom(fm,dwSize2);
FCurBMP.LoadFromStream(mm2);
...满意吗?给分吧:-)