如何在Delphi中使用CopyRect方法

ste*_*nvh 6 delphi

我正在从磁盘加载图像,并希望将其(部分)复制到第二个TImage:

Image1.Picture.LoadFromFile(S);
with Image1.Picture.Bitmap do
  Image2.Canvas.CopyRect(Image2.Canvas.ClipRect, Canvas, Canvas.ClipRect);
Run Code Online (Sandbox Code Playgroud)

Image2只显示一个白色矩形,Image1不显示磁盘上的文件.如果我删除第二个语句Image1确实显示图像.(奇怪的事情:如果我只注释掉CopyRect语句,并留下了"与"行(空语句)此搜索不显示任何!)

如何使用CopyRect复制部分图像?

编辑
当我将两个语句拆分为两个单独的操作(按钮)时,会发生以下情况:

  1. 图像加载并显示在Image1中
  2. Image1消失(!),Image2显示白色矩形.

顺便说一下,我正在使用Delphi 2009.

Ser*_*yuz 6

TCanvas.CopyRect使用复制矩形StretchBlt.StretchBlt需要一个位图.如果您正在为图像加载任何其他图形类型,则它Picture.Bitmap是空的.实际上,只有在您引用位图时才会创建位图:with Image1.Picture.Bitmap do.

您可以使用临时位图来查找原因:

var
  Bmp: TBitmap;
begin
  Image1.Picture.LoadFromFile(S);

  Bmp := TBitmap.Create;
  try
    Bmp.Assign(Image1.Picture.Graphic);

    with Bmp do
      Image2.Canvas.CopyRect(Image2.Canvas.ClipRect, Canvas, Canvas.ClipRect);
  finally
    Bmp.Free;
  ..
Run Code Online (Sandbox Code Playgroud)