it-swarm.com.ru

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

Как я могу преобразовать значение в градациях серого (0-255) в значение/представление RGB? Оно предназначено для использования в SVG-изображении, которое, похоже, не имеет поддержки оттенков серого, только RGB ...

Примечание: это не RGB -> оттенки серого, на которые уже дан ответ в другом вопросе, например Преобразование RGB в оттенки серого/интенсивность )

18
Rabarberski

Быстрый и грязный подход состоит в том, чтобы повторить интенсивность оттенков серого для каждого компонента RGB. Итак, если у вас есть шкала серого 120, она переводится в RGB (120, 120, 120).

Это быстро и грязно, потому что эффективная яркость, которую вы получаете, зависит от фактической яркости субпикселей R, G и B используемого вами устройства.

26
Ates Goral

Если у вас есть значение шкалы серого в переменной и вы хотите создать новое значение в форме 0x00RRGGBB, то быстрый способ сделать это:

int rgb = grey * 0x00010101;

или эквивалент на выбранном вами языке.

26
izb

Преобразование градаций серого в RGB просто. Просто используйте R = G = B = значение серого. Основная идея заключается в том, что цвет (если смотреть на монитор с точки зрения RGB) является аддитивной системой.

http://en.wikipedia.org/wiki/Additive_color

Таким образом, добавление красного к зеленому дает желтый. Добавьте немного синего к этой смеси в равных количествах, и вы получите нейтральный цвет. Полный [красный, зеленый, синий] = [255 255 255] дает белый цвет. [0,0,0] дает монитор черного цвета. Промежуточные значения, когда все R = G = B равны, дадут номинально нейтральные цвета данного уровня серого.

Незначительная проблема зависит от того, как вы видите цвет, он может быть не совсем нейтральным. Это будет зависеть от того, как откалиброван ваш монитор (или принтер). Есть интересные глубины науки о цвете, которые мы могли бы изучить с этого момента. Я остановлюсь здесь.

9
user85109

Серая шкала означает, что все значения имеют одинаковую интенсивность. Установите все каналы (в RGB) равными значению серого, и вы получите черно-белое изображение RGB.

7
Erik

Разве установка R, G и B на одно и то же значение (значение серой шкалы) для каждого пикселя не даст вам правильный оттенок серого?

4
jlew

Вы также можете взглянуть на моё решение Оптимизированный для Faster Assembly способ преобразования изображения RGB8 в изображение RGB32 . Серый канал просто повторяется во всех других каналах.

Цель состояла в том, чтобы найти быстрое возможное решение для преобразования с использованием x86/SSE.

0
bkausbk