画像の色処理 RGB値の取得
(Visual Basic 4〜6対象)
*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・
Visual Basicを使った画像の色処理の基本として、まず、読み込んだ画像(Bitmap)のある点のRGB値
の取得をやってみたいと思います。RGB値が取得できれば、画像のグレースケール化やその他の加工
などもいろいろできるようになります。
ちなみに、今回紹介する方法は、Visual Basic4〜6が対象です。
*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・
0 画像変換ソフト
最終的には、ビットマップ(Bitmap)画像を読み込んで、そのカラー画像をグレースケール(256段階)や、
白黒(2色)化するような画像変換ソフトを作ってみたいと思います。下の図1のようなものです。
今回のテーマである、RGB値の取得に関連した部分だけ説明しておきます。
Picture1に読み込んだ画像を表示します。
Picture1上でマウスをクリックすると、クリックした点のRGB値を取得して、赤、緑、青の3成分に分解し、
その各成分の値をTextBox1〜TextBox3に表示します。またPicture2にその色を拡大して表示します。
(図1)
1 RGB値の取得
Visual Basicには、Picture上のある点(x,y)のRGB値を取得するのにPointという便利な関数があります。
取得された値はlong型の整数になります。従って、以下のように記述して変数colorにRGB値を取得します。
Dim color As Long
color = Picture1.Point(x, y)
なお、このPoint関数はPicture上だけでなく、Form上でも使えます。 (例) Form1.Point(x,y)
またScalemodeは「ピクセル」にしておかないと正確に動作しません。
Formのグラフィックメソッドで説明しましたが、RGB値は以下のような様式になります。
&Hbbggrr bb, gg, rr は青、緑、赤の色の成分でそれぞれ00〜FFの値
従って、RGB値の入った変数colorから赤、緑、青の成分を取り出すには以下のようにすれば、うまく
いきます。
赤: &HFF And color
緑: &HFF And (color \ &H100)
青: &HFF And (color \ &H10000)
今回のプログラムのうち該当する部分だけ抜粋しておきます。
RGB値を変数colorに取得し、Picture2に拡大表示するとともに、各成分を取り出してTextBox1〜TextBox3
に表示させています。
Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) Dim color As Long color = Picture1.Point(x, y) Picture2.BackColor = color Text1.Text = Str$(&HFF And color) Text2.Text = Str$(&HFF And (color \ &H100)) Text3.Text = Str$(&HFF And (color \ &H10000)) End Sub |
試しに腕のあたりをクリックしてみた例です。色の成分は赤208 緑154 青114 になっています。