2012年9月22日土曜日

VB での画像の重ね合わせ

VB で画像の重ね合わせをしようと、参考書などを調べると出てくるのが、透過色指定。
確かに、色指定すればその部分が透けるので、下の画面を可視化できます。
しかし、ここで、困ったことが ... 。
透過を含む画像が単純な場合は良いのですが、複雑になると、問題が。
例えば、透過色は透けちゃうので使えない、指定外の中間色で色が変化してしまう、
等々で、ちょっと凝った事をしようとすると、お手上げ。


  透過色は透けちゃうので使えない > これは ショウガナイ ですね。
  指定外の中間色で色が変化してしまう > ベタに塗り潰した単純な物しか扱えないです。

透過の対象にする画像を画像ソフトで作成した場合、中間色の中に、透過指定色のデータが含まれてしまう事があり、色が変化して表示されてしまうのです。

透過させる画像が、固定されている場合は、透過色を変えたり範囲指定したりすれば何とか対応可能でしょう。
しかし、これが、不特定のファイルからの読み込みでは、制限が多くて、もう、やんなっちゃう!です。


画像ソフトのように、レイヤー処理(複数の画像を独立・重ねて扱う)は、無理なのでしょうか?


Windows に標準で用意されたソフトのペイントを使う前提で書かれた参考書は透過色を指定します。
ペイントで保存されるデータには必ず、値が入っています。
つまり、背景色で塗り潰された状態です。
それ故、色を指定して、透過させるように処理している訳です。
標準では白が背景で、透明は用意されていません。
 GIF ファイル形式を使って、透過の背景を扱うことも可能なようですが、やり辛い。

透過とは、本来、データが無く、Windows の Paint イベントで塗り潰されない領域がある事を意味します。

ならば、上記のように、遠回りせず最初から透過部分にデータの無い画像ファイル形式を使えば ... 。
そうです。
それが、答です。


GIMP 等の透過背景を使える画像ソフトを用いて、画像を作成し、普通に重ね合わせれば、OK!
これで、全ての色を使って、複数の複雑な画像を重ね合わせられます。
GIF もありますが、アルファチャンネルで半透明も扱える PNG がお勧めです。
拡大縮小にも強いし、透過部分のグラデーションもドンと来い!です。

  *1 png が透明部分をその様に表示するのは、背景に対してです 。
     例えば、jpg と png を各々 PictureBox に取り、これを重ねても、透過はしません。
     そして、PictureBox のBackColor を Color.Transparent にするだけでも、透過はしません。
     更に、Me.PictureBox2.Parent = Me.PictureBox1 として、背景が Form ではなく、
     別の PictureBox になる様指定する事で、初めて、透過します。
     しかし、Graphics を使って、panel や canvas 等に重ねて描画する場合は、こんな心配は不要です。


今回はコードや画面例が無く、文章だけで、済みません。

作るソフトの内容にも拠りますが、 重ね合わせのみを扱うソフトなら、GIMP で Script-Fu を使ったアプローチも有でしょう。



[2012/09/23] ラベル:アプリ の指定を削除
[2014/06/12] *1 の部分を追記   分り辛い文章解説で、失礼していました

0 件のコメント:

コメントを投稿