Determinare se getPixel value () è superiore o inferiore al 50% di grigio
-
22-09-2019 - |
Domanda
Sto cercando di collegare attraverso una bitmap e determinare se ogni pixel è chiara o più scura di grigio utilizzando getPixel (). Il problema è che io non sono sicuro come dire se il valore restituito da getPixel () è più scuro o più chiaro rispetto grigio.
grigio neutro è circa 0x808080 o R: 127, G: 127, B: 127. Come avrei bisogno di modificare il codice sottostante per determinare con precisione questo?
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!");
}
}
}
Soluzione
Per estendere di Adam risposta un po 'più, si potrebbe generare un valore di luminanza utilizzando una funzione come questa ...
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));
}
Poi si può verificare la soglia grigio al 50% in questo modo:
if (luminance(testBmd.getPixel(dx, dy)) > 127)
Altri suggerimenti
La luminanza è la risposta - la matematica necessaria e la spiegazione qui:
http://www.scantips.com/lumin.html
si sa come continuare:)
Modifica:
in LiveDocs ( LiveDocs - BitmapData - getPixel32 () ), si può vedere ad esempio, come ottenere r, g, b, valori da getPixel32 () valore di ritorno. Forse è possibile utilizzare i:]
Inoltre, di Richard risposta sembra che già fa ciò che è necessario, anche se se si combinano con l'esempio dall'alto - voilla - ti sei preso un confronto luminanza:]