画面に線を引きたいと思ったことはありませんか?
知人にどんなソフトを作りたいと聞いたら、画面に中心線が欲しいという事だったので、今回はC#で画面上に線を引きたいと思います。
要望の整理
簡単ですが要望をまとめたいと思います。
1.画面の中心線を引く
2.画面の背景は透明
3.線の色は選択可能
この要望から、必要な知識は、下記になります。
★線の引き方
★中心線の計算方法
★画面を透明にする方法
★線の色の指定方法
★画面の大きさの取得
全体構成
構成としてはこんな感じを考えています。
1.【表示】押したら、【色選択】で選択されている色を表示する
2.【非表示】押されたら、線を非表示にする
デザインを作る
プロジェクトを作成して、デザインを作っていきます。
このフォームにはピクチャーボックスが配置されており、【親コンテナにドッキング】しています。
ピクチャーボックス配置後に、ピクチャボックスの右上の矢印をクリックすると選択肢があり、【親コンテナにドッキングする】をクリックしてください。親コンテナ(今回はフォーム)の上に引っ付きます。
線の引き方
細かい話はありますが、端的に言うと、線を描いた画像を作って、それをピクチャボックスに表示させます。流れ的には下記の通りになります。
1.ビットマップクラスを生成する(大きさを指定した画像[キャンパス])
2.グラフィッククラスを生成する(絵を描くための土台)
3.ペンクラスを生成
4.グラフィックにペンクラスを使って線を引く
5.メモリの開放(パンクしない為に念のため)
6.グラフィックをピクチャボックスに表示
private void line() { //1.Bitmapクラスを作成(大きさはPictureBoxのサイズ) Bitmap btmp = new Bitmap(picLine.Width, picLine.Height); //2.Graphicクラスを生成する(先ほどのBitmap(Imageオフジェクト)クラスを使う) Graphics grph = Graphics.FromImage(btmp); //3.Penオブジェクト生成(今回は黒の太さ1) Pen pen = new Pen(Color.Black, 1); //4.線を引く grph.DrawLine(pen, new Point(0,0), new Point(100,100)); //5.解放する pen.Dispose(); grph.Dispose(); //6.表示する picLine.Image = btmp; }
こんな感じの結果になります。
線の引き方が分かったので中心線を書きましょう!
中心線の計算方法
画面の中心に十字を引きたいので、計算方法はこうなります。
ピクチャボックスの大きさ[Width,Height] 縦の線は、Xは[Widthの半分]、Yは[Y=0]から[Y=Height]までに線を引く 始点(Width/2 , 0) 終点(Width/2 , Height) となる 同様に 横の線は、Yは[Heightの半分]、Xは[X=0]から[X=Width]まで線を引く。 始点(0 , Height/2) 終点(Width , Height/2) となります。
これでピクチャーボックスの大きさに応じて中心線を描くことができます。
以上の結果から、ピクチャボックスに中心線を描く関数を作成しました。
public void DrawCenterLine(Color clr) { //1.Bitmapクラスを作成(大きさはwindowサイズ) Bitmap btmp = new Bitmap(picLine.Width, picLine.Height); //2.Graphicクラスを生成する(先ほどのBitmap(Imageオフジェクト)クラスを使う) Graphics grph = Graphics.FromImage(btmp); //3.Penオブジェクト生成(今回は黒の太さ1) Pen pen = new Pen(clr, 1); //4.始点と終点を設定する Point stPt = new Point(picLine.Width / 2, 0); Point edPt = new Point(picLine.Width / 2, picLine.Height); //5.線を引く grph.DrawLine(pen, stPt, edPt); //4.始点と終点を設定する Point stPt2 = new Point(0, picLine.Height / 2); Point edPt2 = new Point(picLine.Width, picLine.Height/2); //5.線を引く grph.DrawLine(pen, stPt2, edPt2); //6.解放する pen.Dispose(); grph.Dispose(); //7.表示する picLine.Image = btmp; }
※今後の仕様の為に、引数には色を入れて、ペンの色を変更できるようにしています。
まとめ
今回は以上です。次回はウィンドウを透明にする方法を記述していきたいと思います。
中心線の計算方法と線の描画について今回は書きました。
C#で線を1本引くだけでも意外と大変ですw
ツールの中に線があればいいのにと常々思います。。。
ましてや、画像として扱っている所がちょっとイケてないですねw
※ほかにも方法があるのかもしれません
ソフトを作ってきて線を描画したい場面に出会うことは少なかったです。
画像処理とかしている人は必要なのかもしれませんね。
業務でプログラミング(C#/VB/Python)を作っている。
挫折を何回も繰り返し、幾度の壁を乗り越えてきた。
乗り越えてきた事を忘れないように記録に残す。
同じ思いをしている人への情報提供になれたらと思う。
基本は初心者に向けたプログラムの情報を提供する。
コメント