パソコン活用研究BASIC&VB&EXCEL達人の道

画像の色処理 モノクロ画像に変換
(Visual Basic 4〜6対象)

*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・
Visual Basicを使った画像の色処理の基本として、前回は、読み込んだ画像(Bitmap)のある点のRGB値
の取得をやってみました(RGB値の取得)。今回は、画像のグレースケール化(モノクロ画像に変換)をやって
みます。
ちなみに、今回紹介する方法は、Visual Basic4〜6が対象です。
*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・

1 YIQ方式

今回は、カラー写真を白黒写真にしてしまおうと思います。彩度をなくして明度だけ、すなわち
グレースケール(256階調の灰色だけ)にしてしまおうというわけです。

その方法ですが、色を表す方法でYIQという方式があります。TVのカラー放送で使われる方式で、Yが明るさ
を表します。RGBとYIQの関係は以下の式になります。

Y = 0.30R + 0.59G + 0.11B
I = 0.60R - 0.28G - 0.32B
Q = 0.21R - 0.52G + 0.31B

取得したRGB値を上の式でYIQに変換し、
このYIQ方式の明るさYだけを使い、RGB(Y,Y,Y)とすると明るさの違う灰色だけの画像にすることができます。

作成しようとしている画像変換ソフトの[グレースケール]ボタンで呼び出されるのが、そのグレースケール化を行う
プロシージャ(Private Sub Command3_Click())になります。今回はそこだけ説明してみます。



2 グレースケール化
以下が、そのグレースケール化を行うプロシージャです。

Private Sub Command3_Click()
Dim r, g, b, y As Long
w = Picture1.Width
h = Picture1.Height
For i = 1 To w
For j = 1 To h

'   @RGB値の取得
color = Picture1.Point(i, j)
 
'   Ar,g,bをyに変換
r = (&HFF And color)
g = (&HFF And (color \ &H100))
b = (&HFF And (color \ &H10000))
y = 0.3 * r + 0.59 * g + 0.11 * b

'   B変換した灰色で塗る
Picture1.PSet (i, j), RGB(y, y, y)
Next j
Next i
End Sub

画像の左上から右下まで順番にpoit関数でRGB値を取得し(上記@)、yに変換(上記A)したあと、
RGB(y,y,y)で灰色に置き換え(上記B)ています。
やっていることはシンプルです。

グレースケール化してみたサンプル。



Top page | Visual Basic&Excel活用研究目次