1

我有一些代码在其中将函数图绘制到PictureBox图形中。代码在Paint事件中实现。在某些时候,我想将图形内容的位图保存在文件中。

我已经阅读了这个问题的答案,但没有找到我要找的东西。

我需要的是在 PictureBox (或您建议的任何其他控件)中绘制,以便在控件被隐藏或其他东西时不会丢失绘图(所以我认为我不能CreateGraphics()并且能够将该绘图保存在按钮的点击事件。

如有必要,我愿意将绘图逻辑排除在Paint事件之外。

提前致谢。

4

1 回答 1

1

我继续并根据我的假设回答了这个问题,

我创建了一个新Winforms应用程序

我添加了一个面板和一个按钮,我创建了一个Bitmap名为的按钮buffer,并在Form1构造函数中将其初始化为面板的大小。我没有直接绘制到面板,而是绘制到Bitmap,然后设置面板背景图像buffer;这将为您的图形增加持久性。如果您真的想写入文件,我可以向您展示。问一下。

要写入文件,您将需要此命名空间引用:

using System.IO;

我添加了ImageToDisc您要求的功能。

这是代码:

Bitmap buffer;
public Form1()
{
    InitializeComponent();
    panel1.BorderStyle = BorderStyle.FixedSingle;
    buffer = new Bitmap(panel1.Width,panel1.Height);
}

private void button1_Click(object sender, EventArgs e)
{
    using (Graphics g = Graphics.FromImage(buffer))
    {
        g.DrawRectangle(Pens.Red, 100, 100,100,100);
    }

    panel1.BackgroundImage = buffer;
    //writes the buffer Bitmap to a binary file, only neccessary if you want to save to disc
    ImageToDisc();
    //just to prove that it did write it to file and can be loaded I set the mainforms background image to the file
    this.BackgroundImage=FileToImage();
}

//Converts the image to a byte[] and writes it to disc
public void ImageToDisc()
{
    ImageConverter converter = new ImageConverter();
    File.WriteAllBytes(@"c:\test.dat", (byte[])converter.ConvertTo(buffer, typeof(byte[])));
}

//Converts the image from disc to an image
public Bitmap FileToImage()
{
    ImageConverter converter = new ImageConverter();
    return (Bitmap)converter.ConvertFrom(File.ReadAllBytes(@"c:\test.dat"));
}
于 2012-05-24T13:46:39.843 回答