为了看到下面代码的影响,我需要一个验证if测试的图像文件;你能给我不同的IndexColorModel
图像。
System.out.println(input.getColorModel());
System.out.println("vvvvvv");
if (input.getColorModel() instanceof IndexColorModel) {
System.out.println("eeeeeeeee");
// Retrieve the IndexColorModel
IndexColorModel icm = (IndexColorModel)input.getColorModel();
// Cache the number of elements in each band of the colormap.
int mapSize = icm.getMapSize();
// Allocate an array for the lookup table data.
System.out.println("eeeeeeeee");
System.out.println(mapSize);
byte[][] lutData = new byte[3][mapSize];
// Load the lookup table data from the IndexColorModel.
icm.getReds(lutData[0]);
icm.getGreens(lutData[1]);
icm.getBlues(lutData[2]);
// Create the lookup table object.
LookupTableJAI lut = new LookupTableJAI(lutData);
// Replace the original image with the 3-band RGB image.
input = JAI.create("lookup", input, lut);
}
答案 0 :(得分:0)
IndexColorModel
通常是从带有PLTE(调色板)块的GIF或PNG创建的。带调色板的BMP文件也可以使用。
尝试使用ImageIO.read(yourGIF)
阅读GIF文件时,应该使用IndexColorModel
。
另一种选择是创建一个这样的空白图像,如果你可以使用固定的颜色图:
input = new BufferedImage(1, 1, BufferedImage.TYPE_BYTE_INDEXED);
但我认为对于您的用例,使用预定义的查找表创建新的IndexColorModel
更简单。您无需从输入图像中获取它。