GrayScale変換を行う式は、
Y = 0.299 * R + 0.587 * G + 0.114 * B
で表せます。
24bppのBitmapを8bppのBitmapに変換するとき、
カラーパレットが必要になりますが、カラーパレットの
指定は、
Dim Col(255) As Color
For i As Integer = 0 To 255
Col(i) = Color.FromArgb(i, i, i)
Next
Dim pal As ColorPalette = dBmp.Palette
For i As Integer = 0 To 255
pal.Entries(i) = Col(i)
Next
dBmp.Palette = pal
このような形になります。
パレットの各色のRGB値を同じにし、それを0~255の256段階で作成します。
また、バイト配列を読み取り、書き込む場合には、
24bppのBitmapのバイト配列がBGRの順に並んでいるので、
それぞれのピクセルごとのRGB値(3Byte)からカラー情報を抜き出し、
それを上記式により、1Byteのカラー情報へ変換します。