gpt4 book ai didi

delphi - 如何在Delphi中使用CopyRect方法

转载 作者:行者123 更新时间:2023-12-03 15:00:39 30 4
gpt4 key购买 nike

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

Image1.Picture.LoadFromFile(S);
with Image1.Picture.Bitmap do
Image2.Canvas.CopyRect(Image2.Canvas.ClipRect, Canvas, Canvas.ClipRect);

Image2 仅显示一个白色矩形,Image1 不显示磁盘中的文件。如果我删除第二条语句 Image1 确实会显示图像。 (最奇怪的事情:如果我只注释掉 CopyRect 语句并保留“with”行(空语句)Image1 也不会显示!)

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

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

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

顺便说一句,我正在使用 Delphi 2009。

最佳答案

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;
..

关于delphi - 如何在Delphi中使用CopyRect方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8360368/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com