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

<p>как я могу преобразовать значение в градациях серого (0-255) в значение/представление rgb? оно предназначено для использования в svg-изображении, которое, похоже, не имеет поддержки оттенков серого, только rgb ...</p><p>примечание: это не rgb -> оттенки серого, на которые уже дан ответ в другом вопросе, например <a href="https://stackoverflow.com/questions/687261/converting-rgb-to-grayscale-intensity">преобразование rgb в оттенки серого/интенсивность</a> )</p>

<p>быстрый и грязный подход состоит в том, чтобы повторить интенсивность оттенков серого для каждого компонента rgb. итак, если у вас есть шкала серого 120, она переводится в rgb (120, 120, 120).</p><p>это быстро и грязно, потому что эффективная яркость, которую вы получаете, зависит от фактической яркости субпикселей r, g и b используемого вами устройства.</p>

<p>если у вас есть значение шкалы серого в переменной и вы хотите создать новое значение в форме 0x00rrggbb, то быстрый способ сделать это:</p><pre><code>int rgb = grey * 0x00010101; </code></pre><p>или эквивалент на выбранном вами языке.</p>

<p>преобразование градаций серого в rgb просто. просто используйте r = g = b = значение серого. основная идея заключается в том, что цвет (если смотреть на монитор с точки зрения rgb) является аддитивной системой.</p><p> <a href="http://en.wikipedia.org/wiki/additive\_color">http://en.wikipedia.org/wiki/additive\_color</a> </p><p>таким образом, добавление красного к зеленому дает желтый. добавьте немного синего к этой смеси в равных количествах, и вы получите нейтральный цвет. полный [красный, зеленый, синий] = [255 255 255] дает белый цвет. [0,0,0] дает монитор черного цвета. промежуточные значения, когда все r = g = b равны, дадут номинально нейтральные цвета данного уровня серого.</p><p>незначительная проблема зависит от того, как вы видите цвет, он может быть не совсем нейтральным. это будет зависеть от того, как откалиброван ваш монитор (или принтер). есть интересные глубины науки о цвете, которые мы могли бы изучить с этого момента. я остановлюсь здесь.</p>

<p>серая шкала означает, что все значения имеют одинаковую интенсивность. установите все каналы (в rgb) равными значению серого, и вы получите черно-белое изображение rgb.</p>

<p>разве установка r, g и b на одно и то же значение (значение серой шкалы) для каждого пикселя не даст вам правильный оттенок серого?</p>

<p>вы также можете взглянуть на моё решение <a href="https://stackoverflow.com/questions/12004437/faster-assembly-optimized-way-to-convert-rgb8-image-to-rgb32-image">оптимизированный для faster assembly способ преобразования изображения rgb8 в изображение rgb32</a> . серый канал просто повторяется во всех других каналах.</p><p>цель состояла в том, чтобы найти быстрое возможное решение для преобразования с использованием x86/sse.</p>