GrayScale変換を行う

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バージョン)



システム開発のためのVB.NETプログラミング関係一覧に戻る


グレースケールのGoogle検索結果