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