PDA

Просмотр полной версии : работа с цветом \16-ричные цифры


gen4
25.08.2008, 18:21
trace((0x7a <<24));
trace((0x8a <<24));
trace((0x9a <<24));


на выходе:
2046820352
-1979711488
-1711276032

или же в 16-ричном виде:
7a000000
-76000000
-66000000


почему так происходит?
как после этого, спрашивается, мне задать цвет в формате 0хAARRGGBB ? исключительно стрингом?

litebox
25.08.2008, 18:43
Ну примерно вот так:
var color:uint = 0;

var r, g, b, a:uint;

a = 128;
r = 128;
g = 128;
b = 128;

a = a << 24;
r = r << 16;
g = g << 8;

color = color | a;
trace(color);
color = color | r;
trace(color);
color = color | g;
trace(color);
color = color | b;
trace(color);
2147483648 - 0x80000000
2155872256 - 0x80800000
2155905024 - 0x80808000
2155905152 - 0x80808080

wvxvw
25.08.2008, 18:47
потому что это signed bitwise shift. Это значит, что принимает во внимание знак и работает с int а не uint. Вот ток unsigned left shift не существует, есть только правый...
Я думаю, что в вашей ситуации это поможет:
trace(uint(0x7a <<24));
trace(uint(0x8a <<24));
trace(uint(0x9a <<24));

gen4
25.08.2008, 19:29
Да, дело в типе.
Большое спасибо

Alex Lexcuk
25.08.2008, 19:34
>>как после этого, спрашивается, мне задать цвет в формате 0хAARRGGBB ? исключительно стрингом?

Я исключительно стрингом задавал, так легче

var a = 0x77;
var r = 0x66;
var g = 0x60;
var b = 0x06;

var res_color = int("0x"+f_f(a)+f_f(r)+f_f(g)+f_f(b));

trace("Шеснадцатиричный "+res_color.toString(16));

function f_f(ff_color:int)
{
var res_str = "0", w_str = ff_color.toString(16);
if (w_str.length>1) res_str = w_str; else res_str = res_str+w_str; return res_str;
}

на выходе имеем шеснадцатиричный цвет
output
Шеснадцатиричный 77666006

gen4
25.08.2008, 19:41
Да, дело в типе.
Большое спасибо

gen4
25.08.2008, 19:43
Alex Lexcuk: такой способ тормозной, по сравнению, например с
var col:uint=(newAlpha<<24)+0xFFFFFF

etc
25.08.2008, 19:45
Alex Lexcuk, учите побитовые операции.

var a:uint = 0x77;
var r:uint = 0x66;
var g:uint = 0x60;
var b:uint = 0x06;
var color:uint = ((a & 0xFF) << 24) | ((r & 0xFF) << 16) | ((g & 0xFF) << 8) | (b & 0xFF);
trace(color.toString(16));