读书人

TPicture如何转换成TBitmap

发布时间: 2012-02-05 12:07:14 作者: rapoo

TPicture怎么转换成TBitmap
bmp := TBitmap.Create;
bmp.Assign(image1.Picture);////这句出错了,cannot assign TPicture to TBitmap
这该怎么解决呢?

我想做的是:从Clipboard中读出图片.如果直接用bmp.Assign(Clipboard);也是同样的错误.

[解决办法]
bmp.Assign(image1.Picture.Bitmap);
[解决办法]
这样不行.得到的是空的

===
你从哪看出是空的的?
你save一下看对不对
[解决办法]
空的?你确定你的image中有图片?


var
bmp:TBitmap;
begin
bmp:= TBitmap.Create;
bmp.Assign( Image1.Picture.Bitmap );
bmp.SaveToFile( 'c:\1.bmp ' );
bmp.Free;
end;
[解决办法]
如果你看过TPicture控件的源码,你就会知道了,TPicture获取图片有两个方式,一种是获取JPEG,它会存放在TJPEGImage中,一种是获取Bitmap,它会存放在TBitmap中.

如果你Load的图片格式是JPEG,那么TBitmap的实例就会为空,相反,如果Load的图片格式是Bitmap,TJPEGImage的实例也会为空.

下面的代码可以确保无论Load的图片格式是JPEG还是Bitmap,都会LoadTBitmap的实例里,这样的话,当你再次调用Image1.Picture.Bitmap.SaveToFile时就不会出错(Image1是TPicture的实例),而且保存图片格式是Bitmap.


procedure TImageEditorForm.OpenImage(FileName: string);
var
 NewBmp: TBitmap;
 NewJpeg: TJPEGImage;
begin
 NewBmp := TBitmap.Create;
 NewJpeg := TJPEGImage.Create;
 try
 if ExtractFileExt(FileName) = '.bmp ' then
 begin
  NewBmp.LoadFromFile(FileName);
  Image1.Picture.Bitmap.Assign(NewBmp);
  end
  else begin
   NewJpeg.LoadFromFile(FileName);
   Image1.Picture.Bitmap.Assign(NewJpeg);
  end;
 finally
  NewBmp.Free;
  NewJpeg.Free;
 end;
end;


读书人网 >.NET

热点推荐