• ベストアンサー

PictureBoxに絵を書き込む

輪郭を検出して合成写真に利用するプログラムを作っているのですが、輪郭が途切れてしまうことがあります。 そこで、PictureBoxのクリックした部分を認識して、輪郭を手動で補うというプログラムを作りたいのですが、どのようにしたらいいのでしょうか。 PictureBoxのMouseClickを利用するとドラッグで線を引いたりできず、MouseDownだとうまくいきません。 マルチスレッドというような感じにすれば良さそうですが、よくわかりません。 言語はC#です。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#248942
noname#248942
回答No.2

List<Point> TempPoints = new List<Point>(); private void PictureBox1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) { if (e.Button == Windows.Forms.MouseButtons.Left) { TempPoints.Add(e.Location); if (TempPoints.Count > 2) { g.DrawLines(Pens.Black, TempPoints.ToArray); TempPoints.RemoveAt(0); } } } で、gは描画するGraphicsオブジェクトを指定してください。

その他の回答 (2)

noname#248942
noname#248942
回答No.3

追加です private void PictureBox1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e) { TempPoints.Clear(); } を追加してください

kilojapan
質問者

お礼

ありがとうございます 載せてもらったものはそのままでは動作しませんでしたが、参考にしたらできるようになりました。 ありがとうございました。

noname#248942
noname#248942
回答No.1

それは、お絵かきソフトのように、マウスで線を引くということですか?

kilojapan
質問者

補足

そういうことです。 よろしくお願いします。

