我在使用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();
这是采用这种方式还是其他方式的正确方法?
答案 0 :(得分:1)
您不能使用jpeg-lossless ImageReader来读取dicom第10部分文件。您应该考虑使用dcm4che imageio ImageReader来读取文件。当它实际到达内容的像素数据部分时,它将利用JAI jpeg图像阅读器来解压缩图像内容。
http://www.dcm4che.org/confluence/display/d2/dcm4che2+DICOM+Toolkit