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 に答える