AS3 - 在BitmapData中找到最丰富的像素颜色

时间:2013-01-17 21:08:23

标签: actionscript-3 colors bitmapdata argb

基本上,我想获得BitmapData中出现的最常见的ARGB值。也就是说,我想知道哪个精确像素颜色是图像中最丰富的。我尝试浏览图像的每个像素,并在已经存在的颜色出现时计数,但即使图像相对较小,这也太慢了。有没有人知道更快的方法,可能使用BitmapData.histogram()函数或什么?

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

2 个答案:

答案 0 :(得分:1)

使用Dictionary运行bitmapData.getVector()以保存数字,然后按值对Dictionary的键值对进行排序并获取最大值。

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

答案 1 :(得分:0)

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

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

这应该明显更快