Просмотр полной версии : Параметры mask и color в BitmapData.getColorBoundsRect
Alexmody
04.01.2013, 17:08
Параметры mask и color в BitmapData.getColorBoundsRect
rect = objectsMap.getColorBoundsRect(mask, color , true);
Подскажите, какие значения параметров задать для mask и color, если нужно получить пиксели не белого цвета (0xffffff).
Т.е. фон у BitmapData белый, на нем расположен черный круг со ссблюренными краями (черный с разной интенсивностью), нужно получить Rectangle данного круга включая полупрозрачные пиксели.
Сейчас сложно указать верные значения, т.к. не совсем понимаю параметр mask (в документации чрезмерно кратко написано).
Заблюренный круг на белом фоне:
http://i.pixs.ru/storage/4/1/1/Untitled1j_1259554_6725411.jpg (http://pixs.ru/?r=6725411)
objectsMap.getColorBoundsRect(0x00FFFFFF, 0xFFFFFF, false);
Alexmody
04.01.2013, 18:58
Третьим параметром вы поставили false, т.е. выделить все, только не белый цвет.
И если можно, объясните плиз, что тут подразумевается под параметром mask?
>>Третьий параметр может true?
может и тру, это смотря что нужно, false в данном случае заставит найти область с 'не белыми' пикселями
mask просто битовая маска, не нужно анализировать какой-то из каналов - ставим ему в маске 0
Alexmody
04.01.2013, 19:26
Спасибо, на счет false, я выше поправился, но вот mask, например: 0x00990000 - (бардовый), то пиксели попадающие по красному каналу в диапазон 0-99, что с ними будет (вероятно эти пиксели не будут учитываться в Rectangle)?
я бы не стал связываться с 0x00990000
x99 это 10011001, хз какого результата ждать от такой маски
Alexmody
04.01.2013, 20:21
Интересно, а если фон был бы не белый, а полностью прозрачный, то как бы выглядели mask и color?
>>Интересно, а если фон был бы не белый, а полностью прозрачный, то как бы выглядели mask и color?
ну раз уж так интересно, вот прямиком из хелпа для непрозрачных пикселей:
getColorBoundsRect(0xFF000000, 0x00000000, true);
Alexmody
05.01.2013, 10:16
>>ну раз уж так интересно, вот прямиком из хелпа для непрозрачных пикселей:
>>getColorBoundsRect(0xFF000000, 0x00000000, true);
Все же в данном случае правильнее будет использовать false (также как и с белым фоном),
т.к. мы выделяем все непрозрачные пиксели, а второй параметр 0x00000000 является прозрачным пикселем.
Как я понял, битовую маску mask используют, для вкл./выкл. каналов подставляя в основном FF или 00
для канала или все же разные значения канала тоже часто используют (напр. 0x00990000)?
Вы можете привести пример, как это использовать?)))
"Значения канала" задаются в color. А маска это маска, ее смысл только в том, чтобы не учитывать при поиске каналы, которые могут иметь любое значение. Например, чтобы искать белый цвет с любой альфой, мы маскируем альфу (не учитываем ее), а каналы учитываем — маска 0x00FFFFFF. Сначала установленный color будет преобразован в поисковый сэмпл: color & 0x00FFFFFF, затем при поиске значения проверяемых пикселов будут точно так же маскироваться, и какая бы альфа ни была, при сравнении с сэмплом она будет рассматриваться как нулевая, то есть никак не будет влиять на результат сравнения. Теоретически Вы наверное можете делать побитовый & каналов пикселей с 0х99, вот только практический смысл такой фильтрации мне крайне затруднительно представить, даже для определения цветов, которые пройдут такую проверку, мне понадобится написать тест — мозг с этим не сможет справиться)))
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.