-1

私のコードでは、特定の座標のピクセルの色を取得し、その色が別の色と一致するかどうかを確認します。それはうまく機能します。今、それが色の10程度の色合いまたは一定量の色合いの範囲内で一致するかどうかを確認できるようにしたいと考えています. 私はこれを行う方法がわかりません。コードは次のとおりです。

     Public Function GetPixelColor(ByVal x As Integer, ByVal y As Integer) As Color

    Dim sz As New Size(1, 1)
    Dim c As Color

    Using bmp As New Bitmap(1, 1)
        Using g As Graphics = Graphics.FromImage(bmp)

            g.CopyFromScreen(New Point(x, y), Point.Empty, sz)
            c = bmp.GetPixel(0, 0)

        End Using
    End Using

    Return c

End Function

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    Dim fb As Color = GetPixelColor(TextBox1.Text, TextBox2.Text)
    If fb.ToArgb() = TextBox3.Text Then
        MessageBox.Show("Rock on dude")
    End If
End Sub
4

2 に答える 2

1

使用している言語はわかりませんが、色の値の差の絶対値を計算する必要があるようです。

疑似コード:

if( Abs(color1 - color2) > 10.0 )
  // do something
于 2012-11-22T23:34:02.733 に答える
0

このような関数を作成し、両方の色で呼び出します。

Private Function CompareColors(ByVal Color1 As Color, ByVal Color2 As Color) As Boolean
    If Color1.ToArgb = Color2.ToArgb Then
        'perfect match
        Return True
    ElseIf Asc(Color1.R) > Asc(Color2.R) - 10 AndAlso Asc(Color1.R) < Asc(Color2.R) + 10 Then
        ' red is wrong
        Return False
    ElseIf Asc(Color1.G) > Asc(Color2.G) - 10 AndAlso Asc(Color1.G) < Asc(Color2.G) + 10 Then
        ' green is wrong
        Return False
    ElseIf Asc(Color1.B) > Asc(Color2.B) - 10 AndAlso Asc(Color1.B) < Asc(Color2.B) + 10 Then
        ' blue is wrong
        Return False
    ElseIf Asc(Color1.A) > Asc(Color2.A) - 10 AndAlso Asc(Color1.A) < Asc(Color2.A) + 10 Then
        ' alpha is wrong
        Return False
    Else
        Return True
    End If
End Function
于 2012-11-22T23:43:39.327 に答える