Actionscript 3.0 Перевод HEX в ARGB - PullRequest
1 голос
/ 03 марта 2010

Я изучаю getPixel32 () и классы Bitmap и Bitmap Data. В основном, я хотел бы знать, как вывести простую трассировку ARGB из шестнадцатеричного значения.

Кстати, у меня сложилось впечатление, что я предполагаю / надеюсь, что это неправильно, что шестнадцатеричные значения не могут давать столько цветов, сколько значения RGBA. возможно, «веб-безопасность» отбросила меня с пониманием полезности или желания использовать цвета, производимые с шестнадцатеричными значениями.

1 Ответ

3 голосов
/ 03 марта 2010

Чтобы извлечь информацию о цвете, вам нужно работать с побитовыми операторами. Цвета хранятся как 0xAARRGGBB, поэтому вы должны извлечь эти части. Небольшой фрагмент должен выполнить эту работу:

var hex: uint = 0x00ff00ff;
var a: int = (hex >>> 0x18) & 0xff;
var r: int = (hex >>> 0x10) & 0xff;
var g: int = (hex >>> 0x08) & 0xff;
var b: int = hex & 0xff;

trace(a, r, g, b);

В зависимости от того, как вы указали значения RGBA, ответ может измениться. Если вы используете значения RGBA, где каждый канал определяется одним байтом, вы можете выразить ровно столько же цветов, сколько в шестнадцатеричном значении. Ваше "шестнадцатеричное значение" - это целое число без знака, состоящее из 4 байтов. Во Flash есть также тип Number, который состоит из 64 бит, поэтому каждый канал будет выражаться 8 байтами вместо одного. Вы можете представить, что у вас гораздо больше точности. Однако, вероятно, ваш экран установлен на «True Color (32-bit)» и не сможет отображать столько цветов. Вы выходите за пределы двойной точности (64 бита) и используете десятичную точность, которая в основном используется для финансовых расчетов. Каждое значение состоит из 128-бит, что составляет 16 байтов для каждого канала. Это в 16 раз больше, чем при использовании вашего шестнадцатеричного представления. Конечно, это намного точнее, но ваш монитор не сможет с этим справиться.

Примечание. Размер вашего изображения также ширина высота каналов * (байт на канал). Так что если вы используете один байт на канал, который является 8-битным, вы получите уже достаточно цветов. Для большого изображения разница будет довольно большой, если вы перейдете с 8-битного на 32-битный канал.

Размер изображения 1024x768 с точностью 8 бит составляет 3072 КБ, тогда как в памяти того же 32-разрядного изображения - 12288 КБ. Это же изображение заняло бы 24576 КБ, используя тип числа Flash. Так что вам, вероятно, лучше остаться с 8-битной точностью, которой должно быть достаточно в большинстве случаев.

Надеюсь, это поможет, и теперь вы лучше понимаете изображения и их структуру.

...