AS3 Bitmap чёрно-белое - по соображениям сжатия
У меня есть поле, состоящее из BitmapData, которое я использую для точного обнаружения пикселей.
Тем не менее, BitmapData естественно хранит 2^32 (или 2^24 без альфа?) Возможностей для каждого пикселя. Мне нужно только 2 - черный или белый.
Но мне все еще нужно использовать.draw, чтобы другие объекты рисовались на этом BitmapData. Это не должно быть видимым.
Извлечение пикселя для обнаружения попадания не кажется слишком сложным, но рисование без циклического прохождения каждого пикселя кажется трудным. Является ли это возможным?
Каков будет правильный подход к этой проблеме?
1 ответ
Если вы хотите, чтобы ваши растровые данные были только черными или белыми, вы можете использовать BitmapData.threshold()
после рисования новой маски поверх этого растрового изображения. Чтобы превратить ваш существующий BitmapData
Для черно-белого с порогом в половину красного канала сделайте следующее:
bd.threshold(bd,bd.rect,new Point(),"<",0x00800000,0x0,0x00ff0000,true);
bd.threshold(bd,bd.rect,new Point(),">=",0x00800000,0x00ffffff,0x00ff0000,true);
Первый вызов с поворотом всех точек, которые имеют красный цвет ниже 0x80 черного, второй вызовет превращение всех оставшихся точек в белый цвет. Измените маску и пороговое значение, чтобы использовать зеленый или синий каналы, если хотите. Рассмотреть возможность применения правильно направленного ColorTransform
возражать против вашего draw
вызывает корректное применение маски к вновь нарисованному объекту.