속도가 중요하지 않은 경우 가장 바보 같은 해결책을 선택합니다. 간단히 색상을 수동으로 바꾸십시오.
BufferedImage.getRGB(...)으로 모든 픽셀 값을 얻을 수 있습니다. 그런 다음 색상이 목록에 있는지 확인하고 적절하게 교체하십시오. 나중에 setRGB를 사용하여 새 색상을 저장할 수 있습니다.
여기 예입니다 :
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import javax.imageio.ImageIO;
public class Equ{
public static void main(String[] args) throws IOException {
BufferedImage img = new BufferedImage(20, 20, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = img.createGraphics();
g.setColor(Color.white);
g.fillRect(0, 0, 20, 20);
g.setColor(Color.black);
g.fillRect(5, 5, 10, 10);
Color[] mapping = new Color[]{
Color.black, Color.white, // replace black with white
Color.white, Color.green // and white with green
};
ImageIO.write(img, "png", new File("original.png"));
swapColors(img, mapping);
ImageIO.write(img, "png", new File("swapped.png"));
}
public static void swapColors(BufferedImage img, Color ... mapping){
int[] pixels = img.getRGB(0, 0, img.getWidth(), img.getHeight(), null, 0, img.getWidth());
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
for(int i = 0; i < mapping.length/2; i++){
map.put(mapping[2*i].getRGB(), mapping[2*i+1].getRGB());
}
for(int i = 0; i < pixels.length; i++){
if(map.containsKey(pixels[i]))
pixels[i] = map.get(pixels[i]);
}
img.setRGB(0, 0, img.getWidth(), img.getHeight(), pixels, 0, img.getWidth());
}
}
안티 앨리어싱을 사용하고 있습니까? 아니면 정확한 색상만을 사용하는 이미지입니까? – kritzikratzi
정확한 색상 : 그들은 Megaman X – jedyobidan
아에서 16 비트 스프라이트를 얻었습니다. 그러면 직접 바꿀 수 있습니다. 잠시 후 예를 게시 할 것입니다. – kritzikratzi