我找不到将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无法访问调色板,因此我提出了以下问题:Access to the color palette in an XSSFWorkbook
答案 0 :(得分:3)
颜色索引和RGB值之间没有数学关系。这是一个查找。
八位索引颜色表示每个像素的颜色由数字0-255表示。这些颜色实际上取决于你的调色板(就像画家会使用的那样!)因此,八位可以让你的照片中有256种不同的颜色。
如果您的图片以彩色显示,那么您在某个地方会有一个调色板,它会告诉您哪个索引与哪个RGB三元组相对应。