2010-03-28 3 views
1

J'essaie de parcourir une image bitmap et de déterminer si chaque pixel est plus clair ou plus foncé que le gris en utilisant getPixel(). Le problème est, je ne sais pas comment dire si la valeur retournée par getPixel() est plus sombre ou plus claire que le gris.Détermine si la valeur de getPixel() est supérieure ou inférieure à 50% en gris

Le gris neutre est d'environ 0x808080 ou R: 127, G: 127, B: 127. Comment aurais-je besoin de modifier le code ci-dessous pour le déterminer avec précision?

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

Répondre

6

pour prolonger un peu d'Adam answer plus loin, vous pouvez générer une valeur de luminance en utilisant une fonction comme celui-ci ...

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

Ensuite, vous pouvez tester votre seuil gris 50% comme ceci:

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

grande simplification:] Ensemble, nous sommes utiles:] –

+0

Super utile. Je vous remercie. – cmal

4

Luminance est la réponse - Math nécessaire et explication ici:

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

vous savez comment continuer :)

Edit:

sur LiveDocs (livedocs - BitmapData - getPixel32()), vous pouvez voir dans l'exemple, comment ils ge t r, g, b, valeurs de getPixel32() valeur de retour. Peut-être que vous pouvez utiliser i:]

, answer Richard ressemble aussi comme il le fait déjà ce que vous avez besoin, mais si vous le combinez avec exemple ci-dessus - voilla - vous avez vous-même une comparaison de luminance:]

+0

Excellent matériel de lecture. Merci beaucoup. – cmal

+0

Une partie de mon problème est que je ne comprends même pas le format des valeurs retournées par getPixel(). Elles ne semblent pas être des valeurs hexadécimales standard. Sans même le savoir, toute discussion sur la luminance par rapport aux valeurs RVB ne m'aidera pas. – cmal

+0

@cmal getPixel() renvoie une valeur RGB en hexadécimal, getPixel32() renvoie une valeur ARGB en hexadécimal. Vérifiez que vous obtenez un pixel à l'emplacement correct si les valeurs ne sont pas conformes à vos attentes. – Allan

Questions connexes