使用VB.NET将bmp图像转换为二进制图像的代码

使用VB.NET将bmp图像转换为二进制图像的代码,vb.net,Vb.net,下面的代码将灰度图像转换为二值图像,但不起作用,没有错误。。。我需要帮助来确定为什么代码不工作…我正在使用vb,net 2012 Dim mp3 As Double mp2 = 0 Dim i, j As Integer Dim img As New Bitmap(600, 600) ' PictureBox2.Cls() For i = 0 To w For j = 0 To h ab(i, j) = 0

下面的代码将灰度图像转换为二值图像,但不起作用,没有错误。。。我需要帮助来确定为什么代码不工作…我正在使用vb,net 2012

    Dim mp3 As Double
    mp2 = 0
    Dim i, j As Integer
    Dim img As New Bitmap(600, 600)
    ' PictureBox2.Cls()
    For i = 0 To w
        For j = 0 To h
            ab(i, j) = 0
            zxc(i, j) = 0
            zxc1(i, j) = 0
            ssc(i, j) = 0
        Next j

    Next i
    For i = 0 To w - 17 Step 16
        For j = 0 To h - 17 Step 16
            mp1 = 0
            For k = i To i + 15
                For l = j To j + 15
                    mp1 = mp1 + imageArray(k, l)
            Next l, k
            mp1 = mp1 / (16 ^ 2)
            For k = i To i + 15
                For l = j To j + 15
                    If imageArray(k, l) >= mp1 Then
                        ssc(k, l) = 255
                    Else
                        ssc(k, l) = 0
                    End If

                    img.SetPixel(k, l, Color.FromArgb(ssc(k, l), ssc(k, l), ssc(k, l)))
            Next l, k
        Next j

        PictureBox2.Refresh()
    Next i
    mp3 = 0 : nd = 1
    For k = 0 To w
        For l = j To h
            mp3 = mp3 + imageArray(k, l)
            nd = nd + 1
    Next l, k
    mp3 = mp3 / nd
    For k = 0 To w
        For l = j To h
            If imageArray(k, l) >= mp3 Then ssc(k, l) = 255 Else ssc(k, l) = 0
                            img.SetPixel(k, l, Color.FromArgb(ssc(k, l), ssc(k, l), ssc(k, l)))
    Next l, k
    mp3 = 0 : nd = 0
    For k = i To w
        For l = 0 To h
            mp3 = mp3 + imageArray(k, l)
            nd = nd + 1
    Next l, k
    mp3 = mp3 / nd
    For k = i To w
        For l = 0 To h
            If imageArray(k, l) >= mp3 Then ssc(k, l) = 255 Else ssc(k, l) = 0
                            img.SetPixel(k, l, Color.FromArgb(ssc(k, l), ssc(k, l), ssc(k, l)))

    Next l, k
    hpp = 0
    PictureBox2.Image = img

End Sub
。。。。。。。加载映像的代码正在工作,但我不知道它是否正确存储了数组的值,如下所示

    Dim ofd As New OpenFileDialog
    ofd.Filter = "Bitmap files (*.bmp)|*.bmp"
    If ofd.ShowDialog = DialogResult.OK Then
        If ofd.FileName <> String.Empty Then
            Me.PictureBox1.Image = Bitmap.FromFile(ofd.FileName)
        End If
    End If
    Dim img As New Bitmap(ofd.FileName)
    Dim imageArray(img.Width, img.Height) As Integer
    Dim i, j As Integer
    Dim k As Double
    For i = 0 To img.Width - 1
        For j = 0 To img.Height - 1
            Dim pixel As Color = img.GetPixel(i, j)
            imageArray(i, j) = pixel.ToArgb()
            z(i, j) = imageArray(i, j)
            k = k + imageArray(i, j)
        Next j
    Next i

End Sub
Dim ofd As New OpenFileDialog
ofd.Filter=“位图文件(*.bmp)|*.bmp”
如果ofd.ShowDialog=DialogResult.OK,则
如果ofd.FileName String.Empty,则
Me.PictureBox1.Image=位图.FromFile(ofd.FileName)
如果结束
如果结束
将img设置为新位图(ofd.FileName)
Dim imageArray(img.Width,img.Height)为整数
作为整数的Dim i,j
把k调成双色
对于i=0至img.宽度-1
对于j=0至惯性高度-1
将像素变暗为颜色=img.GetPixel(i,j)
imageArray(i,j)=pixel.ToArgb()
z(i,j)=图像阵列(i,j)
k=k+imageArray(i,j)
下一个j
接下来我
端接头
试试这个功能

Public Shared Function GetArrayFromImage(image As Image) As Byte()
    If image IsNot Nothing Then
        Dim ic As New ImageConverter()
        Dim buffer As Byte() = DirectCast(ic.ConvertTo(image, GetType(Byte())), Byte())
        Return buffer
    Else
        Return Nothing
    End If
End Function

如果使用适当的变量名,会让一些人更容易理解:(这个方法是用来将彩色图像转换为灰度的吗?如果是的话,你可以简单地将a应用于位图。它非常快,还因为它不使用
.SetPixel()
。为什么使用ToArgb()方法在以下代码中始终返回-1值?请提供帮助。对于i=0到img.Width-1对于j=0到img.Height-1 Dim pixel As Color=img.GetPixel(i,j)imageArray(i,j)=pixel.ToArgb()我更改了我的函数,请尝试