将8位索引颜色转换为RGB



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

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

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

我在SO上发现了一个类似的问题,但"packed"例程失败,"Color value outside range 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中的调色板

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

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

如果你的图像显示为彩色,那么你在某个地方有一个托盘,它会告诉你什么索引对应于什么RGB三元组。

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

最新更新