2017-12-08 7 views
1

그레이 스케일 값이 포함 된 .csv 파일을 BufferedImage를 사용하는 이미지로 변환하려고합니다. 처음에는 csv가 pixArray[]으로 읽혀지고 모든 값은 두 배가됩니다. 그레이 스케일 값을 .csv에서 BufferedImage로 변환

나는 코드

   BufferedImage image = new BufferedImage(width,height,BufferedImage. 
        TYPE_BYTE_GRAY); 
      for(int x = 0; x < width; x++) 
      { 
       for(int y = 0; y < height; y++) 
       { 
        image.setRGB(x, y, (int)Math.round(pixArray[y])); 
       } 
      } 

      File file_out = new File("output.png"); 
      try { 
       ImageIO.write(image, "png", file_out); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

으로 100x100 픽셀 출력 이미지를 만들 BufferedImage를 사용하려고 시도하고 있지만 내가 출력으로 모두는 100 × 100 검은 사각형이다.

TYPE_BYTE_GRAY에 대한 대안과 outout에 대한 png 형식을 시도했지만이 오류를 생성하는 것을 찾을 수 없습니다.

+0

입력 데이터의 샘플을 표시하십시오. 값이'0.0 <= x <= 1'이면'Math.round()'는 모든 것을 0으로 잘라내서 검은 색으로 만듭니다. –

+0

값은 모두 0 <= x <= 255 초기에는 예 :'111.8884 \t 112.2339 \t 113.4165 '이므로 캐스팅됩니다. 반올림을 제거하고 'int'캐스팅을 유지했지만 여전히 모든 검정색을 출력으로 받았습니다. – gorringe

+1

다음과 같으면 안됩니다.'int g = (int) Math.round (pixArray [y]); image.setRGB (x, y, new Color (g, g, g) .getRGB()); '알파를 픽셀 값으로 설정하고 색상 구성 요소는 모두 0으로 설정한다고 생각합니다. –

답변

1

이 있어야한다

int g = (int)Math.round(pixArray[y]); 
image.setRGB(x,y,new Color(g,g,g).getRGB()); 

무엇 현재 코드가 픽셀 값으로 알파를 설정하지만 색상 구성 요소 모두 0을 떠나는하고있다.

0

대체 솔루션 게시. Jim의 답변은 정확하고 효과적이지만 샘플 값을 회색으로 변환하는 가장 느린 방법 중 하나입니다 BufferedImage.

은 RGB 색상과의 모든 변환이 필요하지 않습니다. 때문에 과도한 던져 - 멀리 Color 인스턴스를 생성의

BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY); 
WritableRaster raster = image.getRaster(); 

for (int y = 0; y < height; y++) { 
    int value = (int) Math.round(pixArray[y]) 

    for (int x = 0; x < width; x++) { 
     raster.setSample(x, y, 0, value); 
    } 
} 

*) 느린,하지만 대부분 때문에 색 공간 변환에 /에서 : 이미지에 직접 회색 값을 넣으려면, 이미지의 래스터를 통해 그것을 할 sRGB 색 공간. 아마 100x100 이미지에서는 눈에 띄지 않지만 1000x1000 이상을 사용하면 눈치 챌 것입니다.

추신 : 나는 또한 루프를 반복하여 x 내부 루프에서 반복합니다. 이것은 일반적으로 더 빠르며 특히 최신 CPU의 데이터 지역성 및 캐싱으로 인해 값을 읽을 때 더 빠릅니다. 귀하의 경우에는 각 행의 값을 계산 (라운드, 캐스트)하기 만하면되므로 중요합니다.

관련 문제