Что делает параметр маски в пороговом методе класса BitmapData? - PullRequest
3 голосов
/ 18 августа 2011

Я пытаюсь заменить цвет и цвета рядом с ним в растровом изображении.

threshold () , кажется, работает, но, похоже, вам нужно указать точный цвет "==" или все цвета до или после точного цвета "<" & ">" plus " <= "и"> = ". Я надеюсь, что параметр mask поможет мне найти способ найти цвет и динамический диапазон цветов до и после его замены. Каково его предназначение?

За комментарий ниже Пример 1 и 2:

bit.threshold(bit, bit.rect, point, ">", 0xff000000, 0xffff0000, 0x00FF0000); 

bit.threshold(bit, bit.rect, point, ">", 0xff000000, 0xffff0000, 0x00EE0000);

Ответы [ 2 ]

1 голос
/ 19 августа 2011

Я также сделал это, и в итоге я нашел, что лучше всего создать свой собственный пороговый метод. Вы можете найти это ниже. Все объясняется в комментарии.

//_snapshot is a bitmapData-object
for(var i:int = 0; i <= _snapshot.width; i++)
{
    for(var j:int = 0; j <= _snapshot.height; j++)
    {
        //We get the color of the current pixel.
        var _color:uint = _snapshot.getPixel(i, j);                     

        //If the color of the selected pixel is between certain values set by the user, 
        //set the filtered pixel data to green. 
        //Threshold is a number (can be quite high, up to 50000) to look for adjacent colors in the colorspace.
        //_colorToCompare is the color you want to look for.
        if((_colorToCompare - (100 * _threshold)) <= _color && _color <= (_colorToCompare + (100 * _threshold)))
        {
            //This sets the pixel value.
            _snapshot.setPixel(i, j, 0x00ff00);
        }
        else
        {
            //If the pixel color is not within the desired range, set it's value to black.
            _snapshot.setPixel(i, j, 0x000000);
        }
    }
}
1 голос
/ 19 августа 2011

Если вы пытаетесь выполнить заливку, я не думаю, что параметр mask поможет вам. Параметр mask позволяет игнорировать части цвета в тесте. В вашем случае вы хотите учесть все каналы цвета, вы просто хотите, чтобы соответствие было нечетким.

например. Если вы хотите заменить все пиксели, где красный компонент равен 0, вы можете установить маску на 0x00FF0000, чтобы она игнорировала другие каналы.

Псевдокод реализации, вероятно, выглядит примерно так:

input = readPixel()
value = input & mask
if(value operation threshold)
{
    writePixel(color)
}

Ни один из ваших образцов ничего не даст, потому что маска ограничивает значения значениями от 0x00000000 до 0x00FF0000, а затем проверяет, не превышают ли они значения 0xFF000000.

...