LONG型の色をRGBに分解する
PointメソッドやAPIのGetPixel、それとGetDIBitsなどで取得したLONG型の色は、
このまま編集しようとすると大変です。
普通はこれらをRGBに分解して加工します。
それでは分解の方法に入りましょう。
まず、LONG型の白を16進数であらわすと、
&HFFFFFF
になります。これは、
&H (青)FF (緑)FF (赤)FF
のようになっていますので、分解することが出来ます。
次のコードは、フォームがロードしたときに、左上の色を分解し、表示します。
' 赤の取得
Private Function GetRed(ByVal color As Long) As Byte
' &HFFとANDすることで下位バイトを取得。
GetRed = &HFF& And color
End Function
' 緑の取得
Private Function GetGreen(ByVal color As Long) As Byte
' ANDした結果を256で除算し、中間バイトを取得する。
GetGreen = (&HFF00& And color) \ 256
End Function
' 青の取得
Private Function GetBlue(ByVal color As Long) As Byte
' ANDした結果を65536で除算し、上位バイトを取得する。
GetBlue = (&HFF0000 And color) \ 65536
End Function
Private Sub Form_Load()
Dim col As Long
Form1.AutoRedraw = True
' フォームの左上の色を取得。
col = Form1.Point(0, 0)
' 色を分解して表示。
Print GetRed(col)
Print GetGreen(col)
Print GetBlue(col)
Print GetBlue(&HFF)
End Sub
BACK