0

だから、私は自分のペイントアプリケーションに取り組んでいます。変更を加えるたびに、現在の画面状態がコピーされ、ビットマップ イメージとしてディスクに保存されます (ペイント イベントで使用できるようになります)。

ウィンドウを最小化して通常の状態に戻してから描画しようとすると、問題が発生します。これにより、変更に反応するイベントがトリガーされ、プログラムは画像を保存しようとします---->>> kabooom。

「GDI +で一般的なエラーが発生しました」と表示されます..だから、答えを求めてさまざまなフォーラムをサーフィンしてきましたが、どれも本当の答えをくれませんでした.間違ったパスなどについて言及しています.問題ではありません。ビットマップを破棄するか、ストリームで何かをする必要がありますか?

        int width = pictureBox1.Size.Width;
        int height = pictureBox1.Size.Height;

        Point labelOrigin = new Point(0, 0); // this is referencing the control
        Point screenOrigin = pictureBox1.PointToScreen(labelOrigin);

        int x = screenOrigin.X;
        int y = screenOrigin.Y;

        Rectangle bounds = this.Bounds;
        using (Bitmap bitmap = new Bitmap(width, height))
        {
            using (Graphics g = Graphics.FromImage(bitmap))
            {
                g.CopyFromScreen(new Point(x, y), Point.Empty, bounds.Size);
            }
            bitmap.Save(_brojFormi + ".bmp", System.Drawing.Imaging.ImageFormat.Bmp);                
        }
4

1 に答える 1

0

別のイベントで使用できるように、画像をディスクに保存していますか? わお。

ビットマップを格納するためにクラスグローバル変数を使用しないのはなぜですか?

class MyForm
{
    Bitmap currentImage = null;
    Graphics gfx = null;

    private void btnLoad_Click(object sender, EventArgs e)
    {
        // ...
        currentImage = new Bitmap(fileName);
        gfx = Graphics.FromImage(currentImage);
    }

    private void pbEditor_Paint(object sender, PaintEventArgs e)
    {
        if (currentImage != null && gfx != null)
        {
             lock(currentImage) e.Graphics.DrawImage(currentImage, ...);
        }
    }

    private void pbEditor_Click(object sender, MouseEventArgs e)
    {
        // quick example to show bitmap drawing
        if (e.Button == MouseButtons.Left)
            lock(currentImage) currentImage.SetPixel(e.Location.X, e.Location.Y, Colors.Black);
    }
}
于 2012-06-12T15:26:43.700 に答える