Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 阅读画布时,TImage图片会消失吗?_Delphi_Canvas_Delphi Xe2_Timage - Fatal编程技术网

Delphi 阅读画布时,TImage图片会消失吗?

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

我在表单上有一个简单的TImage控件。我在设计时指定了位图图像。运行时,我使用TImage.Picture.Bitmap.canvas读取画布。一切正常。然后,我在设计时加载一个JPEG图像。然而,现在当我读这幅画布时,画面突然消失了

为什么会发生这种情况?我如何避免

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的文件大小是多少?