§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にするとピクチャボックスのサイズは画像に合わされる。
  AutoSize   True
Picture ufo2a.bmp    
Visible False
 画像は48×32ピクセルのサイズとする。
 Download : ufo2a.bmp (31KB)  ←右クリックして「対象をファイルに保存(A)...」を選択する。保存場所はプログラムと同じフォルダとする。
 
Picture3のプロパティ
 Pictureプロパティで画像を設定してからAutoSizeプロパティをTrueにするとピクチャボックスのサイズは画像に合わされる。
  AutoSize   True
Picture ufo2b.bmp    
Visible False
 画像は48×32ピクセルのサイズとする。
 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 

 

 

inserted by FC2 system