我找不到将 8 位索引颜色转换为 RGB 的转换例程。对于一些背景细节,我正在使用 POI 读取 xlsx 文件,其中一个单元格的背景颜色索引为值 64。当我尝试在 iText 中使用此值作为背景 BaseColor 创建 PdfPCell 时,我得到了海军蓝正确的颜色应该是黑色。所以我需要一个将 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 不提供对调色板的访问,因此我的以下问题:访问 XSSFWorkbook 中的调色板