如何将 24 位 RGB 转换为 8 位 RGB

发布于 2024-12-08 09:30:10 字数 86 浏览 0 评论 0原文

我想知道将 24 位 RGB 颜色(每种颜色 8 位)转换为 8 位颜色(2 位蓝色、3 位绿色、3 位红色)的最佳方法是什么。我想要 C 代码来执行此操作。

I was wondering what is the best way to convert a 24-bit RGB color (8 bits per color) into an 8-bit color (2bits Blue, 3 Green, 3 Red). I'd like C code for doing this.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

梦一生花开无言 2024-12-15 09:30:10

8 位 RGB 通常是索引(调色板)颜色格式,请参阅调色板(计算)

不过,按照您描述的方式,从 24 bpp 中获取 8 bpp 非常简单 - 您需要剥离最低有效位并将这些位合并为每个像素的单字节值。 AFAIK 它不是标准或众所周知的像素颜色表示。

8 bit RGB is normally an indexed (palettized) color format, see Palette (computing).

The way you described it though, getting 8 bpp out of 24 bpp is pretty straightforward - you would need to strip least significant bits and merge the bits into single byte value, per pixel. AFAIK it is not a standard or well-known pixel color representation.

绮烟 2024-12-15 09:30:10

不是用C语言,而是用JavaScript。

encodedData = (Math.floor((red / 32)) << 5) + (Math.floor((green / 32)) << 2) + Math.floor((blue / 64));

https://stackoverflow.com/a/25258278/2130509

Not in C but in javascript.

encodedData = (Math.floor((red / 32)) << 5) + (Math.floor((green / 32)) << 2) + Math.floor((blue / 64));

https://stackoverflow.com/a/25258278/2130509

爱已欠费 2024-12-15 09:30:10

要将 8bit [0 - 255] 值转换为 3bit [0, 7],0 不是问题,但记住 255 应该转换为 7,所以公式应该是 Red3 = Red8 * 7 / 255。

转换 24bit 颜色转换为 8 位 (RRRGGGBB),

8bit Color = (Red * 7 / 255) << 5 + (Green * 7 / 255) << 2 + (Blue * 3 / 255)

To convert 8bit [0 - 255] value into 3bit [0, 7], the 0 is not a problem, but remember 255 should be converted to 7, so the formula should be Red3 = Red8 * 7 / 255.

To convert 24bit color into 8bit (RRRGGGBB),

8bit Color = (Red * 7 / 255) << 5 + (Green * 7 / 255) << 2 + (Blue * 3 / 255)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文