Преобразовать значение в градациях серого в представление RGB?

StackOverflow https://stackoverflow.com/questions/835753

  •  08-07-2019
  •  | 
  •  

Вопрос

Как я могу преобразовать значение в градациях серого (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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top