我想将一种颜色(黄色,有点特定)更改为从.GIF文件加载的BufferedImage中的另一种颜色。我应该可以使用getRGB和setRGB轻松地完成它,但如果我可以改变IndexColorModel的'yellow'索引所指的颜色,它会更有效率。如果失败了,是否可以创建一个新的IndexColorModel,它具有更改的地图?
答案 0 :(得分:1)
也许是这样的:
BufferedImage bi = javax.imageio.read("pathToGif");
if(bi.getColorModel() instanceof IndexColorModel) {
IndexColorModel colorModel = (IndexColorModel)bi.getColorModel();
int colorCount = colorModel.getMapSize();
byte[] reds = new byte[colorCount];
byte[] greens = new byte[colorCount];
byte[] blues = new byte[colorCount];
colorModel.getReds(reds);
colorModel.getGreens(greens);
colorModel.getBlues(blues);
Color yellow = Color.YELLOW;
Color blue = Color.BLUE;
for(int i = 0; i < reds.length; i++) {
Color newColor = new Color(reds[i]&0xff, greens[i]&0xff, blues[i]&0xff);
if(newColor.equals(yellow)) {
reds[i] = (byte)blue.getRed();
greens[i] = (byte)blue.getGreen();
blues[i] = (byte)blue.getBlue();
break;
}
}
}
这会将黄色变为蓝色,然后您可以使用更改的颜色模型创建新的BufferedImage并保存。