Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Compare(PictureBox1.Image, PictureBox2.Image)
End Sub
Public Function Compare(ByVal img1_ As Image, ByVal img2_ As Image) As Double
Dim pixelNb As Integer = img1_.Width * img1_.Height
Dim percent As Double = 100
Dim resized_img2_ As Bitmap = ResizeBitmap(CType(img2_, Bitmap), img1_.Width, img1_.Height)
For i As Integer = 0 To img1_.Width - 1
For j As Integer = 0 To img1_.Height - 1
percent -= ColorCompare((CType(img1_, Bitmap)).GetPixel(i, j), (CType(resized_img2_, Bitmap)).GetPixel(i, j)) / pixelNb
Next
Next
Return percent
End Function
Public Function ResizeBitmap(ByVal b As Bitmap, ByVal nWidth As Integer, ByVal nHeight As Integer) As Bitmap
Dim result As Bitmap = New Bitmap(nWidth, nHeight)
Using g As Graphics = Graphics.FromImage(CType(result, Image))
g.DrawImage(b, 0, 0, nWidth, nHeight)
End Using
Return result
End Function
Public Function ColorCompare(ByVal c1 As Color, ByVal c2 As Color) As Double
Return Double.Parse((Math.Abs(c1.B - c2.B) + Math.Abs(c1.R - c2.R) + Math.Abs(c1.G - c2.G)).ToString()) * 100 / (3 * 255)
End Function
在这一行中给出错误
Return Double.Parse((Math.Abs(c1.B - c2.B) + Math.Abs(c1.R - c2.R) +
Math.Abs(c1.G - c2.G)).ToString()) * 100 / (3 * 255)
c1.B 返回一个字节。字节的值为 0-255 并且是无符号的,因此它不能保存负值。
Dim a As Byte = 200
Dim b As Byte = 201
Dim x = a - b
导致相同的溢出错误。更改为整数可避免该错误。演员似乎没有必要,因为它正在扩大(无数据丢失)。
Dim a As Byte = 200
Dim b As Byte = 201
Dim c As Integer = a
Dim d As Integer = b
Dim x = c - d
将颜色字节更改为整数,然后重试。
Dim g, h, i, j, k, l As Integer
g = c1.B
h = c2.B
i = c1.R
j = c1.R
k = c1.G
l = c1.G
Dim result As Double = CDbl(Math.Abs(g - h) + Math.Abs(i - j) + Math.Abs(k - l)) * 100 / (3 * 255)
Return result
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句