- - PR -
PictureBoxについて
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2005-04-26 13:01
自動で移動する方法はないはずなので、実装は必要でしょうね。
心配な点が一つあります。 ドラッグ中に移動のようなイメージで移動するだけなら、その後の マウスカーソルの位置をあまり気にする必要がないので別にいいと思います。 しかし、描画中であれば、スクロール後のマウスカーソルの位置がずれませんか? |
|
投稿日時: 2005-04-26 13:06
返信ありがとうございます。
できないのがわかれば大丈夫です。 力技でできるので^^; マウスがずれると言う心配なんですが、 ドラッグ中はパネルの端からマウスが移動しないようにして、 そのかわりスクロールを移動するようにすれば大丈夫なので マウス位置がずれる心配はないと思います。 (マウスがパネル以外に出ようとしたらマウスをパネル内に座標を戻してあげる処理) |
|
投稿日時: 2005-04-26 14:07
それを認識されているのであれば杞憂でした。
|
|
投稿日時: 2005-04-26 14:34
杞憂とは難しい言葉をお使いになられるんですね^^
わざわざ心配してくださってありがとうございます。 話がもどりますが、画像をピクチャーボックスに表示して、 その上に線を描いたりするとするじゃないですが、 その場合に、画像と線とか書く領域を別にして 保存時に一緒にして保存することとかって可能ですか??? いまいちそのあたりの処理がよくわかならくて、 現状は画像表示と描画を同じところでしています。 「戻る」のことでも聞きましたが、 そのあたりを詳しく聞きたいです。 なんか全部聞いてる気が・・・。 よろしくお願いします。 |
|
投稿日時: 2005-04-26 14:34
杞憂とは難しい言葉をお使いになられるんですね^^
わざわざ心配してくださってありがとうございます。 話がもどりますが、画像をピクチャーボックスに表示して、 その上に線を描いたりするとするじゃないですが、 その場合に、画像と線とか書く領域を別にして 保存時に一緒にして保存することとかって可能ですか??? いまいちそのあたりの処理がよくわかならくて、 現状は画像表示と描画を同じところでしています。 「戻る」のことでも聞きましたが、 そのあたりを詳しく聞きたいです。 なんか全部聞いてる気が・・・。 よろしくお願いします。 |
|
投稿日時: 2005-04-26 14:42
描画を Paint イベントで行っているのであれば、
PictureBox が持っているイメージに描画するわけではなく、PictureBox の ウィンドウに描画されています。 この場合、保存する際には、 ・新規 Image オブジェクトを作成 ・Graphics.FromImage で Image オブジェクトに対して描画する Graphics オブジェクトを作成 ・PictureBox の Image プロパティに設定している「画像」を描画 ・描画クラスを用いて図形を描画 ・Image オブジェクトを保存 でいいんじゃないかと思います。 |
|
投稿日時: 2005-04-26 14:57
返答ありがとうございます。
現状直接Imageに描画してます。 private Graphics grfx; grfx = Graphics.FromImage(pictureBox1.Image) ; Pen pen = new Pen(Color.Magenta) ; if(e.Button == MouseButtons.Left) { grfx.DrawLine(pen, mousepoint, pictureBox1.PointToClient(Cursor.Position)); mousepoint = pictureBox1.PointToClient(Cursor.Position); pictureBox1.Refresh(); } ってな感じです。。。 保存は Rectangle rect = pictureBox1.ClientRectangle; Bitmap bmp = new Bitmap(rect.Width, rect.Height); Graphics g = Graphics.FromImage(bmp); PaintEventArgs pea = new PaintEventArgs(g, rect); this.InvokePaintBackground(pictureBox1, pea); this.InvokePaint(pictureBox1, pea); bmp.Save(@"C:\test.bmp"); ってな感じでしています。 これだとまずいですか??? |
|
投稿日時: 2005-04-26 15:05
Image に描画したら消せませんよね。
だから、当初に ・PictureBox.MouseMove 描画データの生成 描画データ配列への追加 PictureBox.Invalidate (今回変更された領域のみ Invalidate するとベター) ・PictureBox.Paint 描画データ配列の描画 ・取消 描画データ配列から要素削除 PictureBox.Invalidate (今回変更された領域のみ Invalidate するとベター) ・保存 Bitmap を生成 Graphics を生成 描画データ配列の描画 保存 を提案したのですが。 あと、IDisposable を実装しているオブジェクト(Graphics や Bitmap)は、使い終わったら Dispose したほうがいいですね。 |
