java - 将 8 位索引颜色转换为 RGB

标签 java colors apache-poi itext

我找不到将 8 位索引颜色转换为 RGB 的转换例程。对于一些背景细节,我正在使用 POI 读取一个 xlsx 文件,其中一个单元格的背景颜色索引为值 64。当我尝试在 iText 中创建一个 PdfPCell 并使用此值作为背景 BaseColor 时,我得到了海军蓝色正确的颜色应该是黑色。所以我需要一个将 64 的值转换为 rgb(0, 0, 0) 的例程。

这是将背景设置为海军蓝的代码

short c = ((XSSFColor) color).getIndexed();
BaseColor base = new BaseColor(c);

我在 SO 上发现了类似的问题,但“打包”例程因“颜色值超出范围 0-255”而失败。

short packed = ((XSSFColor) color).getIndexed();
log.debug("Indexed {}", packed);
int r = (packed >> 5) * 32;
int g = ((packed >> 2) << 3) * 32;
int b = (packed << 6) * 64;
BaseColor base = new BaseColor(r, g, b);

更新 1: 似乎文档中某处有一个 Palette,在我的例子中是 XSSFPalette。找到答案后,我会在此处更新。

更新 2: XSSFWorkbook 不提供对调色板的访问,因此我的后续问题是:Access to the color palette in an XSSFWorkbook

最佳答案

颜色索引和 RGB 值之间没有数学关系。这是一个查找。

八位索引颜色意味着每个像素的颜色由数字 0-255 表示。这些颜色实际上是什么取决于您的调色板(就像画家会使用的一样!)因此,八位允许您在图片中拥有 256 种不同的颜色。

如果您的图像以彩色显示,那么您在某处有一个调色板会告诉您哪个索引对应于哪个 RGB 三元组。

http://en.wikipedia.org/wiki/Indexed_color

关于java - 将 8 位索引颜色转换为 RGB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18111080/

相关文章:

java - 使用 Apache POI 更新 Excel 文本框中的文本但保留格式

java - 无法在 ListView 中列出数据库中的所有值

Java - 过滤掉最低整数的汇总列表

python - RGB 到 YCbCr 的转换问题

android - 在 Android 中用透明颜色填充 Canvas

java - 将电话号码从 double 转换为整数

Java Apache POI : setting default column style doesnt work for existing values

java - 使用 Java 将多个图像转换为灰度

java - 使用 canvas.drawBitmap 时位图重叠

qt - Qt组件边框颜色