C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: 線描画について


(過去ログ 143 を表示中)

[トピック内 2 記事 (1 - 2 表示)]  << 0 >>

■84170 / inTopicNo.1)  線描画について
  
□投稿者/ beginner (1回)-(2017/05/25(Thu) 05:45:15)

分類:[C#] 

Windows 7/ Visual Studio 2010 C#

スレッドでデータを読み込み、座標値を取得し、picturebox1に線描きをしています。
線がチカチカ表示するだけで軌跡が残りません。
タッチしてから、オフするまで線の軌跡を残したいのですが良い方法ありますでしょうか?

While(running)
{
      データ読み込み部分は割愛。
   
   軌跡表示(xa、yaは、1個前のデータ、x1,y1は現在のデータ)

   if(入力ON)
     {
       Bitmap canvas = new Bitmap(pictureBox1.Width, pictureBox1.Height);                 
       Graphics g = Graphics.FromImage(canvas);                                                

       Pen greenPen = new Pen(Color.FromArgb(255, 0, 255, 0), 3);   
       g.DrawLine(greenPen, xa, ya, x1, y1);                                

       g.Dispose();                                                          
       pictureBox1.Image = canvas;  
      }
}                                           

引用返信 編集キー/
■84171 / inTopicNo.2)  Re[1]: 線描画について
□投稿者/ Azulean (823回)-(2017/05/25(Thu) 06:54:34)
No84170 (beginner さん) に返信
> 線がチカチカ表示するだけで軌跡が残りません。
> タッチしてから、オフするまで線の軌跡を残したいのですが良い方法ありますでしょうか?

毎回、新しい Bitmap を作成して DrawLine を一度だけ呼んでいるので、「白紙に線を1本描いたものを表示する」という実装になっています。
線を重ねる、続けていくなら、前の画像を再利用するか、すべての線を描くかのどちらかが必要です。

とりあえず、思いつくこととしては変数を増やして、「新規に作成するか」という判定を作ったらよいのでは。

if(入力ON)
{
  Bitmap canvas
  if (新規ON) {
    canvas = new Bitmap(pictureBox1.Width, pictureBox1.Height);                 
    新規ON = false;
  } else {
    canvas = pictureBox1.Image;
  }
  Graphics g = Graphics.FromImage(canvas);                                                
// 略
  pictureBox1.Image = canvas;  
  } else {
    新規ON = true;
  }
}                                           


> スレッドでデータを読み込み、座標値を取得し、picturebox1に線描きをしています。

個人的にはこちらが引っかかりますね。

この while ループは別スレッドで実行している?
そうだとすると、pictureBox1 を操作できる?
別スレッドから Bitmap を書き換えるような上記のコードでは例外が出ないか?

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -