이미지, 이전 색상의 16 진수 값 및 새 색상의 16 진수 값을 취한 다음 이전 색상의 모든 픽셀을 새로운 색상으로 변환하는 메소드를 작성하려고합니다. 색깔. 현재, if 문이 전혀 작동하지 않는 것처럼,이 메서드는 전체 이미지에 새로운 색을 칠합니다. 이 방법은색상 변환
private void convertColors(BufferedImage img, int oldColor, int newColor)
{
Graphics g = img.getGraphics();
g.setColor(new Color(newColor));
Color old = new Color(oldColor);
for(int x = 0; x < img.getWidth(); x++)
{
for(int y = 0; y < img.getHeight(); y++)
{
Color tmp = new Color(img.getRGB(x, y));
if(tmp.equals(old));
{
System.out.println("Temp=" + tmp.toString() + "Old=" + old.toString() + "New=" + g.getColor().toString());
g.fillRect(x, y, 1, 1);
}
}
}
g.dispose();
}
* oldColor의 진수는 0xFFFFFF
(흰색)과 newColor에 대한 0xFF0000
(빨간색)입니다.
나는 결과 이런 종류의 얻을 println 메소드 방법 사용 :
Temp=java.awt.Color[r=0,g=0,b=0]Old=java.awt.Color[r=255,g=255,b=255]New=java.awt.Color[r=255,g=0,b=0]
Temp=java.awt.Color[r=255,g=255,b=255]Old=java.awt.Color[r=255,g=255,b=255]New=java.awt.Color[r=255,g=0,b=0]
scond 라인이 올바른 보이는, 임시 색상과 오래된 동일을, 그러나 그것은 분명히 최초의 경우가 아닙니다. 나는 또한 새로운 BufferedImage를 만들고 픽셀을 복사하려고 시도했지만 동일한 결과를 남긴다 ... equals 메서드가 작동하지 않거나 또는이 전체 메서드가 제대로 작동하지 않는다고 생각하고이 작업을 수행하는 더 좋은 방법이 있습니까? 도움을 주셔서 감사합니다.
getRGB를 사용하여 색상을 얻기과 작은 사각형 그리기 -이 특히 게임을 느리게 할 것이다. 빠른 방법은 BufferedImage 뒤에있는 int 배열을 직접 조작 한 다음 변경된 이미지를 한 번에 그려 보는 것입니다. – lbalazscs
@lbalazscs 당신 말이 맞아요, 저는 현재 어떻게 구현하고 rgb 필터를 사용하여 자신의 필요를 채워주고 있습니다. 하지만 그는 이미지의 그래픽을 변경하기 때문에이 함수를 한 번 호출하면 저장된 이미지의 색상이 정확하지 않습니다. – luk2302
@lbalazscs는 I 그렇게하려고하면 경우 (화소 [X + Y의 *의 img.getWidth()] == oldColor) \t \t \t \t { \t \t \t \t \t 화소 [X + Y의 *의 IMG.getWidth()] = newColor; \t \t \t} if 문으로 들어가지만 setRGB를 호출해도 변경 내용이 표시되지 않습니다. newImg.setRGB (0, 0, img.getWidth(), img.getHeight(), pixels, 0, img.getWidth()); btw, 무엇 오프셋 및 scansize 무엇입니까? – StrongJoshua