GrayScale変換を行う式は、
Y = 0.299 * R + 0.587 * G + 0.114 * B
で表せます。
今回は、かなり手抜きのグレースケール変換を行います。
事前準備
・フォームにピクチャーボックスを貼り付け、DockプロパティをFillにする。
Public Class Form1
Private sBmp As Bitmap = New Bitmap(“C:\aaa.jpg”)
Private Sub Picture_Box(ByVal sender As Object, ByVal e As PaintEventArgs) Handles PictureBox1.Paint
e.Graphics.DrawImage(sBmp, 0, 0)
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
GrayScale(sBmp)
PictureBox1.Invalidate()
End Sub
Public Sub GrayScale(ByRef srcBmp As Bitmap)
Dim col As Color
Dim int As Integer
For y As Integer = 0 To srcBmp.Height – 1
For x As Integer = 0 To srcBmp.Width – 1
col = srcBmp.GetPixel(x, y)
int = Math.Min(col.R * 0.299 + col.G * 0.587 + col.B * 0.114, 255)
srcBmp.SetPixel(x, y, Color.FromArgb(int, int, int))
Next
Next
End Sub
End Class
こんな感じになります。
LockBitsを使用したほうが、圧倒的に速いとは思いますが、
シンプルに、GetPixelとSetPixelにて行いました。
時間があったら、LockBitsバージョンのグレースケール変換も行います。
関連記事
・GrayScaleについて
・GrayScale変換を行う(LockBitsバージョン)