怎么“最快”找出图象里颜色重复次数最大的点?VB codePrivate Declare Function GetTickCount Lib kernel32
怎么“最快”找出图象里颜色重复次数最大的点?
VB codePrivate 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")