在delphi中将ImageEnView及其上的标签保存为Png

Posted

技术标签:

【中文标题】在delphi中将ImageEnView及其上的标签保存为Png【英文标题】:Save ImageEnView and a Label on it as Png in delphi 【发布时间】:2017-09-30 00:52:17 【问题描述】:

我在表单上添加了TImageEnView,并在TImageEnView 上添加了标签。 我想在我的硬盘上将这对父母和孩子保存为一个 Png 或 Jpg。

我写了这段代码:

    CharLbl.Font.Size := I;
    CharLbl.Top:=22;
    ImageEnIO1.SaveToFile('D:\output2.png'); // Save in thread 2
    ImageEnIO1.WaitThreads(false);
    ShowMessage(inttoStr(I));

但输出只是没有标签的背景。我怎样才能保存标签?

【问题讨论】:

可能只有我一个人,但我认为您正在尝试保存一个组件“timageenview”,并期望它会自动保存标签(另一个组件)而无需任何特殊实现。如果你想在图片上写点什么,请看这个link 您需要先将图像保存为中间BMP,然后将标签绘制到BMP上,然后以所需格式(PNG、JPG等)将BMP保存到磁盘 【参考方案1】:

尝试以下方法:

var
paintbmp:tbitmap;

begin
paintbmp:=tbitmap.Create;
  try
  paintbmp.Width:=ImageEnIO1.Width;
  paintbmp.Height:=ImageEnIO1.Height;

  paintbmp.Canvas.Draw(0,0,ImageEnIO1.Picture.Graphic);
  paintbmp.Canvas.CopyRect(rect(0,0,ImageEnIO1.Width,ImageEnIO1.Height)
                          ,CharLbl.Canvas
                          ,rect(0,0,ImageEnIO1.Width,ImageEnIO1.Height));

  paintbmp.SaveToFile('D:\output2.png');
  finally
  paintbmp.Free;
  end;
end;

请小心,以便为您提供您想要的标签大小与图像相同,并且顶部和左侧与图像相同。

注意:我仍然建议你查看我在 cmets 中给你的链接,因为它会帮助你学习一个有价值的工具,甚至可以让你在未来编写自己的组件.

注意 2: 输出图像不是有效的 PNG,它仍然是位图,因此您仍需要对其进行转换。(感谢 Kobik)

【讨论】:

位图还是需要转换成png或者jpg格式的 @kobik 大厅的东西并不完美。我只是按照雷米所说的话,但是我对此进行了测试,它给出了一个很好的 png 图像。不过,我仍然坚持我的笔记。 “它提供了一个很好的 png 图像” - 将 TBitmap 保存为 D:\output2.png 不会使输出文件成为有效的 PNG。它仍然是一个位图。 @kobik 我百分百支持你。这就是我写“好”的原因。它不是一个png。正如我所说,我只是按照雷米所说的和 OP 在他的问题中写的内容。 @kobik 我在回答中添加了一条注释。

以上是关于在delphi中将ImageEnView及其上的标签保存为Png的主要内容,如果未能解决你的问题,请参考以下文章

在 Delphi 2009 中将字符串转换为 PAnsiChar

在 Delphi 2009 中将字符串转换为 PAnsiChar

如何在 Delphi 2010 中将参数传递给 flash 电影?

在 Delphi 2007 中将具有透明度的位图保存为 PNG

如何在 Delphi 中将单个枚举值标记为已弃用

如何在 Delphi 中将浮点值显示为科学参数