Вход

Просмотр полной версии : прозрачная битмапа не распознает цвета 0xCC


chingachgoog
29.07.2008, 18:43
Если битмапа прозрачная и есть цвета в значении 0хCC

myBitmapData = new BitmapData(300, 200, true, 0x90cccccc);

То методы getPixel32 и getPixel будут выдавать ложные значения цвета (разные в зависимости от параметра А модели ARGB).
Причем для других цветов (не 0хСС) эти методы не ошибаются (по крайней мере из тех значений, что я проверял), а если битмапа не прозрачная, то и 0хСС определяется верно.

etc
29.07.2008, 18:49
Это, скорее всего, связано с тем, что прозрачность делится на 100 единиц, а не 255. Т.е. из той же серии, что значение _alpha после установки может не совпадать с исходным.

chingachgoog
29.07.2008, 19:07
Возможно, но метод getPixel32 как раз параметр A определяет безошибочно, а вот далее RGB идет с ошибкой.

add:
вижу проблема встречалась уже
http://livedocs.adobe.com/flash/8/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00001956.html

add2:
развитие темы тут
Параметры getColorBoundsRect (http://flasher.ru/forum/showthread.php?t=112652)

add3:
Все же от Мука есть небольшая польза. В его нетленке по AS3 нашел-таки объяснение этого глюка (думаю, что для AVM1 механизм глюка тот же).
Вся беда в том, что флеш не запоминает исходные цвета для прозрачной битмапы! Т.е. A0 R0 G0 B0 при прозрачной битмапе не запоминаются, а происходит ВЫЧИСЛЕНИЕ нового цвета, где R0, G0 и B0 перемножаются на значение A0 и мы имеем в результате по сути НОВЫЙ цвет: R1 G1 и B1!
Метод getPixel32 пытается сделать обратное преобразование, но, естественно, это в ряде случаев невозможно!

Очень похоже на правду.
Собственно это объясняет темы draw текстового поля искажает цвета (http://flasher.ru/forum/showthread.php?t=117747) и Параметры getColorBoundsRect (http://flasher.ru/forum/showthread.php?t=112652)

Bred45
24.03.2009, 18:31
Об этом вроде есть в мануале к функции getPixel():

All pixels in a BitmapData object are stored as premultiplied color values. A premultiplied image pixel has the red, green, and blue color channel values already multiplied by the alpha data. For example, if the alpha value is 0, the values for the RGB channels are also 0, independent of their unmultiplied values.