2012-01-24 87 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)拋出java.lang.RuntimeException:只能寫入1個或3個字節的字節數據。

回答