如何修改Java IndexColorModel的映射?

时间:2015-03-02 21:37:33

标签: java bufferedimage

我想将一种颜色(黄色,有点特定)更改为从.GIF文件加载的BufferedImage中的另一种颜色。我应该可以使用getRGB和setRGB轻松地完成它,但如果我可以改变IndexColorModel的'yellow'索引所指的颜色,它会更有效率。如果失败了,是否可以创建一个新的IndexColorModel,它具有更改的地图?

1 个答案:

答案 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并保存。