这个一下子搞不出来的,就算搞出来了也不会轻易给你的!
给你丢些板砖吧:
Private Sub Command1_Click()
Dim i As Long, j As Long, k As Long
Dim Col As Long, HB As Long
Dim JS() As Long '3阶色
Dim Sel(255) As Byte
Dim JST3() As Long '3阶色图层
Dim DD() As Long '圆环
Dim ExitWhl As Boolean
Dim X As Long, Y As Long '圆心坐标
Pic.AutoRedraw = True
Pic.AutoSize = True
Pic.ScaleMode = 3
Pic.Picture = LoadPicture("E:\1.bmp")
Pic.Refresh
j = 0
ReDim JS(0)
For i = 0 To 254 '生成3阶色
If i Mod 85 = 0 Then
j = i + 1
JS(UBound(JS)) = j
ReDim Preserve JS(UBound(JS) + 1)
End If
Sel(i) = j
Next
Sel(255) = j
ReDim JST3(Pic.ScaleWidth, Pic.ScaleHeight, 2)
For i = 0 To Pic.ScaleWidth
For j = 0 To Pic.ScaleHeight
Col = Pic.Point(i, j)
Col = (Col And &HFF0000) / 256 / 256 '转为黑白
HB = Sel(Col) '转为3阶色
For k = 0 To UBound(JS) - 1
If JS(k) = HB Then JST3(i, j, k) = HB: Exit For
Next
Col = RGB(HB, HB, HB) '显示3阶色图像
Pic.PSet (i, j), Col
Next
Next
For i = 0 To UBound(JS) - 1
ReDim DD(1, 3)
ExitWhl = False
For j = 0 To Pic.ScaleWidth '左面
For k = 0 To Pic.ScaleHeight
If JST3(j, k, i) > 0 Then
DD(0, 0) = j
DD(1, 0) = k
ExitWhl = True
Exit For
End If
Next
If ExitWhl Then Exit For
Next
ExitWhl = False
For j = 0 To Pic.ScaleHeight '顶面
For k = 0 To Pic.ScaleWidth
If JST3(k, j, i) > 0 Then
DD(0, 1) = k
DD(1, 1) = j
ExitWhl = True
Exit For
End If
Next
If ExitWhl Then Exit For
Next
ExitWhl = False
For j = Pic.ScaleWidth To 0 Step -1 '右面
For k = 0 To Pic.ScaleHeight
If JST3(j, k, i) > 0 Then
DD(0, 2) = j
DD(1, 2) = k
ExitWhl = True
Exit For
End If
Next
If ExitWhl Then Exit For
Next
ExitWhl = False
For j = Pic.ScaleHeight To 0 Step -1 '底面
For k = 0 To Pic.ScaleWidth
If JST3(k, j, i) > 0 Then
DD(0, 3) = k
DD(1, 3) = j
ExitWhl = True
Exit For
End If
Next
If ExitWhl Then Exit For
Next
If Abs(DD(1, 0) - DD(1, 2)) < 20 _
And Abs(DD(0, 1) - DD(0, 3)) < 20 Then '判断圆环
X = (DD(0, 2) - DD(0, 0)) / 2 + DD(0, 0)
Y = (DD(1, 3) - DD(1, 1)) / 2 + DD(1, 1)
Exit For
End If
Next
Pic.PSet (X, Y), vbRed
MsgBox "圆心是:" & X & "," & Y
Pic.Refresh
'重校验部分的代码就不给你了,秘密!嘘!
End Sub
如果只是黑白的,那其他的地方也有黑色要怎么区分?最重要的是分析出是圆并且找到圆心位置了