基本上,我想获得BitmapData
中出现的最常见的ARGB值。也就是说,我想知道哪个精确像素颜色是图像中最丰富的。我尝试浏览图像的每个像素,并在已经存在的颜色出现时计数,但即使图像相对较小,这也太慢了。有没有人知道更快的方法,可能使用BitmapData.histogram()
函数或什么?
理想情况下,对于至少1000x1000像素的图像,该过程应该接近瞬时。
答案 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)
我根本没有使用着色器,但我认为你可能会得到更快的结果。在着色器级别上循环通过像素更快。
我尝试在着色器中创建基本相同的循环,并使用最常用的颜色和样本绘制整个结果位图(除非您可以直接从着色器中获取变量)
这应该明显更快