Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
複雑な図形の塗りつぶし
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=10237#CommentId20671
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
魔界の仮面弁士
 (社会人)
投稿日時
2011/5/26 18:01:33
VB のバージョンも明記しましょう。
> テキストボックスにある都道府県に
TextBox に入力させるよりも、
ComboBox から選択させる方が良い気がします。
以下、開発環境が何であるかわからないので、具体的なコードの提示は避けて方法論だけ:
> 色を塗りたいです。
(案1) 黄色と透明色の 2 色だけの画像(各県の形のもの)を重ねて描画する。
(案2) 塗りつぶし箇所に対するマスクを用意し、それを使って塗りつぶす。
(案3) ExtFloodFill API を使って、閉じた領域を塗りつぶす。
(案4) 塗りつぶし領域に対する Region を作成しておき、それを使って塗りつぶす。
(案5) 県境の輪郭部分の座標を調べておき、それを使って塗りつぶす。
1 はセル画のイメージ。VB6 では透過画像の扱いに制限があるため使いにくいですが、
VB.NET では png 画像を描画する事で、比較的簡単に実装できます。
都道府県分の画像数を保持しておくことになるため、データサイズが増加するのが難点です。
2 はスプライト処理。これも、マスク画像を都道府県の数だけ用意する必要があります。
VB6 の場合は PaintPicture を使います。あるいは ImageList コントロールを使う手も。
http://homepage1.nifty.com/rucio/main/technique/teq_13.htm
http://rucio.cloudapp.net/CommentDetail.aspx?ThreadId=9641&CommentId=15402
3 は VB6 のヘルプ「hDC プロパティの使用例」に載っています。
VB.NET なら過去ログにサンプルがあります。API を使う事になりますが、
各都道府県内の座標 1 つを用意するだけなので、必要なデータ量はもっとも少なくて済みます。
http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=9715
4 は私が良く使う手法です。リージョン情報を RegionData のバイナリとして保持しておき、
それを Region クラスに復元してから FillRegion メソッドで塗りつぶします。
http://dobon.net/vb/dotnet/graphics/fillregion.html
http://dobon.net/vb/dotnet/graphics/setclip.html
5 は、下記の VB.NET 向けサンプルが参考になるかも。
http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=10147#CommentId20330