Pregunta

Estoy tratando de recorrer un mapa de bits y determinar si cada píxel es más claro o más oscuro que el gris usando getpixel (). El problema es que no estoy seguro de cómo saber si el valor devuelto por getPixel () es más oscuro o más claro que el gris.

Neutral Grey es de aproximadamente 0x808080 o R: 127, G: 127, B: 127. ¿Cómo necesitaría modificar el código a continuación para determinar con precisión esto?

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

Solución

Para extender el Adam's responder Un poco más, podría generar un valor de luminancia utilizando una función 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));
}

Luego puede probar su umbral del 50% de gris como este:

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

Otros consejos

Luminance es la respuesta - Matemáticas necesarias y explicación aquí:

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

Sabes cómo continuar :)

Editar:

en Ledocs (LEDECS - BitMapData - GetPixel32 ()), puede ver en el ejemplo, cómo obtienen el valor de retorno de R, G, B, GetPixel32 (). Tal vez puedas usar yo:

Además, Richard's responder Parece que ya hace lo que necesitas, aunque si lo combinas con el ejemplo de arriba, voilla, tienes una comparación de luminancia:

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top