我正在从磁盘加载图像,并希望将其(部分)复制到第二个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复制部分图像?
编辑
当我将两个语句拆分为两个单独的操作(按钮)时,会发生以下情况:
顺便说一下,我正在使用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;
..
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12186 次 |
最近记录: |