§4 画像(ピクチャコントロール)の利用 VB6 | |
(3) 画像のコピー U |
2. 画像の部分コピー
画像の一部分を座標で指定してコピーする。
新規フォームを用意して、ピクチャボックス2つ(Picture1, Picture2)、テキストボックス1つ(Text1)とコマンドボタン1つ(Command1)をハテ位置する。プロパティは次の通りである。
Pictre1のプロパティ
AutoRedraw True Height 540 Left 240 Width 540 Top 240
Picture2のプロパティ画像は160×64ピクセルのサイズとする。1つの数字は32×32ピクセルで描く。
AutoRedraw True Picture suuji.bmp Visible False
Download : suuji.bmp (31KB) ←右クリックして「対象をファイルに保存(A)...」を選択する。保存場所はプログラムと同じフォルダとする。
Text1とCommand1のプロパティは特に設定する必要はない。Picture2とともに、図を参考に適当なサイズで配置する。
テキストボックスに数字を入力し、ボタンをクリックすると同じ数字がPicture1に表示される。すなわち、Picture2の画像の一部をPicture1にコピーするのである。 プログラムは次の通りである。
・プログラムリスト
Option Explicit Private Sub Command1_Click() Dim dat As Integer Dim x As Integer, y As Integer, sc As Integer dat = Val(Left(Text1.Text, 1)) '先頭の1文字を数値として取り出す sc = 32 * 15 '#1 1つの数字の画像サイズ 32ピクセル If dat >= 0 And dat <= 9 Then x = (dat Mod 5) * sc '#2 Picture2における座標計算 y = Int(dat / 5) * sc Picture1.PaintPicture Picture2.Picture, 0, 0, sc, sc, x, y, sc, sc '#3 コピー End If End Sub
#1 1ピクセルは15twipになるので、ピクセルをtwipに変換した値を変数scに記憶させている。画像は正方形なので1辺分だけ計算している。
#2 例えば、7(=dat) を入力したとき、
変数xは、(dat Mod 5)=2、2*sc=64*15
変数yは、Int(dat / 5)=1、1*sc=32*15
となる。取り出したい数字画像を四角形と考えると、その左上の角の座標が計算できる。
#3 ここが部分コピーのメインである。PaintPictureメソッドを使う。
コピーする部分は四角形(矩形)の座標と大きさで指定する。
Picture1.PaintPicture コピー先 |
Picture2.Picture, コピー元 |
x1,y1,w1,h1, コピー先 |
x2,y2,w2,h2 コピー元 |
コピー元(Picture2)はpictureプロパティでもImageプロパティでもよい。ただし、画像にグラフィックメソッドなどで描画している場合は、Imageプロパティを使う。
実行結果
※ 画像サイズの単位をいちいちピクセルからtwipに変換するのは面倒である。
Picture1とPicture2のScaleModeプロパティを“3 - ピクセル”に設定しておくと変更のための計算(×15)をしなくてもよくなる。
3. 画像の拡大・縮小部分コピー
PaintPictureメソッドを使うと、コピーするときにコピー先の幅(width)と高さ(height)を変えると拡大・縮小ができる。
先の部分コピーのプログラムの#3 PaintPictureメソッドの行を次のように変更するとPicture1に1/4に縮小された画像が表示される。
Picture1.PaintPicture Picture2.Image, 0, 0, sc / 2, sc / 2, x, y, sc, sc
コピー先の幅と高さを1/2に変更している。
実行結果
次のようにコピー先の幅と高さを2倍するとPicture1に4倍になった画像の一部分が表示される。
Picture1.PaintPicture Picture2.Image, 0, 0, sc * 2, sc * 2, x, y, sc, sc
実行結果
スピードが要求されるときは、API関数を利用するとよい。
(3) 画像のコピー U | |
Copyright © 2002 Hiroshi Masuda |