0

こちらで質問するのは初めてなので、よろしくお願いします。

これは、Visual Basic 2010 で作成している小さなゲーム用です。クリックすると暗くなる画像があります。後で元の画像と同じようにコードで認識されるようにする必要があります。

画像を暗くするコードは次のとおりです。

Sub WaterDarken(ByVal picTarget As PictureBox)
    Dim pic As New Bitmap(picTarget.Image)
    Dim intRed As Integer
    Dim intGreen As Integer
    Dim intBlue As Integer
    For x As Integer = 0 To picTarget.Image.Width - 1
        For y As Integer = 0 To picTarget.Image.Height - 1
            Dim intDarkenedColor As Color = pic.GetPixel(x, y)
            If intDarkenedColor.R - 50 <= 255 And intDarkenedColor.R - 50 >= 0 Then
                intRed = intDarkenedColor.R - 50
            Else
                intRed = 0
            End If
            If intDarkenedColor.G - 50 <= 255 And intDarkenedColor.G - 50 >= 0 Then
                intGreen = intDarkenedColor.G - 50
            Else
                intGreen = 0
            End If
            If intDarkenedColor.B - 50 <= 255 And intDarkenedColor.B - 50 >= 0 Then
                intBlue = intDarkenedColor.B - 50
            Else
                intBlue = 0
            End If
            intDarkenedColor = Color.FromArgb(225, intRed, intGreen, intBlue)
            pic.SetPixel(x, y, intDarkenedColor)
        Next
    Next
    picTarget.Image = pic
End Sub

元の画像と暗くした画像を比較するコードは次のとおりです。

  Function IsDarkened(ByRef source As Image, ByRef darkenedSource As Image) As Boolean
    Dim pic As New Bitmap(source)
    Dim pic2 As New Bitmap(darkenedSource)
    Dim intRed As Integer
    Dim intGreen As Integer
    Dim intBlue As Integer
    For x As Integer = 0 To pic.Width - 1
        For y As Integer = 0 To pic.Height - 1
            Dim darkened As Color = pic.GetPixel(x, y)
            If darkened.R - 50 <= 255 And darkened.R - 50 >= 0 Then
                intRed = darkened.R - 50
            Else
                intRed = 0
            End If
            If darkened.G - 50 <= 255 And darkened.G - 50 >= 0 Then
                intGreen = darkened.R - 50
            Else
                intGreen = 0
            End If
            If darkened.B - 50 <= 255 And darkened.B - 50 >= 0 Then
                intBlue = darkened.B - 50
            Else
                intBlue = 0
            End If
            darkened = Color.FromArgb(255, intRed, intGreen, intBlue)
            pic.SetPixel(x, y, darkened)
        Next
    Next
    For x = 0 To pic.Width - 1
        For y = 0 To pic.Height - 1
            If pic.GetPixel(x, y) <> pic2.GetPixel(x, y) Then
                Return False
            End If
        Next
    Next
    Return True
End Function

ただし、何かが機能しておらず、画像が同じように認識されていません。これはしばらくの間私を悩ませてきました。どなたかお手伝いいただける方がいらっしゃいましたら、よろしくお願いします!ありがとう。

4

1 に答える 1

1

Color.FromArgb() を使用する場合、ピクセルを 2 つの異なるアルファ値に設定します。

intDarkenedColor = Color.FromArgb( 225 , intRed, intGreen, intBlue)

対。

darkened = Color.FromArgb( 255 , intRed, intGreen, intBlue)

RGB が同じでも不透明度が異なると、常に異なるイメージになります。

于 2012-05-14T18:46:16.363 に答える