ColorToPRGB

Преобразует тип color в тип uint для получения premultiplied ARGB-представления цвета — PRGB. PRGB формат цвета используется при создании графического ресурса, вывода текста и в классе стандартной библиотеки CCanvas с форматом цвета COLOR_FORMAT_ARGB_RAW  (компоненты не обрабатываются терминалом и должны быть корректно подготовлены пользователем).

uint  ColorToPRGB(
   color  clr,          // преобразуемый цвет в формате color
   uchar  alpha=255     // альфа-канал, управляющий прозрачностью цвета
   );

Параметры

clr

[in]  Значение цвета в переменной типа color.

alpha

[in]  Значение альфа-канала, для получения цвета в формате ARGB. Задается значением от 0 (цвет накладываемого пикселя совсем не меняет отображения нижележащего пикселя) до 255 (цвет накладывается полностью и перекрывает собою цвет нижележащего пикселя). Прозрачность цвета в процентом выражении вычисляется как  (1-alpha/255)*100%, то есть чем меньше значение альфа-канала, тем более прозрачен цвет.

Возвращаемое значение

Представление цвета в формате ARGB, где в четырех байтах типа uint прописаны по порядку значения Alfa, Red, Green, Blue (альфа-канал, красный, зеленый, голубой).

Примечание

Чем PRGB отличается от ARGB?

Существуют два распространенных представления RGBA-цвета с альфа-каналом:

  • straight (обычное) ARGB — RGB хранятся “как есть”, альфа отдельно;
  • premultiplied (PRGB) — RGB уже умножены на альфу.

Режим COLOR_FORMAT_ARGB_RAW предполагает, что цветовые компоненты уже корректно подготовлены и терминал их не “нормализует/не пересчитывает”. Поэтому в сценариях, где ожидается premultiplied-цвет, нужно передавать именно PRGB, иначе возможны визуальные артефакты/несовпадения при отрисовке.

PRGB цвет вычисляется по формуле:

R = R * A / 255

G = G * A / 255

B = B * A / 255

A = A 

Особые случаи:

  • при alpha = 255 результат совпадает с ColorToARGB(clr,255) (предумножение не меняет RGB);
  • при alpha = 0 результат становится 0x00000000 (полностью прозрачный пиксель, RGB = 0).

Пример:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   uchar alpha = 0x55// 0x55 = 85; прозрачность ~ (255-85)/255 * 100% = 66.7%
   color c = clrWhite;
 
   PrintFormat("0x%.8X - %s"cColorToString(c,true));
   PrintFormat("0x%.8X - ARGB (straight)"ColorToARGB(calpha));
   PrintFormat("0x%.8X - PRGB (premultiplied)"ColorToPRGB(calpha));
   /*
   0x00FFFFFF - clrWhite
   0x55FFFFFF - ARGB (straight)
   0x55555555 - PRGB (premultiplied)
   */
}

Смотри также

Ресурсы, ColorToARGB, ResourceCreate(), TextOut(), Тип color, Типы char, short, int и long