** 중요 업데이트, 아래 참조! **BufferedImage에서 setRGB를 수행하면 픽셀이 색상 대신 검은 색으로 변경됩니다.
BufferedImage의 픽셀을 Java에서 일련의 조건을 충족 할 때 특정 색상으로 변경하는 프로그램을 만듭니다. 그러나 이미지를 디스크에 쓸 때 색상이 지정되어야하는 픽셀은 검정색으로 표시됩니다.
먼저 내가 RGB 코드를 사용하여 색상을 정의 :
Color purple = new Color(82, 0, 99);
int PURPLE = purple.getRGB();
가 그럼 난 "빈"라는 BufferedImage에 내가 파일에서 변경하고자하는 이미지를 읽기 : 이제
BufferedImage blank = ImageIO.read(new File("some path"));
, 픽셀을 반복하고 위치 (x, y)의 픽셀이 기준과 일치하면 해당 색상을 자주색으로 바꿉니다.
blank.setRGB(x, y, PURPLE);
이제 "blank"를 디스크에 씁니다.
File output = new File("some other path");
ImageIO.write(blankIn, "png", output); // try-catch blocks intentionally left out
결과 파일은 보라색 픽셀로 "공백"이어야하지만 문제의 픽셀은 검은 색입니다. 나는 "blank"자체가 컬러 이미지이기 때문에 그 문제가 setRGB와 가져 오기 또는 내보내기 기능이 아니라는 사실을 알고 컬러 파일이므로 파일에 기록됩니다. 필자는 Graphics2D를 사용하고 setRGB를 피하도록 추천하는 게시물을 많이 보았지만 픽셀 별 색상 변경에 대한 논의는 없었습니다.
또한 다음과 같이 직접 비트 조작 시도:
blank.setRGB(x, y, ((82 << 16) + (0 << 8) + 99));
내가 아마 잘못하고 있어요,하지만 난 제대로에 넣어 경우 픽셀이 투명으로 설정지고 있기 때문에, 문제가되지 것입니다 내가 이것을 할 때 (숫자가 무엇을 말하는 것과 상관없이, 그것은 매우 이상하다.).
는 ** 난이 때 : 즉 그레이 스케일로 내 사진을 수정에서는 setRGB는 사실을 의미하므로
blank.setRGB(x, y, Color.RED.getRGB());
내 출력 파일, 그레이 스케일이다. 나는 이것이 실제로는 다소 간단한 문제라고 생각하지만 해결책은 나를 벗어난다.
답변이 내 것보다 훨씬 효율적입니다! – itsmichaelwang