2012-01-24 4 views
3

내가 가진 반바지의 배열에서 생성 된 픽셀의 그레이 스케일 BufferedImage 당 16 비트 :16 비트 그레이 스케일 이미지를 jpeg로 어떻게 쓸 수 있습니까?

private BufferedImage get16bitImage(short[] pixels) { 
    ColorModel colorModel = new ComponentColorModel(
      ColorSpace.getInstance(ColorSpace.CS_GRAY), 
      new int[]{16}, 
      false, 
      false, 
      Transparency.OPAQUE, 
      DataBuffer.TYPE_USHORT); 
    DataBufferUShort db = new DataBufferUShort(pixels, pixels.length); 
    WritableRaster raster = Raster.createInterleavedRaster(
      db, 
      imgD.width, 
      imgD.height, 
      imgD.width, 
      1, 
      new int[1], 
      null); 
    return new BufferedImage(colorModel, raster, false, null); 
} 

을 저장하려고 :

ImageIO.write(img, "PNG", new File(resultImgNamePNG)); // works fine 
    ImageIO.write(img, "BMP", new File(resultImgNameBMP)); // doesn't work, returns false 
    ImageIO.write(img, "JPEG", new File(resultImgNameJPEG)); // doesnt work, returns false 

내가 사용 JAI 시도 :

public void writeImageToJPEG(File out, BufferedImage image, float quality) throws IOException { 
    JPEGEncodeParam param = new JPEGEncodeParam(); 
    param.setQuality(quality); 
    ImageEncoder encoder = ImageCodec.createImageEncoder("JPEG", new FileOutputStream(out), param); 

    encoder.encode(image); 
} 

encoder.encode(image) throw java.lang.RuntimeException : 1 또는 3 밴드 바이트 데이터 만 쓸 수 있습니다.

답변

1

먼저 8 비트로 변환해야한다고 생각합니다. 이것을 표시 용으로 사용한다면, java는 그것을 표시하기 전에 8 비트 비트로 변환합니다.

로그 스케일을 사용하여 비선형 스케일링을 수행하는 표시된 이미지를 때로는 실제로 향상시키는 경우가 있습니다. 세부 사항은 생성하는 이미지에 따라 다릅니다.

자세한 내용은 여기를 참조하십시오. http://www.java.net/external?url=http://www.cs.unm.edu/~brayer/vision/perception.html