使用重叠控件在PictureBox中保存图像

时间:2013-09-11 11:36:20

标签: c# winforms image picturebox savefiledialog

我正在开发一个应用程序,用户可以在其中选择图片框中的图像。

之后,他可以右键单击图像并添加一个用户控件,该控件将再次显示图像和一些文本。此用户控件可以添加任意次。

用户还可以根据需要重新定位用户控件。

所有这些功能都已实施,并且运行正常。

现在,要求是将图像与用户控件一起保存。

enter image description here

在上方,您可以看到需要保存的完整图像。背面图像是图片框图像和用户控件(带文本的小图像)。

当用户点击“保存”按钮时,图像应作为单个图像保存在他的磁盘上。

这是 C#开发的 Windows应用程序

我想知道是否可以实现此功能。如果是的话,请指导我正确的方向。

2 个答案:

答案 0 :(得分:2)

如果您使用Graphics.DrawImage()创建位图的副本,则可以将这些图像绘制到其上。您需要计算这些控件的位置。

在这里查看DrawImage:http://msdn.microsoft.com/en-us/library/42807xh1.aspx

示例:

Bitmap copy = new Bitmap(OriginalBitmap);

Graphics g = Graphics.FromImage(copy);

g.DrawImage(arrowBitmap, new Point(..));

copy.Save(...);

答案 1 :(得分:2)

Microsoft已经考虑过一个非常简单直接的解决方案,包括以下步骤:

  • 而不是PictureBox使用Panel而不是使用Image的{​​{1}}属性,而不是使用PictureBox的{​​{1}}属性

注意:通过使用BackgroundImage属性,您可以非常轻松地指示Panel 拉伸中心缩放图像(我假设 tile 的默认值在您的情况下不是一个好选项)

  • 而不是将其他用户控件置于更高的Z顺序,而不是将之前的BackgroundImageLayout置于Panel
  • 之内
  • 使用PictureBox方法,如下所示:

    Panel

这将导致您的控件开始与图片一起呈现:

enter image description here

此外,如果你的场景允许,你可以简单地使用Control.DrawToBitmap方法和任何包含你想要呈现的所有actor的控件,例如实际的private void button1_Click(object sender, EventArgs e) { var bmp = new Bitmap(this.panel1.Width, this.panel1.Height); this.panel1.DrawToBitmap(bmp, new Rectangle(Point.Empty, bmp.Size)); bmp.Save(@"D:\test.png", ImageFormat.Png); }