DOBON.NET DOBON.NETプログラミング掲示板過去ログ

C#でお絵かきソフト

環境/言語:[VisualStudio2005 C# Windows7 ]
分類:[.NET]

こんにちは、現在C#の画像処理の勉強をしています。
ペイントのような簡単なお絵かきツールを作りたいと思っているのですが。
マウスをクリックした場合に線が引かれません。
ひいた線がすぐに消えてしまいます。何かが足らないと思うのですが。
アドバイス頂けないでしょうか。
参考にできるサイトなどがあれば教えていただけると嬉しいです。


    public partial class Form1 : Form
    {
        Graphics grfx;
        Point pic_old, pic_new;
        bool pen = false;
        Pen m_pen = new Pen(Brushes.Black, 5);


        public Form1()
        {
            InitializeComponent();
            grfx = Graphics.FromHwnd(this.panel1.Handle);
        }

        private void panel1_MouseUp(object sender, MouseEventArgs e)
        {
            pen = false;
        }

        private void panel1_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == System.Windows.Forms.MouseButtons.Left)
            {
                pen = true;
                pic_old.X = pic_new.X = e.X;
                pic_old.Y = pic_new.Y = e.Y;
                this.panel1.Refresh();
            }
        }

        private void panel1_MouseMove(object sender, MouseEventArgs e)
        {
            if(pen == true)
            {
                pic_old = pic_new;
                pic_new.X = e.X;
                pic_new.Y = e.Y;
                this.panel1.Refresh();
            }
        }

        private void panel1_Paint(object sender, PaintEventArgs e)
        {
            grfx.DrawLine(m_pen, pic_old, pic_new);
        }
    }
■No26769に返信(Widさんの記事)
> こんにちは、現在C#の画像処理の勉強をしています。
> ペイントのような簡単なお絵かきツールを作りたいと思っているのですが。
> マウスをクリックした場合に線が引かれません。

Paint イベントを使う場合には、Graphics クラスは
イベント引数 e.Graphics から得るようにしてください。

> Paint イベントを使う場合には、Graphics クラスは
> イベント引数 e.Graphics から得るようにしてください。

ありがとうございます。
e.Graphicsでも得られたのですね。

線が引かれないと書きましたが、マウスクリック時に描画はされるのですが、続けて線を引こうとすると、前に書いた線が消えてしまうのです。
■No26771に返信(Widさんの記事)
> 線が引かれないと書きましたが、マウスクリック時に描画はされるのですが、続けて線を引こうとすると、前に書いた線が消えてしまうのです。

おそらくは、Paint イベントに記述した描画処理で、
「後に描画した方の線」しか描画していないのではないでしょうか。

以前に描画した内容も継続的に描画し続けるか、もしくは、
以前の描画結果を背景画像として設定しておくようにしてみてください。
  • 題名: Re[4]: C#でお絵かきソフト
  • 著者: Wid
  • 日時: 2010/04/30 23:43:50
  • ID: 26775
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
こんにちは

Paint イベントで線を引くのではなくMOVEイベント内で線を引いて
Refreshイベントをなくしたところうまくいきました。

アドバイスありがとうございました!
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板