java - 将 32 位颜色空间转换为 16 位

标签 java colors rgb

我有一个 32 位 (sRGB) 颜色空间的颜色,我想将其转换为具有位顺序 ABBBBBGGGGGRRRRR 的 16 位颜色空间。

我读到可以使用矩阵在空格之间进行转换,但我不确定它是如何工作的。

有人可以给我指出一个执行此操作的 java 示例吗?或者帮我做数学题吗?我们将不胜感激。

我的想法是将 32 位 RGB 值(rgb 0-255)转换为 CMY,然后将 CMY 转换回 RGB 16 位颜色空间(rgb 0-31)。

有没有办法做到这一点并进行必要的修正,以便我最终得到一个像样的图像?

最佳答案

无需往返 CMY。
只要稍微改变一下就能到达那里。

首先分割32位值。
它实际上是 24 位 RGB 加上 8 位 Alpha channel 。

然后我们移出最低有效位。

我们走吧。

char convert32Colorto16(Color color) {
  byte a,r,g,b;
  r = color.getRed() >> 3;
  g = color.getGreen() >> 3;
  b = color.getBlue() >> 3;
  a = color.getAlpha() >> 7;
  return (a << 15) | (b << 10) | (g << 5) | (r);
}

请注意,此处的 char 兼作无符号短整型。

这是快速简便的路线。
如果您采用颜色调色板并使用 32768 个最常见的颜色(假设 1 位用于 alpha channel ),那么您将必须对那些不在查找表中的像素进行大量查找和邻近选择,但是你会得到一张更好看的照片。

获得更好质量的另一个选择是忘记 Alpha channel 并将 6 个像素分配给绿色 channel 。 (人眼对绿色最敏感)。

关于java - 将 32 位颜色空间转换为 16 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19204472/

相关文章:

css - 计算从颜色 A 到颜色 B 的色调旋转

java - 使用 RGBA 在 Java Swing 中绘图

java - 将青色的整数颜色转换为 RGB 时遇到问题

ruby - Rails 3 的 RGB 颜色选择器

java - 如何从 Intellij 中的 src 文件夹访问 Gradle 项目的 build 文件夹中生成的类

java - Android 的替代 XML 解析器实现

colors - 如何使一个屏幕上的颜色看起来与另一个屏幕上的颜色相同

python - 如何用每个像素的 RGB 值构建图像

Java 当我将参数传递给此方法时,在执行该方法中的任何代码之前,它被错误地除以我的常量之一

java - Web 客户端应用程序收到 "unable to find valid certification path to requested target"