2011-10-08 6 views
1

이미지에 경로를 그리는 작은 프로그램을 Java로 작성하고 있습니다. 이렇게하려면, 나는 다음과 같은 코드를 가지고BufferedImage : 빨간색이 회색으로 표시됩니다.

경로 (ImageIO.read에서) X 및 Y 좌표와 이미지는 표준 BufferedImage의 옛 객체의 대기열입니다
while(!path.isEmpty()) 
{ 
    Position p = path.poll(); 
    image.setRGB(p.getX(),p.getY(),Color.red.getRGB()); 
} 

. 이 코드는 대기열에있는 이미지의 모든 픽셀에 빨간색 픽셀을 그립니다. 빨강 대신에,이 이미지를 파일에 쓸 때 나는 회색을 띤다.

The diagonal gray line SHOULD be Red...

Color.red.getRGB의 반환 값 0xFFFF0000이다. 빨간색으로 설정 한 후 픽셀에서 getRGB를 수행하면 0xFF7F7F7F가 다시 나타납니다.

저는 Java에 비교적 익숙하지 않으며 왜 이런 일이 일어나는지 전혀 모릅니다. 어떤 도움이라도 대단히 감사하겠습니다.

차이가 나는 경우 이미지는 .bmp 파일에서 가져옵니다.

답변

2

그레이 스케일 유형의 BufferedImage 또는 해당 sRGB 값을 회색 색상으로 매핑하는 유형을 사용할 수 있습니다.

  1. 명시 적으로 BufferedImage를 초기화하는 경우에 imagetype 또는 ColorModel의 인수, depending on the constructor you're using 중 하나를 체크 아웃 :

    일반적으로, 당신은 두 가지 가능성 중 하나가 있습니다.

  2. 팩토리 메서드 또는 간접적으로 이미지 객체를 초기화하는 경우 getType() 메서드의 값을 확인하십시오. 값은 JavaDoc에 나열되어 있습니다. 이것이 "올바른"값 (RGB 유형 중 하나) 인 경우 getColorModel()의 반환을 확인하십시오.

.bmp 파일에서 이미지를로드하므로 두 번째 이미지가 원인 일 수 있습니다.

색상 값 변환 문제에 대한 자세한 내용은 herehere을 참조하십시오.

일반적으로 Java에서 이미지 처리에 대해 배우고 싶다면 우선 * TYPE_INT_ARGB *가있는 두 번째 BufferedImage 생성자를 시작 유형으로 사용하고 코드를 확장하십시오. 초기 Java 일을 기억하면서 이미지로드를 학습하는 것은 약간 까다 롭습니다 :).

또한 official Java2D tutorial을 읽을 수도 있습니다. 이 주제에 대한 아주 좋은 소개입니다.

+0

잘 생각해보세요! 감사합니다 +1! –

+0

위대한 답변 주셔서 감사합니다! 그게 내 문제 야. 나는 타입의 값을 검사했고 그것은 나에게 TYPE_BYTE_GRAY 인 10을 주었다. 이 값을 내가 어떻게 스스로 설정할 수 있는지 알고 있니? 아래쪽에 추가 한 링크를 체크 아웃했지만 형식 값에 대해 아무 것도 말하지 않았습니다 (BufferedImage를 직접 만들 때를 제외하고 나는 그 방법을 모릅니다.) 현재 ImageIO.read를 사용하고 있습니다. –

+0

도움이 된 것을 기쁘게 생각합니다. 혼자서 이미지를 만드는 방법에 대한 내 답변의 첫 번째 링크를 참조하십시오. 또한 Java2D 자습서에는이 주제에 대한 더 자세한 내용이 담겨 있으며 "이미지 작업"의 마지막 두 하위 섹션 - 빈 이미지를 만든 다음로드 된 이미지를 그 위에 그려주는 방법을 보여줍니다. ImageIO를 사용하고 싶다면.read()에서 가장 간단한 해결책은 가장 좋아하는 이미지 편집기에서 파일을 열고 색상 BMP로 저장하는 것입니다. 그렇지 않으면 튜토리얼에 좋은 읽기를 제공하는 것이 좋습니다. :) –

관련 문제