1

基本上,我想获得出现在BitmapData. 也就是说,我想知道图像中哪个像素颜色最丰富。我尝试遍历图像的每个像素,并在出现已经存在的颜色时进行计数,但这太慢了,即使图像相对较小。有没有人知道一个更快的方法,也许使用BitmapData.histogram()函数或其他东西?

理想情况下,对于至少 1000x1000 像素左右的图像,该过程应该接近瞬时。

4

2 回答 2

1

运行bitmapData.getVector()一个字典来保存数字,然后按值对该字典的键值对进行排序并获得最大值的键。

var v:Vector.<uint>=yourBitmapData.getVector(yourBitmapData.rect);
var d:Dictionary=new Dictionary();
for (var i:int=v.length-1; i>=0;i--) {
    if (d[v[i]]) d[v[i]]++; else d[v[i]]=1;
}
var maxkey:String=v[0].toString();
var maxval:int=0;
for (var k:String in d) {
    if (d[k]>maxval) {
        maxval=d[k];
        maxkey=k;
    }
}
return parseInt(maxkey); // or just maxkey
于 2013-01-18T05:12:32.303 回答
0

我根本没有使用过着色器,但我认为你可能能够获得更快的结果。在着色器级别循环通过像素更快。

我会尝试在着色器中创建基本相同的循环,并使用最常用的颜色和样本绘制整个生成的位图(除非您可以直接从着色器中获取变量)

这应该会更快

于 2013-01-18T16:48:58.217 回答