赖皮一下,呵呵,如果可以破坏原来点的排列,快速排序后能很快找出相同颜色数量最大的点 呵呵,如果是 Reserved As Long就更容易了
哈~有点让我想起了一个人,WowIFlower,What a beautiful flower恶之花,好坏啊
有些图片文件里面有像素索引,在像素诗句里面不是像素的颜色,而是索引号.在颜色索引表里面有每个索引对应的颜色.从已有的索引表触发,可以先知道共有多少个颜色在这个文件.创建一个新的索引,然后扫描整个图片,发现某个像素索引,就给新建的索引表里面的数据+1这样还是要扫描整个图片,但是颜色索引小了很多了,不必建立全部颜色.比如一个索引表 0:rgb(1,2,3) 1:rgb(2,3,4) ... 图像:1,0,1,1,1,0....新索引:NewIndex(0 to NumColor)扫描时候: NewIndex(Pixels(i))=NewIndex(Pixels(i))+1最后只要在NewIndex找到最大元素就可以了.
计数的方法很多,例如数据库。建一个数据库表 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")
呵呵,如果是 Reserved As Long就更容易了
0:rgb(1,2,3)
1:rgb(2,3,4)
...
图像:1,0,1,1,1,0....新索引:NewIndex(0 to NumColor)扫描时候:
NewIndex(Pixels(i))=NewIndex(Pixels(i))+1最后只要在NewIndex找到最大元素就可以了.
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")