as3 BitmapData threshold, что происходит с пикселями, не прошедшими тест? Как их удалить?

Когда я использую порог растровых данных, что происходит с пикселями, не прошедшими пороговый тест? По моему наблюдению они остаются такими же, так есть ли способ их удалить?


person Netrus    schedule 02.08.2013    source источник
comment
сделать еще один порог с заменой цвета 0x00000000 (то есть: нулевой альфа)   -  person    schedule 02.08.2013
comment
@LeeBurrows Это будет работать, если пороговый цвет будет в пределах порога, то есть вызов того же порога не приведет к дальнейшему изменению растрового изображения. Но возможно, что цвет, переданный в BitmapData.threshold(), будет естественным образом находиться за пределами порога, таким образом, этот подход аннулирует весь растровый рисунок.   -  person Vesper    schedule 05.08.2013
comment
@Веспер. Netrus может изменить условие на втором пороге, чтобы повлиять на другой набор пикселей. то есть: если первый порог использовал ›, то второй использует ‹   -  person    schedule 05.08.2013
comment
@LeeBurrows Да, но этого недостаточно. Допустим, у вас есть растровое изображение, состоящее из двух цветов: 0x305070ff и 0xaaaaaaaa. Вы хотите, чтобы порог альфа больше 0x80 превратился в 0x55ff0000. Итак, вы вызываете threshold() и имеете BitmapData двух цветов: 0x305070ff и 0x55ff0000. Теперь вы хотите обнулить все остальные пиксели, вы вызываете порог с обратной операцией и БАМ, все ваши растровые данные теперь состоят из нулей! Это не то, что вы обычно хотите, верно?   -  person Vesper    schedule 06.08.2013
comment
Спасибо, ребята! :D но создание временного растрового изображения для копирования порога, прошедшего тест, сработало для меня..   -  person Netrus    schedule 07.08.2013


Ответы (1)


Лучшим способом было бы использовать временный (статический, многоразовый) прозрачный BitmapData для этой операции. Вы заполняете его значением 0x0, затем вызываете источник настройки threshold() для своего BitmapData, а для флага copySource установлено значение false, затем вы copyPixels() возвращаетесь с mergeAlpha значением false.

var tbd:BitmapData=yourBitmapData.clone(); // this makes a new BitmapData, so be warned
var p0:Point=new Point();
tbd.fillRect(tbd.rect,0);
tbd.threshold(yourBitmapData,yourBitmapData.rect,p0,yourOperation,
    yourThreshold,yourColor,yourMask,false);
yourBitmapData.copyPixels(tbd,tbd.rect,p0);
tbd.dispose();
person Vesper    schedule 02.08.2013