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