Delphi5中如何将TImage上绘制的文本复制到另一个TImage?
Delphi 5中TImage绘制内容复制失败的解决方法
问题根源
你用DrawTextW直接绘制到myimage的Canvas上,但TImage的Picture属性对应的是它存储的位图对象,Canvas上的临时绘制内容不会自动同步到Picture里——这就是你三种方法都失效的核心原因。
解决方法
方法1:先将Canvas内容同步到Picture再赋值
在完成DrawTextW绘制后,先把Canvas的内容保存到myimage的Picture位图中,再赋值给myimage2:
var TempBmp: TBitmap; begin // 此处已完成myimage的DrawTextW绘制操作 TempBmp := TBitmap.Create; try TempBmp.Width := myimage.Width; TempBmp.Height := myimage.Height; // 复制myimage Canvas内容到临时位图 TempBmp.Canvas.CopyRect( Rect(0, 0, TempBmp.Width, TempBmp.Height), myimage.Canvas, Rect(0, 0, myimage.Width, myimage.Height) ); // 将临时位图同步到myimage的Picture myimage.Picture.Assign(TempBmp); // 现在可以正常复制到myimage2 myimage2.Picture.Assign(myimage.Picture); finally TempBmp.Free; end; end;
方法2:直接复制Canvas到目标TImage的Canvas
跳过Picture,直接将源Canvas的内容复制到myimage2的Canvas,若需要持久化再同步到Picture:
begin // 先确保目标TImage尺寸和源一致 myimage2.Width := myimage.Width; myimage2.Height := myimage.Height; // 直接复制Canvas内容 myimage2.Canvas.CopyRect( Rect(0, 0, myimage2.Width, myimage2.Height), myimage.Canvas, Rect(0, 0, myimage.Width, myimage.Height) ); // 可选:将Canvas内容同步到myimage2的Picture,方便后续保存或复用 myimage2.Picture.Bitmap.Assign(myimage2.Canvas); end;
额外检查点
- 确认
DrawTextW的绘制目标确实是myimage.Canvas,而非Form或其他控件的Canvas; - 若使用
CopyRect时仍失败,检查两个TImage的尺寸是否匹配,复制的矩形区域是否正确。
内容的提问来源于stack exchange,提问作者Dennis van Vugt
相关产品推荐
相关产品推荐

