C# 使用重叠控件在PictureBox中保存图像
我正在开发一个应用程序,用户可以在其中选择图片框中的图像 之后,他可以右键单击图像并添加一个用户控件,该控件将再次显示图像和一些文本。此用户控件可以添加任意次数 用户还可以根据需要重新定位用户控件 所有这些功能都已经实现,并且运行良好 现在,要求将图像与用户控件一起保存。 上面您可以看到需要保存的完整图像。背面图像是图片框图像和用户控件(带文本的小图像) 当用户单击保存按钮时,图像应作为单个图像保存在其磁盘上 这是在C#中开发的windows应用程序。C# 使用重叠控件在PictureBox中保存图像,c#,winforms,image,picturebox,savefiledialog,C#,Winforms,Image,Picturebox,Savefiledialog,我正在开发一个应用程序,用户可以在其中选择图片框中的图像 之后,他可以右键单击图像并添加一个用户控件,该控件将再次显示图像和一些文本。此用户控件可以添加任意次数 用户还可以根据需要重新定位用户控件 所有这些功能都已经实现,并且运行良好 现在,要求将图像与用户控件一起保存。 上面您可以看到需要保存的完整图像。背面图像是图片框图像和用户控件(带文本的小图像) 当用户单击保存按钮时,图像应作为单个图像保存在其磁盘上 这是在C#中开发的windows应用程序。 我想知道这个功能能否实现。如果是,请引导
我想知道这个功能能否实现。如果是,请引导我正确的方向。如果您创建位图的副本,然后使用Graphics.DrawImage()可以将这些图像绘制到位图上。您需要计算这些控件的位置 请在此处查看DrawImage: 例如:
Bitmap copy = new Bitmap(OriginalBitmap);
Graphics g = Graphics.FromImage(copy);
g.DrawImage(arrowBitmap, new Point(..));
copy.Save(...);
微软已经想到了一个非常简单直接的解决方案,包括以下步骤:
- 使用
代替面板
,使用图片盒
的面板
属性代替背景图像
的图片盒
属性图像
BackgroundImageLayout
属性,您可以非常轻松地指示面板
拉伸、居中或缩放图像(我假设默认值为“平铺”在您的情况下不是一个好选项)
- 将其他用户控件放置在
面板中,而不是将其放置在更高的Z顺序,而是与上一个
图片框一起
- 使用
方法,如下所示:控件.DrawToBitmap
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); }
此外,如果您的场景允许,您可以简单地将
DrawToBitmap
方法与包含您希望渲染的所有参与者的任何控件一起使用,例如实际的表单
嘿,它工作得很好。谢谢你的简单回答。只有一件事.png给了我一个GDI+错误,但当我改成.Jpeg时,它成功地保存了。再次感谢。很高兴听到这个消息。图像格式由您选择。。你可以使用Bmp、Jpeg、Gif。。不管什么都适合你。虽然这个答案很完美,但我还有一个问题。其实我并没有提到,用户可以缩小图像也。实现缩放后,保存的图像不完整。有什么解决办法吗?我想我明白。。。你是说一小时前,无论缩放级别如何,你总是能得到一张完整的图片,但没有用户控制。现在,您也可以使用用户控件,但由于视口的原因,图片会被裁剪?请确认这就是你的意思。我会想出一个优雅的解决方案。我得到了Jeroen的解决方案,一次又一次地画imges将满足需要。谢谢你们的支持。为了将来的参考,下面的答案是正确的,但你们也可以参考:我有另一个关于图像的情况。我发布了一个问题。看看你能不能再帮忙。谢谢