1,486
社区成员
发帖
与我相关
我的任务
分享
Dim n As Long, k As Single, b As Long
b = 100 '不必每个点都比较,跳着选取
For y = 0 To Picture1.ScaleHeight - 1
For x = 0 To Picture1.ScaleWidth - 1 Step b
'颜色接近,误差正负5
If Abs(Picture1.Point(x, y) - Picture2.Point(x, y)) < 5 then
n = n + 1
k = Round(n / (Picture1.ScaleHeight * Picture1.ScaleWidth), 4)
If k >= 0.1 / b Then
Label1.Caption = "颜色相似度:" & Round(k * 100 * b, 2) & "%"
DoEvents
End If
End If
Next x
Next y
MsgBox "比较完成,颜色相似度:" & Round(k * 100 * b, 2) & "%"
Private Sub tmrP_Timer()
Dim lngP As Long
Dim bytOneRed As Integer
Dim bytOneGreen As Integer
Dim bytOneBlue As Integer
Dim bytTwoRed As Integer
Dim bytTwoGreen As Integer
Dim bytTwoBlue As Integer
Dim bolP As Boolean
dim lngW as long
dim lngH as long
On Error GoTo errSub
'picS:源图像
'picOne:第一副截图
'picTwo:第二副截图
lngW=picS.Width
lngH=picS.Height
lngP = BitBlt(picTwo.hdc, 0, 0, lngW, lngH, picOne.hdc, 0, 0, SRCCOPY)
lngP = BitBlt(picOne.hdc, 0, 0, lngW, lngH, picS.hdc, 0, 0, SRCCOPY)
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
lngP = GetPixel(picOne.hdc, 50, 50)
txtColorOne.Text = lngP
bytOneRed = lngP Mod &H100
bytOneGreen = (lngP \ &H100) Mod &H100
bytOneBlue = lngP \ &H10000
lngP = GetPixel(picTwo.hdc, 50, 50)
txtColorTwo.Text = lngP
bytTwoRed = lngP Mod &H100
bytTwoGreen = (lngP \ &H100) Mod &H100
bytTwoBlue = lngP \ &H10000
txtRed.Text = Abs(bytOneRed - bytTwoRed)
txtGreen.Text = Abs(bytOneGreen - bytTwoGreen)
txtBlue.Text = Abs(bytOneRed - bytTwoRed)
If Abs(bytOneRed - bytTwoRed) < 10 And Abs(bytOneGreen - bytTwoGreen) < 10 And Abs(bytOneBlue - bytTwoBlue) < 10 Then
Me.Caption = "图像相似"
else
Me.Caption = "图像不相似"
End If
Exit Sub
errSub:
End Sub