Самым простым решением было бы сделать манипулирование Pixel by Pixel. Для этого вам понадобится изображение с альфа-каналом. Передайте TYPE_INT_ARGB
в конструктор BufferedImage
после ширины и высоты.
Затем скопируйте в два вложенных for
Переходите каждый пиксель к новому изображению следующим образом:
BufferedImage newImg = new BufferedImage(origImg.getWidth(), origImg.getHeight(), BufferedImage.TYPE_INT_ARGB);
Color background = new Color(0,0,0,0); //RGBA
for (int x = 0; x < origImg.getWidth(); x++) {
for (int y=0; y < origImg.getHeight(); y++) {
Color newColor = new Color(origImg.getRGB(x, y) | 0xff000000, true);
if(/*check for chromakey color*/)
newImg.setRGB(x, y, background.getRGB())
else
newImg.setRGB(x, y, newColor.getRGB());
}
}
This предполагается, что у вас нет альфа-компонента в исходном изображении, потому что он будет перезаписан |0xff000000
с 255.