1

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

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

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

所有这些功能都已实现并且运行良好。

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

在此处输入图像描述

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

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

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

我想知道这个功能能不能实现。如果是,那么请引导我朝着正确的方向前进。

4

2 回答 2

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(...);
于 2013-09-11T11:40:54.907 回答
1

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

  • 代替PictureBox使用 aPanel和代替使用Image属性的PictureBox使用BackgroundImage属性Panel

注意:通过还使用该属性,您可以很容易地BackgroundImageLayout指示拉伸居中缩放图像(我假设默认值tile在您的情况下不是一个好的选择)Panel

  • 不是将其他用户控件放置在更高的 Z 顺序,而是PictureBox将它们放在前面的位置Panel
  • 使用这样的Control.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方法与包含您希望渲染的所有演员的任何控件一起使用,例如实际的Form.

于 2013-09-11T11:44:30.490 回答