怎么“最快”找出图象里颜色重复次数最大的点?VB codePrivate Declare Function GetTickCount Lib kernel32
怎么“最快”找出图象里颜色重复次数最大的点?
- VB code
Private Declare Function GetTickCount Lib "kernel32" () As LongPrivate Type RGBQUAD Blue As Byte Green As Byte Red As Byte Reserved As ByteEnd TypePrivate lWidth&, lHeight&Private p() As RGBQUADPrivate Sub Command1_Click() Dim v() As Long Randomize lWidth = 300: lHeight = 300 ReDim p(1 To lWidth, 1 To lHeight) For j = 1 To lHeight For i = 1 To lWidth p(i, j).Red = Fix(Rnd * 256) p(i, j).Blue = Fix(Rnd * 256) p(i, j).Green = Fix(Rnd * 256) Next Next '如何写?把数量最大,和数量第2,第3这3个点的颜色放进v()里就行了End Sub
不能用创立一个超大数组的办法,最效率的办法是什么?怎么写?
[解决办法]
计数的方法很多,例如数据库。建一个数据库表 points,字段为 Red(Byte), Blue(Byte), Green(Byte), Count(Long).
For j = 1 To lHeight
For i = 1 To lWidth
p(i, j).Red = Fix(Rnd * 256)
p(i, j).Blue = Fix(Rnd * 256)
p(i, j).Green = Fix(Rnd * 256)
Set rs = cn.Execute("SELECT * FROM pints WHERE Red =" & p(i, j).Red & " AND Blue = " & p(i, j).Blue & " AND Green=" & p(i, j).Green)
If rs.EOF Then
cn.Execute "INSERT points(Red, Blue, Green, Count) VALUES(" & p(i, j).Red & "," & p(i, j).Blue & "," & p(i, j).Green & ",1)"
Else
cn.Execute "Update points SET Count = Count + 1 WHERE Red =" & p(i, j).Red & " AND Blue = " & p(i, j).Blue & " AND Green=" & p(i, j).Green
End If
Next
Next
Set rs = cn.Execute("SELECT TOP 3 * FROM points ORDER BY Count DESC")
