将.dcm转换为jpeg-lossless类型的jpeg时出错

时间:2014-09-27 08:46:24

标签: java jpeg javax.imageio dicom jai

我在使用ImageIo将DCM转换为jpg时陷入1.2.840.10008.1.2.4.70 - JPEG Lossless, Non-Hierarchical, First-Order Prediction

我已根据指示here安装了JAI ImageIO,而ImageIO.getReaderFormatNames()正在提供raw jpeg tif JFIF WBMP jpeg-lossless jpeg-ls PNM JPG DICOM wbmp PNG JPEG dicom jpeg 2000 tiff BMP JPEG2000 RAW JPEG-LOSSLESS jpeg2000 GIF TIF TIFF jpg bmp pnm jfif png JPEG 2000 gif JPEG-LS

但是,我在线程“main”中获取Exception:java.lang.IndexOutOfBoundsException: imageIndex out of bounds,同时使用reader读取缓冲图像。这是我的读者代码:

    ByteArrayInputStream bais = new ByteArrayInputStream(dicomData); //byte array of DICOM data
    ImageIO.scanForPlugins();
    Iterator<ImageReader> iter = ImageIO
                    .getImageReadersByFormatName("jpeg-lossless");
    ImageReader reader = (ImageReader) iter.next();
    ImageReadParam param = (ImageReadParam) reader.getDefaultReadParam();
    ImageInputStream iis = ImageIO.createImageInputStream(bais);
    reader.setInput(iis, false);        
    BufferedImage  buff = reader.read(0, param); // Error at this line 'imageIndex out of bounds!'
    iis.close(); 

这是采用这种方式还是其他方式的正确方法?

1 个答案:

答案 0 :(得分:1)

您不能使用jpeg-lossless ImageReader来读取dicom第10部分文件。您应该考虑使用dcm4che imageio ImageReader来读取文件。当它实际到达内容的像素数据部分时,它将利用JAI jpeg图像阅读器来解压缩图像内容。

http://www.dcm4che.org/confluence/display/d2/dcm4che2+DICOM+Toolkit