Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 AS3-查找位图数据中最丰富的像素颜色_Actionscript 3_Colors_Bitmapdata_Argb - Fatal编程技术网

Actionscript 3 AS3-查找位图数据中最丰富的像素颜色

Actionscript 3 AS3-查找位图数据中最丰富的像素颜色,actionscript-3,colors,bitmapdata,argb,Actionscript 3,Colors,Bitmapdata,Argb,基本上,我希望获得在BitmapData中出现的最常见的ARGB值。也就是说,我想知道哪种确切的像素颜色在图像中最丰富。我试着检查图像的每一个像素,并在已经存在的颜色出现时计数,但这太慢了,即使是相对较小的图像。有人知道一种更快的方法吗,可能是使用BitmapData.histogram()函数或其他什么 理想情况下,对于至少1000x1000像素左右的图像,该过程应该几乎是瞬时的。使用字典运行bitmapData.getVector(),以保存数字,然后按值对字典的键值对排序,并获得最大值的键

基本上,我希望获得在
BitmapData
中出现的最常见的ARGB值。也就是说,我想知道哪种确切的像素颜色在图像中最丰富。我试着检查图像的每一个像素,并在已经存在的颜色出现时计数,但这太慢了,即使是相对较小的图像。有人知道一种更快的方法吗,可能是使用
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
var v:Vector.=yourBitmapData.getVector(yourBitmapData.rect);
var d:Dictionary=newdictionary();
对于(变量i:int=v.length-1;i>=0;i--){
如果(d[v[i]])d[v[i]++;否则d[v[i]]=1;
}
var maxkey:String=v[0]。toString();
var maxval:int=0;
for(变量k:d中的字符串){
if(d[k]>maxval){
maxval=d[k];
maxkey=k;
}
}
返回parseInt(maxkey);//或者只是maxkey

使用字典运行
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
var v:Vector.=yourBitmapData.getVector(yourBitmapData.rect);
var d:Dictionary=newdictionary();
对于(变量i:int=v.length-1;i>=0;i--){
如果(d[v[i]])d[v[i]++;否则d[v[i]]=1;
}
var maxkey:String=v[0]。toString();
var maxval:int=0;
for(变量k:d中的字符串){
if(d[k]>maxval){
maxval=d[k];
maxkey=k;
}
}
返回parseInt(maxkey);//或者只是maxkey

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

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


这应该要快得多

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

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


这应该要快得多

我发现了一个类似的问题,并给出了一个很好的答案,这可能会对您有所帮助。我已经看到:不幸的是,解决方案似乎找到了平均颜色,这不是我想要的。我在寻找图像中出现次数最多的单色值。比如,如果你有20个像素是
0xFF89ae00
,10个像素是
0xFFae0089
,我得到的结果颜色将是
0xFF89ae00
,因为这是大多数像素都有的颜色。哦,好吧,我误解了答案(对于我链接的那一个),对不起^。你在使用还是?我在使用
getPixel32()
:现在我发现
getVector()
更适合于此用途,但在Vesper回答之前我没有使用过它。我发现了一个类似的问题,并给出了一个很好的答案,这可能对您有所帮助。我发现:不幸的是,解决方案似乎找到了平均颜色,这不是我想要的。我在寻找图像中出现次数最多的单色值。比如,如果你有20个像素是
0xFF89ae00
,10个像素是
0xFFae0089
,我得到的结果颜色将是
0xFF89ae00
,因为这是大多数像素都有的颜色。哦,好吧,我误解了答案(对于我链接的那一个),对不起^。你在使用还是?我在使用
getPixel32()
:现在我发现
getVector()
更适合这种用法,但在Vesper回答之前我没有使用过它。谢谢,这非常有效(我不知道为什么你要向后迭代
向量
,向前迭代对我很好)。不幸的是,它仍然比我需要的要慢(尽管它比较快)。我不回答这个问题,看看是否有人知道一些更快的事情,如果可能的话。如果第二天或第二天没有任何答案,我会接受这个答案。我希望没有比这个更快的了,因为你需要查询每个像素并制作一个精确的颜色直方图,这需要完整的迭代。为什么向后-我们不需要保持计数的顺序,但是如果我们向前,我们不断地检查向量长度,速度不如检查零快。啊,好的,没想到这一点。我一定要记住,以后什么时候秩序不重要。很可能你是对的,这可能是最快的方法,具有如此高的精确度,但也可以看看是否出现了神奇的事情。@puggsoy将长度保存在局部变量中同样容易。我经常这样做:
var lng:uint=myArray.length;对于(var i:uint=0;i
谢谢,这非常有效(我不知道为什么要向后遍历
向量
,向前遍历对我很好)。不幸的是,它仍然比我需要的要慢(尽管它比较快)。我不回答这个问题,看看是否有人知道一些更快的事情,如果可能的话。如果第二天或第二天没有任何答案,我会接受这个答案。我希望没有比这个更快的了,因为你需要查询每个像素并制作一个精确的颜色直方图,这需要完整的迭代。为什么向后-我们不需要保持计数的顺序,但是如果我们向前,我们不断地检查向量长度,速度不如检查零快。啊,好的,没想到这一点。我一定要记住,以后什么时候秩序不重要。很可能你是对的,这可能是最快的方法,具有这样的精确度,但是