Определите, превышает ли значение getPixel() 50% серого или меньше.

StackOverflow https://stackoverflow.com/questions/2534735

Вопрос

Я пытаюсь просмотреть растровое изображение и определить, светлее или темнее каждый пиксель серого, используя 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!");
         }
    }
}
Это было полезно?

Решение

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

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)

Другие советы

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

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

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

Редактировать:

на LivivEcs (Livedocs - Bitmapdata - getPixel32 ()), вы можете увидеть в примере, как они получают r, g, b, значения от getPixel32 () возвращаемого значения. Может, вы можете использовать я:

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top