我的TImage组件中存储了一些数据。我想将图像保存为位图。执行此代码时,TImage内容变为白色,并且仅在硬盘上创建了具有0字节的bmp文件。我的代码出了什么问题?
MainStatusbar.SimpleText := 'save the image .... ';
if SaveDialog.Execute then
begin
Image1.picture.Bitmap.SaveToFile(SaveDialog.filename);
end;
MainStatusbar.SimpleText := 'done ';
答案 0 :(得分:3)
TPicture
是多种不同类型图片的容器。如果当前图片不是TBitmap
,则Picture.Bitmap
将不包含您的图片。当您引用Picture.Bitmap
时,您的原始图片将被销毁,并创建一个空的TBitmap
。因此,当Picture.Bitmap
被调用时,SaveToFile()
中的明显解释是空的。
您应该通过调用SaveToFile
对象上的Picture
来保存您的图片:
Image1.Picture.SaveToFile(...);
答案 1 :(得分:2)
如果原始图像不是位图,则调用Picture.Bitmap
将删除内容并创建空位图。根据原始图片格式,可以进行自动转换(例如,从图标),但必须在TImage之外完成。
答案 2 :(得分:2)
如果TImage.Picture.Graphic
属性目前不包含TBitmap
,则访问TImage.Picture.Bitmap
属性将释放当前Graphic
并将其替换为空白TBitmap
。这是记录在案的行为。
由于您要保存位图,请检查当前Graphic
是否已为TBitmap
。如果是这样,请按原样保存。否则,请创建一个临时TBitmap
,为其分配当前Graphic
,然后保存。
MainStatusbar.SimpleText := 'save the image .... ';
if SaveDialog.Execute then
begin
if Image1.Picture.Graphic is TBitmap then
Image1.Picture.Bitmap.SaveToFile(SaveDialog.FileName)
else
begin
Tmp := TBitmap.Create;
try
Tmp.Assign(Image1.Picture.Graphic);
Tmp.SaveToFile(SaveDialog.FileName);
finally
Tmp.Free;
end;
end;
end;
MainStatusbar.SimpleText := 'done ';