2011-03-06 5 views
1

3 차원의 2D 배열 (이미지의 R, G, B 값을 나타냄), 폭과 높이, 지정된 이미지가 컬러인지 검은인지를 나타내는 부울 값을 취하는 메소드를 작성했습니다 및 흰색. 메소드가 원하는 것은 주어진 입력 데이터로부터 BufferedImage를 생성하는 것입니다. 여기 커스텀 BufferedImage의 생성

내가 지금까지 무엇을 가지고 :

public static BufferedImage createImage(int[][] r, int[][] g, int[][] b, 
    int width, int height, boolean isColor) { 

    BufferedImage ret; 
    if (isColor) 
     ret = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 
    else 
     ret = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY); 
    WritableRaster raster = ret.getRaster(); 

    for (int i = 0; i < height; i++) { 
     for (int j = 0; j < width; j++) { 
      if (isColor) { 
       raster.setSample(j, i, 0, r[i][j]); 
       raster.setSample(j, i, 1, g[i][j]); 
       raster.setSample(j, i, 2, b[i][j]); 
      } 
      else 
       raster.setSample(j, i, 0, r[i][j]); 
     } 
    } 

    return ret; 
} 

을 그러나, 나는 (255, 255, 255)을 흰색으로 채워진 5 × 5 색 이미지를 만들어야합니다 단위 테스트를 작성하지만, 래스터 데이터가 가득 255가 아닌 매우 큰 값을 가지고 있습니다.이 이미지와 AWT에 익숙하지 않아서 BufferedImage를 올바르게 만들지 못한다고 느낍니다. BufferedImage 용 Java API를 참조하려고했지만 많은 행운을 찾지 못했습니다. 어떤 도움을 주시면 감사하겠습니다.

+1

어떻게 Raster 데이터를보고 계십니까? BufferedImage를 디스플레이에 그리거나 픽셀 데이터를 직접 분석하고 있습니까? 코드를 기반으로 이미지가 올바르게 생성 된 것처럼 보이므로 문제가있는 부분에 대한 자세한 정보가 필요합니다. –

답변

3

코드가 괜찮습니다. 이미지는 0xffffff (R, G 및 B 각각 255 개)로 채워 져야하며 십진수는 16777215입니다. 알파 채널이있는 경우 완전히 불투명 한 각 픽셀은 0xffffffff가되며 십진수는 -1이됩니다.

+0

어떤 이유로 나는 래스터 데이터가 255의 샘플 값을 포함 할 것으로 기대하고 있었지만 (맞지는 않을 것입니다.) 맞습니다. 래스터는 16777215로 채워져 있습니다. –

관련 문제