// 以无符号的字符数组保存
procedure TForm1.Button1Click(Sender: TObject);
var
ms: TMemoryStream;
bitarray: PChar;
bitsize: integer;
begin
// 取图像数据,数据在bitarray中, bitsize为数据长度
ms := TMemoryStream.Create;
try
// 导入TMemorystream;
Image1.Picture.Bitmap.SaveToStream(ms);
// 取图像数据
bitsize := ms.Size;
GetMem(bitarray, bitsize);
CopyMemory(bitarray, ms.Memory, bitsize);
finally
ms.Free;
end;
Image1.Canvas.FillRect(Rect(0,0,Image1.Width, Image1.Height));
ShowMessage('图像已保存,按确定按钮恢复');
// 恢复图像数据
ms := TMemoryStream.Create;
try
ms.SetSize(bitsize);
CopyMemory(ms.Memory, bitarray, bitsize);
// 从TMemorystream恢复
Image1.Picture.Bitmap.LoadFromStream(ms);
finally
ms.Free;
end;
FreeMem(bitarray);
ShowMessage('图像恢复');
end;
// 以流方式保存
procedure TForm1.BitBtn1Click(Sender: TObject);
var
ms: TMemoryStream;
begin
// 取图像数据,数据在ms中
ms := TMemoryStream.Create;
try
// 导入TMemorystream;
Image1.Picture.Bitmap.SaveToStream(ms);
Image1.Canvas.FillRect(Rect(0,0,Image1.Width, Image1.Height));
ShowMessage('图像已保存,按确定按钮恢复');
// 从TMemorystream恢复
ms.Position := 0;
Image1.Picture.Bitmap.LoadFromStream(ms);
ShowMessage('图像恢复');
finally
ms.Free;
end;
end;
从上面看,以TMemoryStream保存图像更好一些。
符合VCL风格,编程简单,速度快。