如何修改 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 并保存它。
我想将从 .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 并保存它。