Colors 是否将灰度值转换为RGB表示?

Colors 是否将灰度值转换为RGB表示?,colors,rgb,grayscale,Colors,Rgb,Grayscale,如何将灰度值(0-255)转换为RGB值/表示? 它用于SVG图像,它似乎没有灰度支持,只有RGB 注意:这不是RGB->grayscale,这已经在另一个问题中得到了回答,例如:灰度表示所有值具有相同的强度。将所有通道(以RGB为单位)设置为灰度值,您将获得RGB黑白图像。不将每个像素的R、G和B设置为相同的值(灰度值)以获得正确的灰度吗?快速而肮脏的方法是为RGB的每个分量重复灰度强度。所以,如果你有灰度120,它转换为RGB(120120120) 这既快又脏,因为您获得的有效亮度取决于您正

如何将灰度值(0-255)转换为RGB值/表示? 它用于SVG图像,它似乎没有灰度支持,只有RGB


注意:这不是RGB->grayscale,这已经在另一个问题中得到了回答,例如:

灰度表示所有值具有相同的强度。将所有通道(以RGB为单位)设置为灰度值,您将获得RGB黑白图像。

不将每个像素的R、G和B设置为相同的值(灰度值)以获得正确的灰度吗?

快速而肮脏的方法是为RGB的每个分量重复灰度强度。所以,如果你有灰度120,它转换为RGB(120120120)


这既快又脏,因为您获得的有效亮度取决于您正在使用的设备的R、G和B子像素的实际亮度。

将灰度转换为RGB很简单。只需使用R=G=B=灰度值。其基本思想是,颜色(从显示器上的RGB角度来看)是一种加法系统

因此,在绿色中加入红色会产生黄色。在混合液中加入等量的蓝色,你会得到一种中性颜色。完全打开[红、绿、蓝]=[255]将生成白色。[0,0,0]产量监视器为黑色。当R=G=B都相等时,中间值将产生给定灰度级别的名义中性颜色


一个小问题是取决于你如何看待颜色,它可能不是完全中性的。这取决于显示器(或打印机)的校准方式。从这一点上,我们可以深入探讨色彩科学的有趣深度。我就到此为止。

如果灰度值在0..255范围内,并且希望以0x00RRGGBB的形式生成一个新值,那么一种快速方法是:

int rgb = grey * 0x00010101;

或使用您选择的语言编写的同等版本。

您也可以查看我的解决方案。灰色通道仅在所有其他通道中重复


其目的是找到使用x86/SSE进行转换的快速可行解决方案。

不完全如此。这取决于您将如何查看颜色。显示器或打印机如何校准?您将在什么查看环境中看到颜色?如果要打印颜色,您的打印机如何校准、特征化?打印机和ICC配置文件采用了哪些设置?白点?使用什么光源查看打印?阳光?D50模拟灯泡?钨灯?在合理的近似程度上,R=G=B=灰度值是一个良好的开端。它会让你靠近。嗯,不。实际上你不会有黑白图像。您将拥有一个由各种灰度组成的图像。在较低的级别,实际像素将由红、绿和蓝点组成,强度级别应确保从远处观看的人将看到中性图像。做一个眼圈,看看显示器上名义上的灰色像素。您将看到一个由红、绿和蓝点组成的合成图。您正确地认为屏幕上的红色图像将由所有观看幻化的RGB组成。因此,所有颜色都将显示在屏幕上。我很难理解“你将有一个由各种灰度组成的图像”与灰度图像的区别。埃里克,它没有区别,但“灰度图像”与“黑白图像”(只有两种颜色)有很大区别。注意:“黑白”在通俗用法中的意思是“灰度”+1表示直接乘法。本能的做法是深入研究位移位和按位Or,但这要简单得多,而且只起作用。我们如何从中获得R、G和B值?14474460是RGB值。220为0xDC,14474460为0xDCDC。