订阅专栏
 版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。
具体算法请参看《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, 0, sourceImg.Width, sourceImg.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb)
         Dim destData As BitmapData = destImg.LockBits(New Rectangle(0, 0, sourceImg.Width, sourceImg.Height), 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, 0, 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, 0, 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, sourceImg.Height)
         Dim sourceData As BitmapData = sourceImg.LockBits(New Rectangle(0, 0, sourceImg.Width, sourceImg.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb)
         Dim destData As BitmapData = destImg.LockBits(New Rectangle(0, 0, sourceImg.Width, sourceImg.Height), 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, 0, allBytes)
  
         Dim pos As Integer = 0
         Dim R, G, 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, 0, pDest, allBytes)
  
         sourceImg.UnlockBits(sourceData)
         destImg.UnlockBits(destData)
  
         picDest.Image = destImg
     End Sub
学习更多vb.net知识,请参看vb.net教程目录
 
 ————————————————
 版权声明:本文为CSDN博主「VB.Net」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

                

















