1

基本的に、に表示される最も一般的な ARGB 値を取得したいと考えていますBitmapData。つまり、画像内で最も豊富な正確なピクセルの色を知りたいのです。画像のすべてのピクセルを調べて、既に存在する色が出現するたびにカウントしようとしましたが、比較的小さな画像であっても、遅すぎます. BitmapData.histogram()おそらく関数か何かを使用して、これのためのより速い方法を知っている人はいますか?

理想的には、少なくとも 1000x1000 ピクセル程度の画像の場合、プロセスはほぼ瞬時に行われる必要があります。

4

2 に答える 2

1

DictionarybitmapData.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
于 2013-01-18T05:12:32.303 に答える
0

私はシェーダーをまったく使用していませんが、より高速な結果を得ることができると思います。シェーダー レベルでは、ピクセルをループする方が高速です。

シェーダーで基本的に同じループを作成し、結果のビットマップ全体を最も使用されている色とサンプルでペイントしてみます (シェーダーから変数を直接取得できない場合)。

これはかなり速くなるはずです

于 2013-01-18T16:48:58.217 に答える