具体算法请参看《vb.net 教程 5-13 图像处理之像素处理 6》
黑白:
- '黑白1
- 'http://blog.csdn.net/uruseibest
- Private Sub btn2Color1_Click(sender As Object,e As EventArgs) Handles btn2Color1.Click
- Dim destImg As New Bitmap(sourceImg.Width,sourceImg.Height)
- Dim sourceData As BitmapData = sourceImg.LockBits(New Rectangle(0,sourceImg.Width,sourceImg.Height),ImageLockMode.ReadOnly,PixelFormat.Format24bppRgb)
- Dim destData As BitmapData = destImg.LockBits(New Rectangle(0,ImageLockMode.WriteOnly,PixelFormat.Format24bppRgb)
- Dim pSource As IntPtr = sourceData.Scan0
- Dim allBytes As Integer = sourceData.Stride * sourceData.Height
- Dim rgbvalues() As Byte
- ReDim rgbvalues(allBytes - 1)
- Marshal.Copy(pSource,rgbvalues,allBytes)
- Dim pos As Integer = 0
- Dim R,G,B As Integer
- Dim avgValue As Integer
- For j As Integer = 0 To sourceData.Height - 1
- For i As Integer = 0 To sourceData.Width - 1
- B = rgbvalues(pos)
- G = rgbvalues(pos + 1)
- R = rgbvalues(pos + 2)
- avgValue = (B + G + R) / 3
- If avgValue >= 128 Then avgValue = 255 Else avgValue = 0
- rgbvalues(pos) = avgValue
- rgbvalues(pos + 1) = avgValue
- rgbvalues(pos + 2) = avgValue
- pos = pos + 3
- Next
- pos = pos + sourceData.Stride - sourceData.Width * 3
- Next
- Dim pDest As IntPtr = destData.Scan0
- Marshal.Copy(rgbvalues,pDest,allBytes)
- sourceImg.UnlockBits(sourceData)
- destImg.UnlockBits(destData)
- picDest.Image = destImg
- End Sub
- '黑白2
- 'http://blog.csdn.net/uruseibest
- Private Sub btn2Color2_Click(sender As Object,e As EventArgs) Handles btn2Color2.Click
- Dim destImg As New Bitmap(sourceImg.Width,B As Integer
- Dim HistGram(255) As Integer
- For j As Integer = 0 To sourceData.Height - 1
- For i As Integer = 0 To sourceData.Width - 1
- R = rgbvalues(pos + 2)
- HistGram(R) += 1
- pos = pos + 3
- Next
- pos = pos + sourceData.Stride - sourceData.Width * 3
- Next
- Dim threshold As Integer
- Dim allSum,allCount As Integer
- For k As Integer = 0 To 255
- allCount += HistGram(k)
- allSum += k * HistGram(k)
- Next
- threshold = allSum / allCount
- pos = 0
- For j As Integer = 0 To sourceData.Height - 1
- For i As Integer = 0 To sourceData.Width - 1
- R = rgbvalues(pos + 2)
- If R >= threshold Then R = 255 Else R = 0
- rgbvalues(pos) = R
- rgbvalues(pos + 1) = R
- rgbvalues(pos + 2) = R
- pos = pos + 3
- Next
- pos = pos + sourceData.Stride - sourceData.Width * 3
- Next
- Dim pDest As IntPtr = destData.Scan0
- Marshal.Copy(rgbvalues,allBytes)
- sourceImg.UnlockBits(sourceData)
- destImg.UnlockBits(destData)
- picDest.Image = destImg
- End Sub
学习更多vb.net知识,请参看 vb.net 教程 目录