Frage

Ich versuche, eine Bitmap zu durchlaufen und festzustellen, ob jedes Pixel mit GetPixel () leichter oder dunkler als grau ist. Problem ist, ich bin mir nicht sicher, wie ich feststellen soll, ob der von getPixel () zurückgegebene Wert dunkler oder leichter als grau ist.

Neutrales Grau ist ungefähr 0x808080 oder R: 127, G: 127, B: 127. Wie müsste ich den folgenden Code ändern, um dies genau zu bestimmen?

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!");
         }
    }
}
War es hilfreich?

Lösung

Adams erweitern Antworten Ein bisschen weiter können Sie einen Luminanzwert unter Verwendung einer solchen Funktion erzeugen ...

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

Dann können Sie für Ihre 50% graue Schwelle wie folgt testen:

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

Andere Tipps

Luminance ist die Antwort - Mathematik benötigt und Erklärung hier:

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

Sie wissen, wie man weitergeht :)

Bearbeiten:

auf Lebendocs (Lebendocs - Bitmapdata - getPixel32 ()), Sie können in Beispiel, wie sie R, G, B, Werte von getPixel32 () Rückgabewert erhalten. Vielleicht kannst du ich verwenden:

Auch Richards Antworten Sieht so aus, als ob es bereits das tut, was Sie brauchen, obwohl Sie es mit einem Beispiel von oben kombinieren - Voilla - Sie haben einen Luminanzvergleich:

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top