Delphi 阅读画布时,TImage图片会消失吗?
我在表单上有一个简单的TImage控件。我在设计时指定了位图图像。运行时,我使用TImage.Picture.Bitmap.canvas读取画布。一切正常。然后,我在设计时加载一个JPEG图像。然而,现在当我读这幅画布时,画面突然消失了 为什么会发生这种情况?我如何避免Delphi 阅读画布时,TImage图片会消失吗?,delphi,canvas,delphi-xe2,timage,Delphi,Canvas,Delphi Xe2,Timage,我在表单上有一个简单的TImage控件。我在设计时指定了位图图像。运行时,我使用TImage.Picture.Bitmap.canvas读取画布。一切正常。然后,我在设计时加载一个JPEG图像。然而,现在当我读这幅画布时,画面突然消失了 为什么会发生这种情况?我如何避免 procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var Canvas: TCanvas; begin
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
Canvas: TCanvas;
begin
Canvas:= Image1.Picture.Bitmap.Canvas;
//Do something with Canvas, but canvas is empty and image disappeared
end;
这是意料之中的,因为JPG图像根本不是位图BMP图像 您必须将其转换为位图才能使用它:
var
bm: TBitmap;
begin
bm := TBitmap.Create;
try
bm.Assign(Image1.Picture.Graphic);
bm.Canvas.DoSomethingReallyAwesome(ttExtraAwesome);
bm.SaveToFile('C:\Users\Andreas Rejbrand\Desktop\test5.bmp');
finally
bm.Free;
end;
这是意料之中的,因为JPG图像根本不是位图BMP图像 您必须将其转换为位图才能使用它:
var
bm: TBitmap;
begin
bm := TBitmap.Create;
try
bm.Assign(Image1.Picture.Graphic);
bm.Canvas.DoSomethingReallyAwesome(ttExtraAwesome);
bm.SaveToFile('C:\Users\Andreas Rejbrand\Desktop\test5.bmp');
finally
bm.Free;
end;
你试过不同的JPEG吗?也许JPEG有一些缺陷???你试过不同的JPEG吗?也许JPEG有一些缺陷???嗯,我会假设在设计时加载它会将其转换为位图,因为位图是我所知道的唯一访问图片对象中图像的门。是的,我知道如何转换如上所示的格式,我只是觉得奇怪的是,TImage或TPicture没有涵盖这一点。但是我错过了您放置的图形引用。@Jerrydoge:由于TPicture支持多种图像格式,通过其Graphic属性,不需要将设计时加载的图像不必要地转换为位图。这样的转换不仅不需要,而且也不好。假设您在应用程序中包含太阳系中每个行星的1920×1080光栅图像。如果图像是1 JPG或2 BMP,EXE的文件大小是多少?嗯,我假设在设计时加载它会将其转换为位图,因为位图是我所知道的唯一访问图片对象中图像的门。是的,我知道如何转换如上所示的格式,我只是觉得奇怪的是,TImage或TPicture没有涵盖这一点。但是我错过了您放置的图形引用。@Jerrydoge:由于TPicture支持多种图像格式,通过其Graphic属性,不需要将设计时加载的图像不必要地转换为位图。这样的转换不仅不需要,而且也不好。假设您在应用程序中包含太阳系中每个行星的1920×1080光栅图像。如果图像是1 JPG或2 BMP,EXE的文件大小是多少?