You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 13:42:13