Показать сообщение отдельно
Старый 18.08.2017, 12:47   #1  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,983 / 3273 (117) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
RGB - HEX цвета как правильно переводить
Привет всем.
Столкнулся с проблемой подбор цветов.
Похоже в аксапте неверно сделан перевод из RGB кодировки цвета в HEX

WinApi класс
методы

X++:
client static container getSysColor(int hColor)
{
    int         rgb;
    DLL         _winApiDLL      = new DLL(#UserDLL);
    DLLFunction _getSysColor    = new DLLFunction(_winApiDLL, 'GetSysColor');
    _getSysColor.returns(ExtTypes::DWord);
    _getSysColor.arg(ExtTypes::DWord);

    rgb = _getSysColor.call(hColor);

    return [rgb & 0xff, (rgb & 0xff00)>>#offset8 , (rgb & 0xff0000)>>#offset16];

}
X++:
static client server int rgb2int(RGBint r, RGBint g, RGBint b)
{
    return r  + g<<#offset8 + b<<#offset16;
}
X++:
client server static container rgBint2Con(int rgb)
{
    return [rgb & 0xff, (rgb & 0xff00)>>8 , (rgb & 0xff0000)>>16];
}
При переводе поменяны местами красный и синий.
Странно как-то.
Возможно я что-то не понимаю, поправьте меня если я неправ.

Как обнаружил.
Использовал на форме HTML контрол.
Взял цвет фона меню/кнопки из стандартной цветовой схемы winXP
RGB (212, 208, 200)

Перевел таким кодом
X++:
info(Global::int2Hex(Winapi::rgb2int(212, 208, 200), 6));
получил C8D0D4 (визуально такой цвет неправильный, так как если его поставить в текст html документа то цвет фона отдает в голубизну по сравнению с обычным фоном на формах. А если поставить D4D0C8 как выдает сайт https://colorscheme.ru/color-converter.html то тогда получается то что надо)

X++:
info(Global::int2Hex(Winapi::rgb2int(0, 0, 255), 6));
дает FF0000

а везде в аксапте при формировании цвета в HTML разметке FF0000 - это красный !

Скормил сайту
https://colorscheme.ru/color-converter.html
RGB (212, 208, 200)
и
RGB (0, 0, 255)

получил
D4D0C8
и
#0000FF


Где собака порылась ?

P.S. Ax2009 приложение SP5

Последний раз редактировалось Logger; 18.08.2017 в 13:14.