我有一个想法,制作一种绕过 255 这个数值颜色值的颜色。
现在,如果您不知道,计算机颜色是通过十六进制代码创建的,其最大值是 FF,即十六进制代码 255。我们如何看待用绕过 FF 的十六进制代码创建的颜色?它看起来肯定很奇怪。
但是如果我们想要制作颜色的话,该如何传递 255 呢?
答案1
如何处理 FF/255 的“溢出”完全取决于程序。
不过,通常情况下,数据会遵循特定的结构,而尝试增加某一部分超出其通常用途的范围最终会修改其他数据。
如果您能够以某种方式“超越” 0xFF,那么下一个值将是 0x100。要么那个 1 会以某种方式覆盖或增加下一个字节,要么它会被丢弃。
对于 RGB 有序像素数据,您可能也会破坏绿色数据,并且至少会将红色通道设置为 0x00。
更多详情,请访问维基百科整数溢出
当然,这假设每个通道都有 8 位颜色范围,即 0x00-0xFF(十进制 0-255)。如果您想使用更宽的颜色空间,则需要支持它的程序和文件格式。现在有更多程序支持图像的 10 位颜色配置文件,可以提供 0-1024 的范围,但最高值仍然只代表“完全开启”,并且在颜色方面只提供“关闭”和“开启”之间更精细的渐变。
8 位色彩空间中的所有红色 255 在转换后看起来与 10 位空间中的红色 1023 相同。相反,10 位色彩空间中的实际值 255 看起来会相当暗。
答案2
像素值超过 255
有些图像格式使用 2 个字节来表示每个子像素的值,即 0-65535 的值 - 但原因可能与您想象的不同。它不会使最大颜色更亮(65535 与 1 字节格式中的 255 一样亮),但会为您提供更多步骤来处理。
换句话说,0 始终表示 0% 亮度,最大值(255 或 65535)始终表示 100% 亮度。对于最大值 255,可以表示的最小色差为 0.39%,而对于 65535,可以表示的最小色差为 0.0015%。
对于要按原样显示的图像,使用如此精确的颜色是没有意义的——人眼无论如何都无法区分如此细微的差异——但对于要进一步处理的图像来说,这很有用。一个例子是视频游戏纹理,它会受到照明等的影响,仅使用 1 字节深色通道处理就会产生色带。
色域
专用于色彩敏感工作的显示器具有更宽的色域,这意味着它们可以产生更广泛的颜色。在这样的屏幕上,相同的颜色值 255(或 65535)看起来比在普通屏幕上更生动。如果旧款/便宜的笔记本电脑屏幕上的颜色与新款/更昂贵的笔记本电脑相比显得褪色,可能是出于同样的原因:更昂贵的笔记本电脑具有更宽的色域(尽管仍然不如专业产品那么宽),并且通常对比度也更差。1366×768 屏幕因在这方面表现相对较差而臭名昭著。
这可能是您在问这个问题时想到的,只是输入的颜色值相同。只是最大输入值对应的颜色更鲜艳,输入值的相同增量会产生更明显的差异。
顺便说一句,这些专业显示器太鲜艳了,不适合用于普通用途,比如网页浏览等 - 一切看起来都非常鲜艳,尤其是绿色。它们通常可以切换到“常规”色域,以使颜色适合非色彩敏感的工作。
HDR
HDR 在数字作品中代表着很多不同的东西。这里我指的是“HDR 显示器”,即接受深度超过 8 位的颜色并提供高于平均水平的峰值亮度的显示器。本质上是结合了上述两点的显示器。
大多数此类显示器每个通道接受 10 位颜色,因此范围为 0-1023。但如果显示器的峰值亮度非常高,那么 1023 并不对应于您习惯的 100% 亮度 - 它比这还要高。如果图像源(例如计算机)知道这一点,它可以显示“常规亮度”内容而无需使用额外的 2 位颜色(即最大为 255),但它也可以在选定区域中使用更高的亮度来实现令人印象深刻的动态范围。所以现在当你在视频游戏中看着太阳时,显示器实际上会在该区域变得非常明亮,从而产生更逼真的效果。