在delphi中将ImageEnView和标签另存为Png

在delphi中将ImageEnView和标签另存为Png,delphi,save-image,Delphi,Save Image,我在表格上放置了一个TImageEnView,并在TImageEnView上放置了一个标签。 我想在我的硬盘上将此父项和子项保存为一个Png或Jpg 我写这段代码: CharLbl.Font.Size := I; CharLbl.Top:=22; ImageEnIO1.SaveToFile('D:\output2.png'); // Save in thread 2 ImageEnIO1.WaitThreads(false); ShowMessage(i

我在表格上放置了一个
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));
但输出仅为带外标签的背景。如何保存标签?

请尝试以下操作:

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;
只是要小心,为了给你你想要的标签的大小是一样的图像和顶部和左侧是相同的图像的

注意:我仍然建议您查看我在评论中给您提供的链接,因为它将帮助您学习一个有价值的工具,甚至可以让您在将来编写自己的组件


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

可能只有我一个人,但我认为您正在尝试保存一个组件“timageenview”,并期望它会自动保存标签(另一个组件),而不需要任何特殊实现。如果您想在图像上写入内容,请查看此图。您需要先将图像保存到中间BMP,然后将标签绘制到BMP上,然后将BMP以所需格式(PNG、JPG等)保存到磁盘。您仍然需要将位图转换为PNG或JPGformat@kobik大厅的东西并不完美。我只是照雷米说的做了,不过我测试了一下,它给出了一个很好的png图像。但是我仍然坚持我的笔记。“它提供了一个好的png图像”-将
TBitmap
保存为
D:\output2.png
不会使输出文件成为有效的png。这仍然是一幅位图。@kobik我百分之百支持你。这就是我写“好”的原因。它不是png。正如我所说,我只是按照雷米所说的和OP在他的问题中所写的去做。@kobik我在我的回答中加了一条关于这一点的注释。