3

嘿,我可以通过设置像素属性设置图像的颜色,但是当我设置条件 getPixel 时,不会发生错误,但程序卡住了

我把代码放在下面请检查它给我解决方案:

    Dim b As Bitmap = New Bitmap("D:\test.bmp")

' Make Image Indexed

        Dim nii As New Bitmap(b.Width, b.Height,
System.Drawing.Imaging.PixelFormat.Format32bppPArgb)
        For y As Integer = 0 To nii.Height - 1
            For x = 0 To nii.Width - 1
                Dim cw As New Color
                cw = Color.Black
                If nii.GetPixel(x, y) = cw Then
                    nii.SetPixel(x, y, Red)
                End If

            Next
        Next
        PictureBox1.Image = FromFile("D:\test.bmp")
        PictureBox2.Image = nii

如果我删除 getPixel 那么程序可以工作,但完整的图像颜色将是红色的。

4

2 回答 2

5

您需要比较ARGB颜色的值

Dim cw As New Color
cw = Color.Black
dim curPixColor as Color = b.GetPixel(x, y)
If curPixColor.ToArgb = cw.ToArgb Then
    nii.SetPixel(x, y, Color.Red)
End If

或者你应该使用相等运算符

Dim cw As New Color
cw = Color.Black
dim curPixColor as Color = b.GetPixel(x, y)
If Color.op_Equality(curPixColor, cw) Then
    nii.SetPixel(x, y, Color.Red)
End If

参考: http: //msdn.microsoft.com/en-us/library/system.drawing.color.op_equality (v=vs.110).aspx

编辑:当您从 bmp 获取像素时,不支持透明度。所以你的比较颜色应该是

cw = Color.FromArgb(0,0,0,0)

Edit2:您正在阅读nii您应该阅读的内容b

dim curPixColor as Color = b.GetPixel(x, y)

完整的代码应该类似于 (tested)

    Dim b As Bitmap = New Bitmap("D:\test.bmp")

    ' Make Image Indexed

    Dim nii As New Bitmap(b.Width, b.Height, System.Drawing.Imaging.PixelFormat.Format32bppPArgb)
    For y As Integer = 0 To nii.Height - 1
        For x = 0 To nii.Width - 1
            Dim cw As New Color
            cw = Color.Black
            Dim curPixColor As Color = b.GetPixel(x, y)
            If curPixColor.ToArgb() = cw.ToArgb() Then
                nii.SetPixel(x, y, Color.Red)
            Else
                nii.SetPixel(x, y, curPixColor)
            End If
        Next
    Next
    PictureBox1.Image = Image.FromFile("D:\test.bmp")
    PictureBox2.Image = nii
于 2013-12-02T10:46:05.547 回答
0

我有一个类似的问题,但比较 RGB 值有效。谢谢!

实际上,您可以这样做,而不是太多变量:

If b.GetPixel(x,y).ToArgb() = Color.Black.ToArgb() then......
于 2019-07-19T13:47:32.097 回答