■ 現在のこのページの役立ち度:
表示されない場合こちらのリンクからもご覧になれます。
■ このページの役立ち度を評価する:
役立ち度を評価してください。
(1(左):あまり役立たない - 5(右):大変役立った):
■ ページの共有:
[ サイト内検索 ]
カスタム検索
#16722-0ペイントツール…リオ2001-06-27(水) 21:56
     #16725-0RE#16722:ペイントツール…せつら2001-06-27(水) 22:31
     #16726-0RE#16722:ペイントツール…よねKEN2001-06-27(水) 22:48
#16722-0
ペイントツール…
どうも、この前「閉鎖領域の塗りつぶし」の質問させていただいた者です。
ろってんまいあさん、ありがとうございました。

で、本題ですが…
今度は「グラデーションでの塗りつぶし」と、描いた絵の「拡大縮小」のやり方で再びつまずいてしまいました…(汗
何度も頼ってしまいすみません…
分かる方のレスお待ちしてます。

環境
VB = ver6.0
OS = Windouws98SE
#16725-0
RE#16722:ペイントツール…
グラデーション自体は判りますか? よくやる方法としては、少しずつ色を変えながら Line メソッド
で線を引いていきますね。 こんな感じですか。

Private Sub Command1_Click()
    Dim sy As Single
    Dim lColor As Long

    For sy = 0 To 3000 Step Screen.TwipsPerPixelY
        lColor = 255 * sy / 3000
        Line (0, sy)-(6000, sy), RGB(0, 0, lColor)
    Next sy
End Sub

拡大縮小ですが、PaintPicture メソッドで実現できます。 ただし、試せば判りますが、結構画像が
汚くなります。 綺麗に実現するなら、画面をぼかすような工夫を考える必要がありますね。

次に塗りつぶしです。 ここまでは初心者さん向けですが、この先は困難です。

御自分で塗りのロジックを考えるか、マスクを利用する方法があります。 自作塗りの場合、API 無し
では速度が遅くて、使えたものではないですが。 基本的には、X方向左右の色を調べていき、境界線
色なら記憶、その間を1本線を描き、上または下のラインのチェックに移る事です。 難しいのは、塗
りつぶし範囲に凹な部分があるときの、不要部分と塗る部分の判定ですか。 かなり大変ですよ。

マスクを使う方法は、塗られる画像とマスク用の白黒画像を PaintPicture メソッドの論理演算指定で
重ねていく事です。 どこかの解説ページを探す方が判りやすいかもしれません。 こちらの方法でも、
それなりに面倒です。

もっとも、次期 VB ではグラデーション塗りらしい機能も増えるようなので、それまでじっと我慢する
手も有りかも知れません。 私も詳しくないので、興味があるなら、御自分で調べてみてください。


画像編集ツール作成を目指すなら、難しいロジックをいろいろと考える必要がありますし、速度の事を
考えると、画像関係の API も全て試してみるべきでしょう。 市販の画像編集ツールの偉大さが判る
かと思いますが、納得するまで頑張ってみてください。 1日や2日で組めるようなものではないですが。
#16726-0
RE#16722:ペイントツール…
> どうも、この前「閉鎖領域の塗りつぶし」の質問させていただいた者です。
> ろってんまいあさん、ありがとうございました。

前回のろってんまいあさんの回答のリンク先は見てませんが、
たぶんAPIのFloodFillを使う方法だと思います。

> 今度は「グラデーションでの塗りつぶし」と、

こちらも基本的には単なる閉鎖領域の塗りつぶしで、塗る色が変化するだけです。
単色での塗りつぶしではないため、FloodFillではできませんので、
地道に閉鎖領域を判定する必要があります。

VB標準の方法でなら、Pointメソッド(ある点の色を取得)で各点の色を調べて、
PSetメソッド(ある点に色を塗る)で点を描画していきます。

閉鎖領域の判定自体はVB固有の問題ではなく、アルゴリズム(処理の考え方)の
問題ですので、本屋で画像処理の本を買ってきて勉強して下さい。
Webで検索してもいろいろ見つかると思います。

閉鎖領域の判定について、簡単にやり方を説明するなら、
塗りつぶしの開始点を指定し、その点の色を覚えておき、
後は上下左右の4方向について、その色と同じ色かどうかを調べます。
その調べた中で同じ色だった点に関してだけ、さらに4方向(実際には来た道はチェックしない)
について、同色でなくなるまで同様に調べていきます。

言葉で説明すると上記のように妙に小難しくなりますので、Webや書籍で図入りで
解説しているものを探してみた方がわかりやすいと思います。

> 描いた絵の「拡大縮小」のやり方で再びつまずいてしまいました…(汗

単純な拡大縮小なら、PaintPictureメソッドを調べてみて下さい。
拡大縮小できます。
このページと関連する記事:
#638-1同色のつながった範囲に色を流し込みたいです1999-06-30(水) 18:26
#16702-0閉鎖領域の塗りつぶし2001-06-24(日) 22:27
#20651-0コダック イメージ編集コントロールの使用方法2002-04-23(火) 16:45
#1464-0塗りつぶし1999-09-10(金) 17:11
#17005-0グラフィックスの解像度について(丸いボタンを作りたい)2000-12-09(土) 03:01
#2330-1バケツツールを作りたいのですが1999-07-29(木) 22:56
#28174-0クリッピング領域の指定2000-08-18(金) 15:11
#29433-0StretchBltとPaintPictureで拡大縮小2000-09-06(水) 14:16
#18643-0ペイントのように色のぬりつぶし2000-03-28(火) 00:35
#11176-0flood fill で色を塗る時1999-12-08(水) 11:06
お探しの情報は見つかりましたか?お困りの問題は解決しましたか?
サイト内検索, 似た記事検索で見つからなくてもあきらめずに掲示板で質問してみましょう。
VB初心者友の会があなたのお役に立てれば幸いです。また、本ページの投稿者の方々にこの場を借りて感謝致します。
本ページは過去ログを集めて自動構成しています。よろしければこのページに関するフィードバックをお願いします。
(※ 構成の誤り、広告等の不適切な記事、リンク切れ、読めないページの報告など)