線で囲まれた領域の塗りつぶしについて

2,103 views
Skip to first unread message

micco

unread,
Apr 4, 2011, 11:10:39 AM4/4/11
to 日本Androidの会
こんばんは。
miccoです。

線で囲まれた領域を塗りつぶすにはどうしたら良いでしょうか?
塗り絵アプリでよく見かける処理ですが、参考になるサイト等がありましたらご教示ください。
宜しくお願いいたします。

Nkzn

unread,
Apr 4, 2011, 8:12:46 PM4/4/11
to 日本Androidの会
なかざんです。

グラフィックスの描画 - Androidメモ
http://www.saturn.dti.ne.jp/~npaka/android/GraphicsEx/index.html

↑のサンプルで、図形にpaint.setStyle()を適用するときに
・Paint.Style.FILL
・Paint.Style.STROKE
を切り替えられるような処理をすれば、線だけの描画や塗りつぶしの描画ができると思います。

ただ、塗り絵を例に挙げられたということは、手書きの線で囲んだ部分を塗りつぶしたりしようとしていますか?
そうなると、また違った工夫が必要になると思います。

以上、ご参考までに。

--Yukiya Nakagawa

micco

unread,
Apr 4, 2011, 11:56:07 PM4/4/11
to 日本Androidの会
こんにちは。
miccoです。

なかざんさん、コメントありがとうございます。

説明が足らず失礼しました。
単なる矩形や円形を描いて塗るというものではなく、ユーザが自由にラインを引いた後、
どこかをタップすることで、そのタップした座標を含む(ラインで囲まれた)閉領域を塗り
つぶすようなものを作りたいと思っています。
大昔のBASICにはあったのですが、同じように簡単に塗りつぶせるAPIがあればと思
った次第です。
OpenGLを使えばできそうな雰囲気ですが、不勉強で使えません・・・。


On 4月5日, 午前9:12, Nkzn <yn.airsc...@gmail.com> wrote:
> なかざんです。
>
> グラフィックスの描画 - Androidメモhttp://www.saturn.dti.ne.jp/~npaka/android/GraphicsEx/index.html
> > 宜しくお願いいたします。- 引用テキストを表示しない -
>
> - 引用テキストを表示 -

Stone

unread,
Apr 5, 2011, 8:21:14 AM4/5/11
to 日本Androidの会
Stone@調布、東京です。

Pathを使ってCanvasで多角形の塗りつぶしできますよ。
drawPathを調べればいいと思います。
> > - 引用テキストを表示 -- 引用テキストを表示しない -
>
> - 引用テキストを表示 -

micco

unread,
Apr 9, 2011, 9:07:18 AM4/9/11
to 日本Androidの会
こんばんは。
miccoです。

Stoneさん、コメントありがとうございます。
Pathで囲んだ領域は塗りつぶせますが、やりたいこととは異なります。
たとえば、ユーザがタップ等で3本のLineを引いた場合に、3Lineの交点を頂点とする領
域をユーザがタップした際に、その領域を塗るつぶすようなものを考えています(もし交
差してなければ、どこかをタップすると画面全体が塗りつぶされる)。
そういうAPIは無いんでしょうね・・・。
仕様を考え直したいと思います。
ありがとうございました。

Stone

unread,
Apr 10, 2011, 2:47:25 AM4/10/11
to 日本Androidの会
Stone@調布、東京です。


最初みた時、すげえ、私より初歩的な質問する人がいる、
と思ったんですが、はかない思い違いでしたか。

お口直しに昔、多角形の中に点があるかどうか判定する方法を書きます
(とりたてて口上述べるほどの物ではないけど)
タッチした点から三角形の3つの頂点へのベクトルを(A,B,C)とします。
丸め誤差があるといけないので全部整数計算とします。
ベクトルMの符号付き長さを(M)とします。
そして以下の計算を行います。×はベクトル積です。
(A×B)+ (B×C)+(C×A)
もしタッチした点が三角形の内部にあればこの値がゼロでない値になります。
もしタッチした点が三角形の外にあればこの値がゼロになります。
なお、三角形の線分同士が交差してるかどうかはまた別の方法でチェックすることになります。
もし1つでも交差してなければ、三角形は閉じてないということになります。

