Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将.dcm转换为jpeg无损类型的jpeg时出错_Java_Jpeg_Javax.imageio_Dicom_Jai - Fatal编程技术网

Java 将.dcm转换为jpeg无损类型的jpeg时出错

Java 将.dcm转换为jpeg无损类型的jpeg时出错,java,jpeg,javax.imageio,dicom,jai,Java,Jpeg,Javax.imageio,Dicom,Jai,在使用ImageIo将DCM转换为jpg时,我陷入了1.2.840.10008.1.2.4.70-JPEG无损、非分层、一阶预测中 我已经按照说明安装了JAI ImageIO,ImageIO.getReadPerformatNames()正在提供raw jpeg tif JFIF WBMP WBMP jpeg无损jpeg ls PNM JPG DICOM WBMP PNG jpeg DICOM jpeg 2000 tiff BMP jpeg 2000 raw jpeg无损jpeg tiff JP

在使用ImageIo将DCM转换为jpg时,我陷入了
1.2.840.10008.1.2.4.70-JPEG无损、非分层、一阶预测中

我已经按照说明安装了JAI ImageIO,
ImageIO.getReadPerformatNames()
正在提供
raw jpeg tif JFIF WBMP WBMP jpeg无损jpeg ls PNM JPG DICOM WBMP PNG jpeg DICOM jpeg 2000 tiff BMP jpeg 2000 raw jpeg无损jpeg tiff JPG BMP PNM JFIF PNG jpeg 2000 GIF jpeg-ls

但是,我在线程“main”中遇到异常:
java.lang.IndexOutOfBoundsException:imageIndex越界,同时使用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(); 
ByteArrayInputStream bais=新的ByteArrayInputStream(dicomData)//DICOM数据的字节数组
ImageIO.scanForPlugins();
迭代器iter=ImageIO
.getImageReadersByFormatName(“jpeg无损”);
ImageReader=(ImageReader)iter.next();
ImageReadParam param=(ImageReadParam)reader.getDefaultReadParam();
ImageInputStream iis=ImageIO.CreateMageInputStream(BAI);
reader.setInput(iis,false);
BuffereImage buff=读取器.read(0,参数);//此行“imageIndex超出范围”出错
iis.close();

这是正确的方法还是其他方法?

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


看不出您的代码有多少错误。您可以尝试重新排列代码,然后调用
iter=ImageIO.getImageReaders(iis)
,而不是
getImageReadersByFormatName(…)
(这是获取读取器的更常见方法)。最有可能的是,支持JPEG无损压缩的
ImageReader
无法读取您的数据。
IOOBException
表示读取器在数据中根本找不到任何图像(通过测试
reader.getNumImages(true)
进行验证)。您可能需要稍微“按摩”
dicomData
,让读者接受它。您好,HaraldK,感谢您的回复,我重新整理了代码,并按照您的建议使用ImageIO.getImageReaders(iis),但现在出现了错误javax.ImageIO.IIOException:不支持的JPEG进程:SOF类型0xc3。和reader.getNumImages(true)给出1.Hmmm。。代码更改后,似乎您使用了错误的
ImageReader
。验证查看
reader
是否真的是
CLibJPEGImageReader
的实例,或者只是普通的
JPEGImageReader
。是否有任何方法来验证并获得正确的图像读取器?当我打印图像阅读器时,得到的是:org.dcm4che2.imageioimpl.plugins.dcm。DicomImageReader@1935e6fOk... 我不认识这个阅读器,看起来像是你安装的第三方阅读器。当你用jai_imageio.jar标记你的问题时,我正期待着
CLibJPEGImageReader
(来自jai_imageio.jar)。。。我认为JAI阅读器应该能够读取SOF类型0xc3(无损顺序,哈夫曼编码)。