我正在从磁盘加载图像并希望将其复制(部分)到第二个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复制部分图像?
修改
当我将两个语句拆分为两个单独的操作(按钮)时,会发生以下情况:
BTW,我正在使用Delphi 2009。
答案 0 :(得分: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;
..