関連するQ&A

  • .NETのフォームの上のコントロールについて

    ドラッグで移動可能なFormを作成しようとしています。 Formの上には3つほどPictureboxがFormギリギリの大きさまで埋め尽くしています。 なので、クリックでFormを選択することは出来ません。 この状態でFormのMouseDownイベントを使用することは可能でしょうか? 実質、FormではなくPicturebox1~3をクリックしていることになるのは理解しています。 その状態でフォームごとドラック可能にする方法があれば教えて下さい。

  • pictureBoxの画像の座標の色の出し方。

    VC++で、pictureBoxで表示した画像を適当な場所をクリックするとその座標とRGBの色あいが表示するプログラムなんですが、エラーはしなかったんですが、デバックして画像表示して適当にクリックしてもなにも表示されませんでした。 プログラムに間違えでもあるのかみてください。 private: System::Void pictureBox1_MouseDown(System::Object^sender, System::Windows::Forms::MouseEventArgs^ e) { String^fname = openFileDialog1->FileName; Bitmap^fun = gcnew Bitmap(fname); Point^ p = PointToClient( Point(e->X ,e->Y)); Color^col = fun->GetPixel(p->X,p->Y); label1->Text = String::Format("..{0}", fun->GetPixel(p->X,p->Y)); }

  • リストボックスの選択項目をさらにクリック

    こんにちは。 C#+.NetFramework3.5で開発しています。 リストボックスを使っているのですが、リストボックスの選択されている項目をさらにクリックした場合を検出したいのです。 イベントは、 Click MouseClick MouseDown を試してみましたが、どれも選択項目が変化したあとに呼び出されるため、目的を達することができません。 選択項目が変化する前に発生するイベントはないのでしょうか? よろしくお願いします。

  • VB.NETでPictureBoxへの描画について

    VB.NETでPictureBoxへの描画について PictureBoxに画像を表示し、余白部分を含めて、マウスで描画できる処理を作成しているのですが、 どうも上手くいかない為、皆さんの知恵をお借りしたいと思い質問させて頂きました。 まず、880×560のPictureBoxを用意し、その中に、600×480の画像を埋め込んでいます。 そのPictureBoxの中で、画像以外の部分(余白)にもマウスで線等を書きたいのです。 画像のみに描く場合は上手くいくのですが、余白を含めると上手くいかなくなってしまい、 困っております。 プログラムの違いは以下の箇所のみです。2の場合は上手くいきます。 1.PictureBox全体に描画する(画像も含め) Dim g As Graphics = PictureBox1.CreateGraphics 2.画像のみに描画する Dim g As Graphics = Graphics.FromImage(PictureBox1.Image) ちなみに、マウスではなく、ボタンクリック時に描画した時は、1の場合でも上手くいきます。 お手数ですが、ご回答の程、よろしくお願いします。

  • 使用する言語(画像処理)

    現在大学で情報系の研究を行っています。 「画像ファイルを読み込んでエッジを検出、エッジのラインで囲まれている部分を一つの領域として取得する」というプログラムを作りたいと思っています。 かなり分かりにくい説明だとは思うのですが、例を挙げますと・・・ 世界地図をスキャナで読み込む ↓ 取得した画像ファイルをプログラムに読み込ませる ↓ 各国の輪郭をエッジとして検出、輪郭以外は真っ白にしてモノクロ化 ↓ エッジで囲まれている部分(国の領土)をそれぞれ一つのオブジェクトとして認識できる。つまり、一枚の画像としてではなくそれぞれの国の領域を持つオブジェクトとして保持することができるようにする。 このようなプログラムを書きたいと思っています。しかし現在はC言語の知識しかなく、他にVisualBasicやJava、C++なども考えていますがどの言語がこのような処理に適しているのか分かりません・・・ どの言語でも書こうと思えば書けるものなのでしょうか?それともそれぞれの言語に得意分野があるのでしょうか?

  • ドラッグ中の線の引き方について

    Visual C++ 2005 Express Edition、C++で作っています。 クリックした点からドラッグして放した点まで線を引きたいのですが、 点から点へ線を引くことはできるのですが、 ドロップ中の線の引き方がわかりません。 MouseDownで最初の点の座標を得て、 MouseUpで点と点をLineTo(hdc,e->X,e->Y);で結んでいます。 MouseMoveでLineToをしてしまうと沢山線が出てしまってうまくいきません。線を一回一回消せばいいと思ったのですがうまくいきません。また、前に書かれた線を消さないようにしたいです。 よろしくお願いします。

  • クリックした点がその線上にあるかの計算

    こんにちは。UNKOです。 PictureBox内に線を引き、その線上をクリックしたかを調べたいのですが、なかなか上手く行きません。 一応、作ったのですが、 dblA = (dblY2 - dblY1) / (dblX2 - dblX1) dblB = dblY2 - (dblA * dblX2) dblAnsY = (dblA * X) + dblB if dblAnsY = Y then … 始点(dblX1,dblY1)~終点(dblX2,dblY2) クリックした座標(MouseDownイベント時)が(X,Y)です。結果のdblAnsYの値が極端に狂ったりします(合っていたり、+30位狂ったり) 初歩的な質問で申し訳ありませんが、どなたかアドバイス宜しくお願い致します。

  • 「右クリック でドラッグ&ドロップ」で縦横の移動できるようにしたいです。

    お世話になります。 VB6で質問です。   form [ 1000*1000 ] << A picturebox [300*300 ] << B [A]の真中に[B]を配置して、[B]を「右クリック でドラッグ&ドロップ」で縦横の移動できるようにしたいです。 下記のようにしたところ、マウスのみで動いてしまい「右クリック」が関連しません。 Private Sub picturebox_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)  picturebox.Top = Y End Sub  この場合のプログラムを教えて欲しいです。

  • 円のプログラム

    円の中の模様を認識するプログラムを作成しています。 中心点から外側に向かい、色情報を格納していく方法を考えているのですが、 四角の場合では、縦と横だけなのでできたのですが、 円の場合だと角度をつけてみていく方法が解りません。 理論的に三角関数やラジアンなどを使うのは解るのですが、それをどうプログラムにしていくかが解りません。 だれか教えてくれませんか? プログラムの流れでもいいので教えてください。 (できれば詳しく教えてもらうと助かりますが…。) 私が使っているのは、Visual studio .NET2003です。 Formアプリケーションを使っています。 FormにPictureBoxとボタンを2つ作り、ボタンを押すとPictureBoxに円画像が出てき、もう一つのボタンを押すと円画像の中心から線が引けているといったものを作りたいのです。

  • マウスイベントを利用した線描きアプリをVBで作成できず困っています。

    フォームを、PictureBox1、CommandButton1、Frame1、Frame1内にOptionButton1,2,3 Frame2、Frame2内にOptionButton1,2,3,4,5、Frame3、Frame3内にOptionButton1,2,3とし、 PictureBox1にマウスドラッグ、マウスクリックを使って線を描くVBソフトを作成しようと思います。このとき、筆の種類から、次の3種類選べます。 鉛筆・・・マウスドラッグによる線描きで、「マウスによるフリーハンド描画」を基本。 直線・・・クリックした2点間を直線で結ぶ。 ジグザグ・・・次々とクリックした点間を直線で結ぶ。 描画するとき、次の2つのオプションも利用できるようにする。 色オプション 黒、赤、緑、青、黄の5色がオプションボタンの選択で選ぶことができ、描画の線の色に反映させる。色定数は次のように決めておく。 黒・・・RGB(0, 0, 0) 赤・・・RGB(255, 0, 0) 緑・・・RGB(0, 255, 0) 青・・・RGB(0, 0, 255) 黄・・・RGB(255, 255, 0) 太さオプション 線の太さには、細線、中線、太線の3種類がオプションボタンの選択で選ぶことができ、描画の線の太さに反映させる。太さの(DrawWidthプロパティ)値は次のように決めておく。(DrawWidthプロパティを反映させるオブジェクトは、Picture1。) 細線・・・DrawWidth = 1 中線・・・DrawWidth = 3 太線・・・DrawWidth = 5 CommandButton1のクリックで、Picture1に描いた図形を消去する命令を実行させようと思っています。このコードを教えてください。

専門家に質問してみよう