2012-05-30 3 views
0

난 그냥 작동하지 않는 정말 간단한 코드가 있습니다Java ImageIO에서 픽셀 값을 설정할 수 없습니까?

int[] manualPixels = new int[width * height * 3]; 
for (int index = 0; index < manualPixels.length; index++) { 
    if (index % 3 == 2) { 
     manualPixels[index] = 255; 
    } 
} 
BufferedImage pixelImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);  
pixelImage.setRGB(0, 0, width, height, manualPixels, 0, width); 

ImageIO.write(pixelImage, "jpeg", tempFile); 

이해야한다, 지금까지의 내가 결정할 수 같은 빨간색, 녹색, 파란색이 이미지 출력, 0, 1, 또는 2인지 여부에 따라 for 루프의 if 문에 사용됩니다. 문제는 그 대신에 내가 설정 한 픽셀에 관계없이 항상 파란색과 검은 색 줄무늬가 생기는 것입니다. 예를 들어 :

enter image description here

확실 해요 내가 여기에 잘못하고있어 기본적인 것은이 있어야합니다, 난 그냥이 무엇인지 확인할 수 없습니다. 어떤 아이디어?

+0

"난 그냥 작동하지 않는 정말 간단한 코드가"의 이야기를 내 인생 – Hassan

+0

더 나은 도움을 더 빨리 얻으려면 [SSCCE] (http://sscce.org/)를 게시하십시오. –

+1

BTW - JPEG는 이미지 유형에 놀라운 선택입니다. 왜 PNG를 사용하지 않습니까? –

답변

3

INT_RGB은 모든 채널을 int의 최하위 3 옥텟으로 묶습니다. 즉, 세 번째 픽셀을 모두 파란색으로 설정하고 나머지는 검은 색으로 유지합니다. (그러나 이것은 당신의 이미지와 일치하지 않습니다 - 당신이 그것을 생성 후 코드를 변경 했습니까?)

이 대신보십시오 :

int[] manualPixels = new int[width * height]; 
for (int index = 0; index < manualPixels.length; index++) { 
    switch (index % 3) { 
     case 0: manualPixels[index] = 0xFF0000; break; // red 
     case 1: manualPixels[index] = 0x00FF00; break; // green 
     case 2: manualPixels[index] = 0x0000FF; break; // blue 
    } 
} 
+0

감사합니다. 나는 그것이 내 부분에 어리석은 감시가되어야한다는 것을 알았다. – aroth