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;