Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   прозрачная битмапа не распознает цвета 0xCC (http://www.flasher.ru/forum/showthread.php?t=114455)

chingachgoog 29.07.2008 18:43

прозрачная битмапа не распознает цвета 0xCC
 
Если битмапа прозрачная и есть цвета в значении 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/ma...=00001956.html

add2:
развитие темы тут
Параметры getColorBoundsRect

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

Очень похоже на правду.
Собственно это объясняет темы draw текстового поля искажает цвета и Параметры getColorBoundsRect

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.


Часовой пояс GMT +4, время: 15:34.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.