本帖最后由 bcrun 于 2012-04-09 21:54:33 编辑

解决方案 »

  1.   

    编译exe后,使用散列表计算1049X481像素为:15526360   178875       219ms这个性能应该很不错了
      

  2.   

    顶老鸟.一些编码算法,例如CRC,一般有实时运算法与查表法两种写法.实时运算法速度慢,但代码占内存小;查表法需要拥有固定大小的一张表,但速度快.如果又快又占内存小,那可就牛了.
      

  3.   

    赖皮一下,呵呵,如果可以破坏原来点的排列,快速排序后能很快找出相同颜色数量最大的点
    呵呵,如果是 Reserved As Long就更容易了
      

  4.   

    哈~有点让我想起了一个人,WowIFlower,What a beautiful flower恶之花,好坏啊
      

  5.   

    有些图片文件里面有像素索引,在像素诗句里面不是像素的颜色,而是索引号.在颜色索引表里面有每个索引对应的颜色.从已有的索引表触发,可以先知道共有多少个颜色在这个文件.创建一个新的索引,然后扫描整个图片,发现某个像素索引,就给新建的索引表里面的数据+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找到最大元素就可以了.
      

  6.   

    计数的方法很多,例如数据库。建一个数据库表 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")