Masakazu Nakano

unread,
Apr 10, 2011, 5:15:24 AM4/10/11
to android-g...@googlegroups.com
なかのです

まったくのチャチャですw

惑星メフィウスと夢幻の心臓の高速ペイントルーチンとか思い出したのでw

(矩形)領域にもよりますがレイヤー扱いでマスクかけちゃうとかもandroidだ
とアリ?

或いはポリゴン扱いにしちゃって見た目2D化とか…

なかの

Stone

unread,
Apr 10, 2011, 6:49:36 AM4/10/11
to 日本Androidの会
Stone@調布、東京です。


式間違えました。

(A×B)/|A||B| +(B×C)/|B||C|+(C×A)/|C||A|

「|A|]はベクトルの絶対値

Stone

unread,
Apr 10, 2011, 8:01:51 AM4/10/11
to 日本Androidの会
Stone@調布、東京です。

度々すみません。

つくづく見ればこれ、全く意味をなしてない式でした。
かなり前に思いついた方法なんで、うろ覚えで書いてしまいました。
正確にはそれぞれのASINをとって角度を計算しなければなりませんでした。
内部にあれば360度、外部だったら0度、というわけです。
それにそんな面倒なことしなくても、ベクトル積の値の正負で判定できました。
3つとも全部正または負なら内部、それ以外なら外部というわけでした。

micco

unread,
Apr 11, 2011, 12:10:56 PM4/11/11
to 日本Androidの会
なかのさん

こんばんは。
miccoです。

「惑星メフィウス」「夢幻の心臓」・・・実際にやったことは無いですが、昔懐かしいタイトルですねw
サラトマやデゼニランドなどありましたが、まさに大昔のアドベンチャーゲームのペイントのようなものを簡単に実現できるAPIが無いか探していまし
た。
OpenGLが使えないので、やはりアルゴリズムを組んで実現するしかなさそうですね。
コメントありがとうございました。

micco

unread,
Apr 11, 2011, 12:14:09 PM4/11/11
to 日本Androidの会
こんばんは。
miccoです。

Stoneさん、ご親切にありがとうございます。
やはり自分でアルゴリズムを実装する必要がありそうですね。
面倒なので、仕様を変えようと思いますw

tanig...@gmail.com

unread,
Apr 13, 2011, 4:13:17 AM4/13/11
to android-g...@googlegroups.com
谷口@大阪です。

ざっくりアルゴリズムを書くと

開始点から水平ライン左右にに境界色まで1ピクセルずつ塗る。
その際、塗った各点の上下点をそれぞれ調べ、
境界色でなければスタックに座標をつむ
スタックに積んだ座標を開始点として
繰り返す

という感じです。
めんどくせぇので、違う実装がいいと思います

taniguchi from iPhone

> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。
>

micco

unread,
Apr 16, 2011, 9:54:54 AM4/16/11
to 日本Androidの会
こんばんは。
miccoです。

ピクセル単位で調べていくアルゴリズムならシンプルですね。
谷口さん、コメントありがとうございました。
> > 詳細については、http://groups.google.com/group/android-group-japan?hl=jaからこのグループにアクセスしてください。- 引用テキストを表示しない -
>
> - 引用テキストを表示 -

Masakazu Nakano

unread,
Apr 16, 2011, 11:09:10 AM4/16/11
to android-g...@googlegroups.com

なかのです

グリッドとテーブル化で、

簡略化する手もありますね。

ようとにもよりますが…

あんどろいどで

2011/04/16 22:54 "micco" <gou...@gmail.com>:
Reply all
Reply to author
Forward
0 new messages