ページ 1 / 1
マウスで幾何形状を書きたい
Posted: 2016年12月07日(水) 18:31
by KDN
Window10のアプリケーションとして
C言語で円や四角形をマウスドラッグで簡単に書けるソフトを作りたいですが、
一番簡単な方法を教えていただけませんか。
もし既存のフリーソフトツールやライブラリーがあれば、優先利用したいのです。
ぜひご紹介下さい。
Re: マウスで幾何形状を書きたい
Posted: 2016年12月07日(水) 20:05
by C6b14
もしVisualStudioを使う予定であるなら”C言語で円や四角形をマウスドラッグで簡単に書けるソフト”で検索すると出てくるページの「新・ゲームプログラミングの舘」で紹介されている”DxLib"がいいと思います。
Re: マウスで幾何形状を書きたい
Posted: 2016年12月07日(水) 21:31
by あんどーなつ
Win32 APIを使うほうがよいかと思います。DXライブラリでもいいですが、マウス操作で図形を描くソフトはPhotoshopやWindowsペイントのようなIllustratorやPowerpointのような(*)ドロー系のソフトであって、ゲームソフトではないからです。
ちなみにWin32 APIはWindowsメタファイルをサポートしています。WindowsメタファイルはWin32 APIの描画命令(GDI)をまとめて実行するためのファイル形式なので、プログラムでグラフィックスを編集して、それを他のプログラムで表示させたいというニーズは満たします。Windowsメタファイルはドロー系のソフトで編集することができます。
(*) すみません。間違っているので直させていただきました。WindowsペイントとPhotoshopはドロー系ではなくラスター系の描画ソフト(ペイントソフト)に分類されているそうです。
Re: マウスで幾何形状を書きたい
Posted: 2016年12月08日(木) 10:22
by usao
OpenCVを使うのも便利だと思います.
・画像データの生成(と破棄)
・画像データへの描画とか(線,円弧,矩形,多角形…)
・画像のファイル保存と読込
・ウィンドウ作って画像表示してくれるし,そのウィンドウに対するマウスとキーボードのイベントが使える.
というあたりを使う感じで.
(CVが出すウィンドウの体裁とかが気になるなら,Win32とかで自前のウィンドウ作ってやる感じで.)
Re: マウスで幾何形状を書きたい
Posted: 2016年12月08日(木) 13:12
by KDN
みなさん早速お返答本当にありがとうございます。
前回説明不足でごめんなさい。
単に幾何形状を書くのでなく、自分が書いた幾何形状に囲まれている領域の座標値も取得したいのです。
それに書いた幾何形状に囲まれている領域を指定画像値で塗りつぶしたいと思います。
お詫びとともに皆様にお礼を申し上げます。
また宜しくお願い致します。
Re: マウスで幾何形状を書きたい
Posted: 2016年12月08日(木) 14:48
by usao
>単に幾何形状を書くのでなく、自分が書いた幾何形状に囲まれている領域の座標値も取得したいのです。
>それに書いた幾何形状に囲まれている領域を指定画像値で塗りつぶしたいと思います。
ペイントソフトの 塗りつぶし機能 のように,
「領域」というのが,互いに隣接する同じ色の画素からなるもの で良ければ,
画素データへのアクセス手段さえあれば,いくらでもやりようはあるでしょう.
そんなもので良いのでしょうか?
下図左側のような絵を描いた際に, 右側での黄緑の領域(の画素群の座標)を取得したり塗りつぶしたりできればよい?

- クリップボード01.png (1.09 KiB) 閲覧数: 5144 回
Re: マウスで幾何形状を書きたい
Posted: 2016年12月08日(木) 16:38
by KDN
usao様
お世話になっております。
わざわざ図を作成していただきまして本当にありがとうございます。
多角形を描いて、その多角形の内部領域の座標セットを取得することは容易ではないと思いますので、
自分が多角形の内部領域を塗りつぶすような実装できないと思います。
もしかして簡単な方法があるのでしょうか。
Re: マウスで幾何形状を書きたい
Posted: 2016年12月08日(木) 16:46
by milfeulle
私は実装したことありませんが、
「多角形 塗りつぶし アルゴリズム」
で検索するとたくさん出てきますが、これではだめなのでしょうか?
Re: マウスで幾何形状を書きたい
Posted: 2016年12月08日(木) 17:22
by usao
>多角形を描いて、その多角形の内部領域の座標セットを取得することは容易ではないと思いますので、
>自分が多角形の内部領域を塗りつぶすような実装できないと思います。
座標を取得する目的は,塗りつぶしを行うためなのでしょうか?
(つまり,「塗りつぶす処理」自体が存在すれば,座標を取得しなくてもよい?)
私が先の投稿で貼った絵のような処理内容で良いのであれば…
例えば,OpenCVでは,領域を塗りつぶす関数 floodFill() というのがあります.
下記URLは具体例がわかる絵がないかな?と思いググって出てきたやつです.
http://maverickproj.web.fc2.com/OpenCV_24.html
そういう機能そのものが存在するライブラリを使わない場合であっても,
領域内部の画素の色に関する条件などがわかっているならば(例えば,同じ色であるとか)
画素データにアクセスする手段さえあれば自前でやってもそれほど難しい処理ではありません.
(「ラベリング」とかで検索すれば有益な情報が見つかるかと思います)
Re: マウスで幾何形状を書きたい
Posted: 2016年12月09日(金) 11:47
by KDN
usao 様
お世話になっております。
floodFill() を調べましたが、どうも指定カラーに対する塗りつぶすだけで、
指定した多角形の内部を塗りつぶすのではないですね。
Re: マウスで幾何形状を書きたい
Posted: 2016年12月09日(金) 12:29
by usao
>下図左側のような絵を描いた際に, 右側での黄緑の領域(の画素群の座標)を取得したり塗りつぶしたりできればよい?
とは話が違うということですか.
(話がよくわからなくなってきました)
多角形の頂点群の座標が既知であって,単にその多角形を内部塗りつぶしで描画したいということであれば,
多角形を描画する機能が存在するライブラリであれば大抵普通に手段が用意されているんじゃないかと想像します.
( Win32ならPolygon(),OpenCVならfillPoly()とか )
Re: マウスで幾何形状を書きたい
Posted: 2016年12月09日(金) 15:42
by KDN
皆さん
ありがとうございました。
ネット上いろいろ実装例があったので、自分で実装するほうがダイレクト的と感じました。
本当にありがとうございました。