2013-03-14 6 views
0

우주선이 파괴되면 우주선의 이미지 목록을 포함하는 목록을 만듭니다. 픽셀은 내 Pixel 클래스의 객체입니다. 리스트를 생성 한 후에 메인리스트에 추가되어 다양한 액션이 수행됩니다. 내 코드는 다음과 같습니다.BufferedImage에서 픽셀 읽기 - 잘못된 색상 값

//Code which creates an array 
List<Pixel> pixels = new LinkedList<>(); 
BufferedImage buff = (BufferedImage)image; 
for (int px = 0; px < buff.getWidth(); px++) { 
    for (int py = 0; py < buff.getHeight(); py++) { 
     int rgb = buff.getRGB(px, py); 
     int red = (rgb & 0x00ff0000) >> 16; 
     int green = (rgb & 0x0000ff00) >> 8; 
     int blue = rgb & 0x000000ff; 
     int alpha = (rgb >> 24) & 0xff; 
     if (alpha == 255) { 
      pixels.add(new Pixel(px, py, red, green, blue)); 
     } 
    } 
} 
//Pixel class constructor 
Pixel(float x, float y, int red, int green, int blue) { 
    super(x, y); 
    BufferedImage buff = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB); 
    WritableRaster raster = buff.getRaster(); 
    //LOOKS EVERYTHING IS OKAY SINCE THIS LINE SO THE ERROR MUST BE SOMEWHERE IN THOSE 2 LINES 
    raster.setPixel(0, 0, new int[]{red, blue, green, 255}); 
    image = buff; 
} 

간단한 설명 : 이미지는 이미지 형식의 개인 필드입니다. drawImage() 메서드를 사용하여 픽셀을 칠하는 repaint() 메서드에 사용됩니다. 내 문제에 대해서 : Eveything은 거의 정상적으로 작동합니다. 픽셀은 올바른 위치에 있지만 모두 보라색입니다. 그들은 서로 다른 색조 (더 밝고 어두움)를 가지고 있지만 이미지의 색과 동일한 색을 가지지 않고 모두 보라색입니다! 왜 이런 일이 일어나는 걸까요? 왜 보라색입니까? 누군가 내가이 이상한 행동을 이해하지 못하게 도와 줄 수 있을까요?

+0

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

답변

1

setPixel 방법에서 녹색 및 파란색 값이 혼합되어있는 것일 수 있습니다. 색상은 일반적으로 RGB 순서로 지정되며, 이는 사용자가 BufferedImage에서 색상을 어떻게 풀 었는지 나타냅니다. 그것은 바로 보이는 때까지 당신이 당신의 배열에 다른 변수 주문과 수리를 할 수 있습니다 작동하지 않는 경우 대신

raster.setPixel(0, 0, new int[]{red, blue, green, 255}); 

raster.setPixel(0, 0, new int[]{red, green, blue, 255}); 

을 시도합니다.