マウスで幾何形状を書きたい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
KDN

マウスで幾何形状を書きたい

#1

投稿記事 by KDN » 2年前

Window10のアプリケーションとして
C言語で円や四角形をマウスドラッグで簡単に書けるソフトを作りたいですが、
一番簡単な方法を教えていただけませんか。
もし既存のフリーソフトツールやライブラリーがあれば、優先利用したいのです。
ぜひご紹介下さい。

C6b14

Re: マウスで幾何形状を書きたい

#2

投稿記事 by C6b14 » 2年前

もしVisualStudioを使う予定であるなら”C言語で円や四角形をマウスドラッグで簡単に書けるソフト”で検索すると出てくるページの「新・ゲームプログラミングの舘」で紹介されている”DxLib"がいいと思います。

あんどーなつ
記事: 171
登録日時: 2年前
連絡を取る:

Re: マウスで幾何形状を書きたい

#3

投稿記事 by あんどーなつ » 2年前

Win32 APIを使うほうがよいかと思います。DXライブラリでもいいですが、マウス操作で図形を描くソフトはPhotoshopやWindowsペイントのようなIllustratorやPowerpointのような(*)ドロー系のソフトであって、ゲームソフトではないからです。

ちなみにWin32 APIはWindowsメタファイルをサポートしています。WindowsメタファイルはWin32 APIの描画命令(GDI)をまとめて実行するためのファイル形式なので、プログラムでグラフィックスを編集して、それを他のプログラムで表示させたいというニーズは満たします。Windowsメタファイルはドロー系のソフトで編集することができます。

(*) すみません。間違っているので直させていただきました。WindowsペイントとPhotoshopはドロー系ではなくラスター系の描画ソフト(ペイントソフト)に分類されているそうです。

アバター
usao
記事: 1564
登録日時: 6年前

Re: マウスで幾何形状を書きたい

#4

投稿記事 by usao » 2年前

OpenCVを使うのも便利だと思います.

・画像データの生成(と破棄)
・画像データへの描画とか(線,円弧,矩形,多角形…)
・画像のファイル保存と読込
・ウィンドウ作って画像表示してくれるし,そのウィンドウに対するマウスとキーボードのイベントが使える.

というあたりを使う感じで.
(CVが出すウィンドウの体裁とかが気になるなら,Win32とかで自前のウィンドウ作ってやる感じで.)

KDN

Re: マウスで幾何形状を書きたい

#5

投稿記事 by KDN » 2年前

みなさん早速お返答本当にありがとうございます。

前回説明不足でごめんなさい。
単に幾何形状を書くのでなく、自分が書いた幾何形状に囲まれている領域の座標値も取得したいのです。
それに書いた幾何形状に囲まれている領域を指定画像値で塗りつぶしたいと思います。

お詫びとともに皆様にお礼を申し上げます。

また宜しくお願い致します。

アバター
usao
記事: 1564
登録日時: 6年前

Re: マウスで幾何形状を書きたい

#6

投稿記事 by usao » 2年前

>単に幾何形状を書くのでなく、自分が書いた幾何形状に囲まれている領域の座標値も取得したいのです。
>それに書いた幾何形状に囲まれている領域を指定画像値で塗りつぶしたいと思います。

ペイントソフトの 塗りつぶし機能 のように,
「領域」というのが,互いに隣接する同じ色の画素からなるもの で良ければ,
画素データへのアクセス手段さえあれば,いくらでもやりようはあるでしょう.
そんなもので良いのでしょうか?


下図左側のような絵を描いた際に, 右側での黄緑の領域(の画素群の座標)を取得したり塗りつぶしたりできればよい?
クリップボード01.png
クリップボード01.png (1.09 KiB) 閲覧数: 854 回

KDN

Re: マウスで幾何形状を書きたい

#7

投稿記事 by KDN » 2年前

usao様
お世話になっております。

わざわざ図を作成していただきまして本当にありがとうございます。

多角形を描いて、その多角形の内部領域の座標セットを取得することは容易ではないと思いますので、
自分が多角形の内部領域を塗りつぶすような実装できないと思います。

もしかして簡単な方法があるのでしょうか。

アバター
milfeulle
記事: 47
登録日時: 5年前
住所: マリーランド
連絡を取る:

Re: マウスで幾何形状を書きたい

#8

投稿記事 by milfeulle » 2年前

私は実装したことありませんが、
「多角形 塗りつぶし アルゴリズム」
で検索するとたくさん出てきますが、これではだめなのでしょうか?
ζ*'ヮ')ζプログラミングはみんなで奏でるシンフォニー

アバター
usao
記事: 1564
登録日時: 6年前

Re: マウスで幾何形状を書きたい

#9

投稿記事 by usao » 2年前

>多角形を描いて、その多角形の内部領域の座標セットを取得することは容易ではないと思いますので、
>自分が多角形の内部領域を塗りつぶすような実装できないと思います。

座標を取得する目的は,塗りつぶしを行うためなのでしょうか?
(つまり,「塗りつぶす処理」自体が存在すれば,座標を取得しなくてもよい?)



私が先の投稿で貼った絵のような処理内容で良いのであれば…

例えば,OpenCVでは,領域を塗りつぶす関数 floodFill() というのがあります.
下記URLは具体例がわかる絵がないかな?と思いググって出てきたやつです.
http://maverickproj.web.fc2.com/OpenCV_24.html

そういう機能そのものが存在するライブラリを使わない場合であっても,
領域内部の画素の色に関する条件などがわかっているならば(例えば,同じ色であるとか)
画素データにアクセスする手段さえあれば自前でやってもそれほど難しい処理ではありません.
(「ラベリング」とかで検索すれば有益な情報が見つかるかと思います)

KDN

Re: マウスで幾何形状を書きたい

#10

投稿記事 by KDN » 2年前

usao 様
お世話になっております。
floodFill() を調べましたが、どうも指定カラーに対する塗りつぶすだけで、
指定した多角形の内部を塗りつぶすのではないですね。

アバター
usao
記事: 1564
登録日時: 6年前

Re: マウスで幾何形状を書きたい

#11

投稿記事 by usao » 2年前

>下図左側のような絵を描いた際に, 右側での黄緑の領域(の画素群の座標)を取得したり塗りつぶしたりできればよい?

とは話が違うということですか.
(話がよくわからなくなってきました)

多角形の頂点群の座標が既知であって,単にその多角形を内部塗りつぶしで描画したいということであれば,
多角形を描画する機能が存在するライブラリであれば大抵普通に手段が用意されているんじゃないかと想像します.
( Win32ならPolygon(),OpenCVならfillPoly()とか )

KDN

Re: マウスで幾何形状を書きたい

#12

投稿記事 by KDN » 2年前

皆さん
ありがとうございました。

ネット上いろいろ実装例があったので、自分で実装するほうがダイレクト的と感じました。

本当にありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る