ОК.
Я работаю с кодом FW1FontWrapper для использования с DirectX
: https://archive.codeplex.com/?p=fw1
Это избавило меня от необходимости использовать устаревшие и бесполезныеМеханизм шрифтов работает на основе текстур.
Однако функция DrawString в этом обёртке предъявляет особые требования к представлению цвета.
UINT32 Color : In the format 0xAaBbGgRr
Данные, которые я даю для этой задачи, являются постоянной альфа-версиейзначение: 1.0f.
И 3 переменных значения с плавающей запятой для R, G и B в диапазоне от 0,0f до 1,0f.
Учитывая специфическое расположение цветов в UNIT32, я пытаюсьнаписать функцию, которая создаст этот UNIT32, используя 3 значения с плавающей запятой, которые мне даны.
Моя попытка
UINT32 TextClassA::getColour(SentenceType* sentence)
{
//Convert each float value to its percentage of 255
int colorb = 255 * sentence->blue;
int colorg = 255 * sentence->green;
int colorr = 255 * sentence->red;
//convert each int to 8 bit Hex
UINT8 ucolorb = colorb;
UINT8 ucolorg = colorg;
UINT8 ucolorr = colorr;
//Push each hex back onto a UNIT32
UINT32 color = 0xFF + (ucolorb << 6) + (ucolorg << 4) + (ucolorr << 2);
return color;
}
SentenceType
красный, зеленый и синий просто поплавки для каждого значения RGB от 0,0-1,0f
Моя идея.
Было примерно то, что я мог:
конвертировать каждое значение с плавающей запятой в его процент 255 (не слишком беспокоиться ос абсолютной точностью.
Преобразование этих целых значений в UINT8s
Затем вставьте их обратно в UINT32