Timage变为白色,位图的大小为0字节

时间:2015-05-22 10:47:40

标签: delphi bitmap

我的TImage组件中存储了一些数据。我想将图像保存为位图。执行此代码时,TImage内容变为白色,并且仅在硬盘上创建了具有0字节的bmp文件。我的代码出了什么问题?

  MainStatusbar.SimpleText := 'save the image .... ';
  if SaveDialog.Execute then
  begin
    Image1.picture.Bitmap.SaveToFile(SaveDialog.filename);
  end;
  MainStatusbar.SimpleText := 'done ';

3 个答案:

答案 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 ';