如何修改 Java IndexColorModel 的地图?

How can I modify the map of a Java IndexColorModel?

我想将从 .GIF 文件加载的 BufferedImage 中的一种颜色(黄色,有点具体)更改为另一种颜色。我应该能够使用 getRGB 和 setRGB 轻松地做到这一点,但如果我可以只更改 IndexColorModel 的 'yellow' 索引所指的颜色,效率会更高。如果做不到这一点,是否可以创建一个具有更改地图的新 IndexColorModel?

也许是这样的:

     BufferedImage bi = javax.imageio.ImageIO.read(new File("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 并保存它。