Pergunta

Estou tentando fazer um bitmap e determinar se cada pixel é mais leve ou mais escuro que o cinza usando getPixel (). O problema é que não tenho certeza de como saber se o valor retornado pelo getPixel () é mais escuro ou mais leve que o cinza.

O cinza neutro é de cerca de 0x808080 ou r: 127, g: 127, b: 127. Como eu precisaria modificar o código abaixo para determinar com precisão isso?

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!");
         }
    }
}
Foi útil?

Solução

Para estender a de Adam responda Um pouco mais adiante, você pode gerar um valor de luminância usando uma função como esta ...

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));
}

Em seguida, você pode testar seu limiar de 50% cinza como este:

if (luminance(testBmd.getPixel(dx, dy)) > 127)

Outras dicas

Luminância é a resposta - Matemática necessária e explicação aqui:

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

você sabe como continuar :)

Editar:

em Livivedocs (Livedocs - BitmapData - getPixel32 ()), você pode ver no exemplo, como eles recebem valores R, G, B, GetPixel32 (). Talvez você possa usar i:

Além disso, Richard's responda Parece que já faz o que você precisa, embora se você o combine com o exemplo acima - Voilla - você tem uma comparação de luminância:

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top