1

getPixel()を使用して、ビットマップをループし、各ピクセルが灰色より明るいか暗いかを判断しようとしています。問題は、getPixel()によって返される値が灰色よりも暗いか明るいかを判断する方法がわからないことです。

ニュートラルグレーは約0x808080またはR:127、G:127、B:127です。これを正確に判断するには、以下のコードをどのように変更する必要がありますか?

for (var dx:int=0; dx < objectWidth; dx++)
{  
    for (var dy:int=0; dy < objectHeight; dy++)
    {
         if (testBmd.getPixel(dx, dy) > GRAY)
         {
             trace("Lighter than gray!");
         } else {
             trace("Darker than gray!");
         }
    }
}
4

2 に答える 2

5

アダムの答えをもう少し拡張するために、次のような関数を使用して輝度値を生成できます...

function luminance(myRGB:int):int {
//returns a luminance value between 0 and 255
var R:int = (myRGB / 65536) % 256;
var G:int = (myRGB / 256) % 256;
var B:int = myRGB % 256;
return ((0.3*R)+(0.59*G)+(0.11*B));
}

次に、次のように50%グレーのしきい値をテストできます。

if (luminance(testBmd.getPixel(dx, dy)) > 127)
于 2010-03-29T07:58:02.583 に答える
3

輝度が答えです-必要な数学とここでの説明:

http://www.scantips.com/lumin.html

あなたは続行する方法を知っています:)

編集:

livedocs(livedocs-BitmapData-getPixel32())では、例として、getPixel32()の戻り値からr、g、bの値を取得する方法を確認できます。多分あなたは私を使うことができます:]

また、リチャードの答えは、すでに必要なことを実行しているように見えますが、上記の例と組み合わせると、輝度の比較ができます:]

于 2010-03-28T22:00:07.160 に答える