PDA

Просмотр полной версии : Rgb


Linuxoid_Alex
18.08.2004, 11:13
Люди, подскажите, plz:
как разложить rgb цвет на составляющие, то есть получить отдельно R,G и B?

iNils
18.08.2004, 11:43
Это смотря в чем он у тебя имееться, в hex (например 0xFF024C или #FF024C ) или dec (16712268)

Linuxoid_Alex
18.08.2004, 11:47
в dec как Number

DeliMIter
18.08.2004, 12:06
В переменной с номером цвета биты 0..7 = B, 8..15 = G, 16..23 = R. Как и везде.

iNils
18.08.2004, 12:35
Математически (от обратного):
Допустим у тебя есть отдельно значения для каждого цвета R, G и B в dec. Тогда суммарное значение RGB=R*65535+G*255+B.

Соответственно, можно произвести и обратное преобразование )

Linuxoid_Alex
18.08.2004, 13:15
кому интересно:

r = Math.floor(clr/65536);
g = Math.floor((clr-r*65536)/256);
b = clr-r*65536-g*256;

Linuxoid_Alex
18.08.2004, 13:23
Допустим у тебя есть отдельно значения для каждого цвета R, G и B в dec. Тогда суммарное значение RGB=R*65535+G*255+B.

смотри для 0xff0000, соответственно r=255
по твоей формуле: RGB=255*65535, проверим:

trace (0xff0000);
var clr=255*65535;
trace (clr);

Получаем:
16711680
16711425
Так - что надобно:
RGB=R*65536+G*256+B.

iNils
18.08.2004, 13:28
Верно )) В байте 256 бит, но значения от 0 до 255.

Елё
18.08.2004, 14:06
А нельзя разве так:

r = ((col>>16)&0xFF);
g = ((col>>8)&0xFF);
b = (col&0xFF);

Или битовые операции нельзя использовать?

fiot
18.08.2004, 18:02
Object.prototype.HEXtoRGB = function(hex)
{
var rgb24 = (isNaN(hex)) ? parseInt(hex, 16) : hex;
this.r = rgb24 >> 16;
this.g = (rgb24 ^ (this.r << 16)) >> 8;
this.b = (rgb24 ^ (this.r << 16)) ^ (this.g << 8);
trace('r:'+this.r+' g:'+this.g+' b:'+this.b)
return
};
/* test */
b = {}
hex = 0xD96926; //r:217, g:105, b:38
b.HEXtoRGB(hex);

iNils
18.08.2004, 18:06
Ну, началось )) Давайте еще на асме писать все.
Если человек не знал как разложить цвет dec на составляющие, то о каких битовых операциях может идти речь?

Linuxoid_Alex
19.08.2004, 04:42
Если человек не знал как разложить цвет dec на составляющие, то о каких битовых операциях может идти речь?

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

iNils
19.08.2004, 13:06
а на асме это просто

:)))))

Linuxoid_Alex
19.08.2004, 14:53
Написать?

DeliMIter
19.08.2004, 15:10
MOV EAX, COLORVALUE

B:
PUSH EAX
AND EAX, 0FFH

G:
POP EAX
PUSH EAX
SHR EAX, 8
AND EAX, 0FFH

R:
POP EAX
SHR EAX, 16
AND EAX, 0FFHесли мне не изменяет память...

Linuxoid_Alex
19.08.2004, 15:11
можно ещё макросы понаписать для каждого отдельно