Определите, является ли значение getPixel () больше или меньше 50% серого - PullRequest
1 голос
/ 29 марта 2010

Я пытаюсь перебрать растровое изображение и определить, является ли каждый пиксель светлее или темнее серого, используя getPixel (). Проблема в том, что я не уверен, как определить, является ли значение, возвращаемое getPixel (), темнее или светлее серого.

Нейтральный серый составляет около 0x808080 или R: 127, G: 127, B: 127. Как мне нужно изменить код ниже, чтобы точно определить это?

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

Ответы [ 2 ]

5 голосов
/ 29 марта 2010

Чтобы немного расширить ответ Адама , вы можете сгенерировать значение яркости, используя функцию, подобную этой ...

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

Затем вы можете проверить свой 50% серый порог, как это:

if (luminance(testBmd.getPixel(dx, dy)) > 127)
3 голосов
/ 29 марта 2010

Яркость - это ответ - нужна математика и объяснение здесь:

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

Вы знаете, как продолжить:)

Edit:

для liveocs ( aliveocs - BitmapData - getPixel32 () ), вы можете увидеть в примере, как они получают значения r, g, b из возвращаемого значения getPixel32 (). Может быть, вы можете использовать I:]

Кроме того, ответ Ричарда выглядит так, как будто он уже делает то, что вам нужно, хотя, если вы объедините это с примером сверху - вуаля, - вы получите себе сравнение яркости:]

...