Преобразовать значение в градациях серого в представление RGB?
Вопрос
Как я могу преобразовать значение в градациях серого (0-255) в значение / представление RGB? Он предназначен для использования в SVG-изображении, которое, кажется, не поддерживает серого, только RGB ...
Примечание: это не RGB - > оттенки серого, на которые уже дан ответ в другом вопросе, например Преобразование RGB в оттенки серого / интенсивность )
Решение
Быстрый и грязный подход - повторить интенсивность оттенков серого для каждого компонента RGB. Итак, если у вас есть шкала серого 120, она переводится в RGB (120, 120, 120).
Это быстро и грязно, потому что эффективная яркость, которую вы получаете, зависит от фактической яркости субпикселей R, G и B используемого вами устройства.
Другие советы
Если у вас есть значение шкалы серого в переменной и вы хотите создать новое значение в форме 0x00RRGGBB, то быстрый способ сделать это:
int rgb = grey * 0x00010101;
или эквивалент на выбранном вами языке.
Преобразование градаций серого в RGB очень просто. Просто используйте R = G = B = значение серого. Основная идея заключается в том, что цвет (с точки зрения RGB на мониторе) является аддитивной системой.
http://en.wikipedia.org/wiki/Additive_color
Таким образом, добавление красного к зеленому дает желтый. Добавьте немного синего к этой смеси в равных количествах, и вы получите нейтральный цвет. Полный [красный, зеленый, синий] = [255 255 255] дает белый цвет. [0,0,0] дает монитор черного цвета. Промежуточные значения, когда все R = G = B равны, дадут номинально нейтральные цвета данного уровня серого.
Небольшая проблема в зависимости от того, как вы видите цвет, он может быть не совсем нейтральным. Это будет зависеть от того, как откалиброван ваш монитор (или принтер). Есть интересные глубины науки о цвете, которые мы могли бы изучить с этого момента. Я остановлюсь здесь.
Серая шкала означает, что все значения имеют одинаковую интенсивность. Установите все каналы (в RGB) равными значению серого, и вы получите черно-белое изображение RGB.
Разве настройка R, G и B на одно и то же значение (значение серой шкалы) для каждого пикселя не даст вам правильный оттенок серого?
Вы также можете посмотреть на мое решение "> Оптимизированный способ быстрой сборки конвертирует изображение RGB8 в изображение RGB32 . Серый канал просто повторяется во всех других каналах.
Целью было найти быстрое возможное решение для конвертации с использованием x86 / SSE.