§4 画像(ピクチャコントロール)の利用 VB6 | |
(3) 画像のコピー V |
4. 背景画像と合成(スプライト処理)
背景となる画像Aの上を別の画像Bが移動するときなど、画像Bの図形以外の部分が透けて見えるようにする処理をスプライト処理という。背景画像との合成処理が必要になる。
これまではPaintPictureメソッドで画像をコピーまたは部分コピーを行ってきたが、このPaintPictureメソッドはコピー元の画像とコピー先の画像を合成してコピーすることができる。ここでは、合成の機能を使ってスプライト処理を行う。
新規フォームを用意して、ピクチャボックス3つ(Picture1,Picture2,Picture3)を配置する。
Form1のプロパティ
Picture 花見.bmp ScaleMode 3 - ピクセル
Picture1〜3共通のプロパティ
Appearance 0 - フラット AutoRedraw True BorderStyle 0 - なし ScaleMode 3 - ピクセル
Picture2のプロパティ
Pictureプロパティで画像を設定してからAutoSizeプロパティをTrueにするとピクチャボックスのサイズは画像に合わされる。画像は48×32ピクセルのサイズとする。
AutoSize True Picture ufo2a.bmp Visible False
Download : ufo2a.bmp (31KB) ←右クリックして「対象をファイルに保存(A)...」を選択する。保存場所はプログラムと同じフォルダとする。
Picture3のプロパティ
Pictureプロパティで画像を設定してからAutoSizeプロパティをTrueにするとピクチャボックスのサイズは画像に合わされる。画像は48×32ピクセルのサイズとする。
AutoSize True Picture ufo2b.bmp Visible False
Download : ufo2b.bmp (31KB) ←右クリックして「対象をファイルに保存(A)...」を選択する。保存場所はプログラムと同じフォルダとする。
実行して、フォームをクリックすると花見の画像の上にUFOの画像が表示されるようにする。プログラムは次の通りである。
・プログラムリスト1
Option Explicit
Private Sub Form_Load()
'合成後のピクチャのサイズを設定
Picture1.Width = Picture2.Width
Picture1.Height = Picture2.Height
End Sub
実行するとPicture1のサイズが元になるUFO画像と同じサイズになる。
Picture1は白色のままである。
Picture1が背景画像、UFO(Picture2と3)のコピー先になる。3つの画像を合成してPicture1にコピーするわけである。
・プログラムリスト2
Option Explicit Private Sub Form_Click() Dim x As Integer, y As Integer, w As Integer, h As Integer x = Picture1.Left 'コピー先の座標 y = Picture1.Top w = Picture1.Width 'コピー先のサイズ h = Picture1.Height '背景(花見)をコピー Picture1.PaintPicture Form1.Image, 0, 0, w, h, x, y, w, h, vbSrcCopy End Sub Private Sub Form_Load() '合成後のピクチャのサイズを設定 Picture1.Width = Picture2.Width Picture1.Height = Picture2.Height End Sub
PaintPictureメソッドの最後にあるvbSrcCopyはコピー元をそのままコピーする指定である。これまでは省略していた。当然ここでも省略してもかまわない。
実行してフォームをクリックすると、Picture1の白色部分に背景の画像がコピーされる。
Picture1には、Picture1が配置(Left,Top)されている部分(Width, Height)をフォーム(Form1)から部分コピーする。
・プログラムリスト3
Private Sub Form_Click() Dim x As Integer, y As Integer, w As Integer, h As Integer x = Picture1.Left 'コピー先の座標 y = Picture1.Top w = Picture1.Width 'コピー先のサイズ h = Picture1.Height '背景(花見)をコピー Picture1.PaintPicture Form1.Image, 0, 0, w, h, x, y, w, h, vbSrcCopy 'マスク画像(picture3)とORで合成 Picture1.PaintPicture Picture3.Image, 0, 0, w, h, 0, 0, w, h, vbSrcPaint '←追加 End Sub
PaintPictureメソッドの最後にあるvbSrcPaintはコピー元(白黒のUFO)とコピー先(花見)の画像をOR演算で合成する。
黒部分は0であり1とOR演算すると1、0とOR演算すると0、というように黒部分は無視される形となる。
白部分は1であり1とOR演算すると1、0とOR演算すると1、というように白部分が優先される形となる。
実行してフォームをクリックすると、白黒UFOの白部分だけが表示される。黒部分、つまりUFOの背景には花見の画像が合成されている。
このような画像(白黒UFO)をマスク画像という。
・プログラムリスト4
Private Sub Form_Click() Dim x As Integer, y As Integer, w As Integer, h As Integer x = Picture1.Left 'コピー先の座標 y = Picture1.Top w = Picture1.Width 'コピー先のサイズ h = Picture1.Height '背景(花見)をコピー Picture1.PaintPicture Form1.Image, 0, 0, w, h, x, y, w, h, vbSrcCopy 'マスク画像(picture3)とORで合成 Picture1.PaintPicture Picture3.Image, 0, 0, w, h, 0, 0, w, h, vbSrcPaint '元画像(picture2)とANDで合成 Picture1.PaintPicture Picture2.Image, 0, 0, w, h, 0, 0, w, h, vbSrcAnd '←追加 End Sub
PaintPictureメソッドの最後にあるvbSrcANDはコピー元(UFO)とコピー先(花見と白黒UFOの合成)の画像をAND演算で合成する。
UFOの背景と花見と白黒UFOの合成画像のUFO部分が白色である。
白部分は1であり1とAND演算すると1、0とAND演算すると0、というように元のデータが優先される形となる。
実行してフォームをクリックすると、UFOが表示される。UFOの背景は透けて見える形となっている。
画像合成(スプライト)処理のまとめ
※ PaintPictureメソッドの最後にあるvbSrcCopyなどはVBの定数である。このほかにも色々な合成の指定がある。VBのヘルプでキーワード「RasterOp 定数」で一覧が表示される。
(3) 画像のコピー V | |
Copyright © 2002 Hiroshi Masuda |