VB6・VBA関数メモ:RGB関数

RGB関数についてメモしておきます。

この関数はR(赤),G(緑),B(青)から色のRGB値を取得することができます。
※.NETみたいに透過度の指定はできません。

RGB値は1〜8bitがR(赤)9〜16bitがG(緑)17〜24bitがB(青)として計算されているようです。
00000000 00000000 00000000

ついでに下記の応用例にRGB値からR(赤),G(緑),B(青)をそれぞれ取得する関数も紹介しておきます。
16進数と論理積(AND)を使えば結構簡単に作ることができます。


概要

RGB(Red As Integer, Green As Integer, Blue As Integer) As Long
機能 R(赤),G(緑),B(青)から色のRGB値を返す
引数 Red R(赤)の割合
(0〜255の整数)
Integer型
Green G(緑)の割合
(0〜255の整数)
Integer型
Blue B(青)の割合
(0〜255の整数)
Integer型
戻り値 RGB値 Long型


使用例

説明 記述例 出力
赤、緑、青の割合からRGB値を取得 RGB(50, 100, 150) 9856050


動作検証

説明 記述例 出力
各引数は255を超えた場合は
255として扱われる
RGB(1000, 1000, 1000) 16777215
RGB(255, 255, 255) 16777215
各引数が0未満の場合はエラー RGB(-1, 0, 0) エラー
RGB(0, -1, 0) エラー
RGB(0, 0, -1) エラー
たぶん関数内部はこんな感じ
※あくまで予想ですが
Function RGB(Red   As Integer, _
             Green As Integer, _
             Blue  As Integer) As Long

Dim R As Integer
Dim G As Integer
Dim B As Integer

R = Red
R = IIF(R < &H00, &H00, R)
R = IIF(R > &HFF, &HFF, R)

G = Green
G = IIF(G < &H00, &H00, G)
G = IIF(G > &HFF, &HFF, G)

B = Blue
B = IIF(B < &H00, &H00, B)
B = IIF(B > &HFF, &HFF, B)

RGB = (R * 2 ^ 0) + (G * 2 ^ 8) + (B * 2 ^ 16)

End Function


応用例

説明 記述例 出力
RGB値からR(赤)を取得
'RGB値からR(赤)を取得
Function GetRed(RGBVal As Long) As Integer

GetRed = (RGBVal AND CLng("&H0000FF")) / (2 ^ 0)

End Function
GetRed(RGB(50, 100, 150)) 50
RGB値からG(緑)を取得
'RGB値からG(緑)を取得
Function GetGreen(RGBVal As Long) As Integer

GetGreen = (RGBVal AND CLng("&H00FF00")) / (2 ^ 8)

End Function
GetGreen(RGB(50, 100, 150)) 100
RGB値からB(青)を取得
'RGB値からB(青)を取得
Function GetBlue(RGBVal As Long) As Integer

GetBlue = (RGBVal AND CLng("&HFF0000")) / (2 ^ 16)

End Function
GetBlue(RGB(50, 100, 150)) 150


コメント
コメントする








    
この記事のトラックバックURL
トラックバック