SA-MP Forums Archive
Перевод цвета в RGB - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Русский/Russian (https://sampforum.blast.hk/forumdisplay.php?fid=32)
+---- Thread: Перевод цвета в RGB (/showthread.php?tid=235029)



Перевод цвета в RGB - OFFREAL - 04.03.2011

Здравствуйте!!!
Недавно столкнулся с такой задачей: надо представлять цвета игроков (да и любые цвета) в вид RRGGBB для использования в Colour Embedding. В результате была написана такая функция:
Код:
stock HEX2STR(hex)
{
new str[8] = {48,48,48,48,48,48,0,0}, tmp[8], idx;
if(!hex) {return str;}
format(tmp,8,"%x",( (hex >> 8) | 0xFF000000 ) - 0xFF000000 );
idx = strlen(tmp);
for(new i = 0;i < idx;i++) {str[5-i] = tmp[idx-1-i];}
return str;
}
Есть предложения о том как можно оптимизировать эту функцию, или вообще по-другому написать?


Re: Перевод цвета в RGB - OFFREAL - 04.03.2011

Добавлю:
format с использованием %x (или %h) криво работает со всеми "отрицательными цветами", то есть с теми старший разряд которых в бинарном виде равен 1
Например красный: hex: 0xFF0000FF bin:11111111000000000000000011111111 dec: -16776961


Re: Перевод цвета в RGB - OKStyle - 05.03.2011

Начинай читать отсюда: http://forum.sa-mp.com/showpost.php?...postcount=1739 и ниже.


Re: Перевод цвета в RGB - OFFREAL - 05.03.2011

Куда ниже то? там одно сообщение))
Все это я знаю, и то что все числа 4-байтовые, а когда в старшем разряде 1 то число считается отрицательным, и format тупит при использовании %h %x для отрицательных чисел


Re: Перевод цвета в RGB - Romanius - 05.03.2011

число 0xFFFFFFFF больше cellmax поэтому оно и переходит в отрицательное....

если б в павн был тип long то все было бы ок. Но тут нужно юзать оператор >>> или << (<<<) и вывода их поодельности как РГБ. Поже будет пример


Re: Перевод цвета в RGB - OKStyle - 05.03.2011

Quote:
Originally Posted by OFFREAL
Посмотреть сообщение
Куда ниже то? там одно сообщение))
Ах да... http://forum.sa-mp.com/showpost.php?...postcount=1741


Re: Перевод цвета в RGB - Romanius - 05.03.2011

PHP код:
new color 0xAABBCCDD;
new 
color >>> 24;
new 
= (color >> 16) & 0x00FF;
new 
= (color >> 8) & 0x0000FF;
new 
color 0x000000FF;
    
printf("%x %x %x %x"RGBA); 
0xFF = 0b11111111 т.е. 8 бинарных разрядов

цвет состоит у нас из 8 * 4 бинарных разрядов (32) поэтому 1 раз переносим цвет на 24 бинарных разряда, дабы получить первые 8 (0xAA красный цвет), далее получаем 16 разрядов (0xAABB красный и зеленый) далее бинарным И убираем уже существующий красный цвет, далее получаем 24 разряда (полностью цвет 0xAABBCC красный зеленый и синий) далее бинарным оператором И убираем уже 2 существующих цвета (красный и зеленый) и получаем синий цвет. Потом уже мы не будем передвигаться на 32 разряда т.к. цвет и так состоит из 32 разрядов (: поятому просто получим альфу