Hi Nicolas,
if I use dcm4che with OpenCV codecs, I have problem to convert ImageInputStream created from general InputStream to jpeg. The error ocures if:
- ImageInputStream is constructed with general java InputStream, not with File() as input
- Input DICOM image is multiframe in jpeg TS (MF IVRLE files works OK)
I get this error:
19:14:59.955 [main] DEBUG org.dcm4che3.imageio.plugins.dcm.DicomImageReader - Decompressor: org.dcm4che3.opencv.NativeImageReader
19:14:59.962 [main] DEBUG org.dcm4che3.imageio.stream.SegmentedInputImageStream - wasPos 0 end 9223372036854775807
19:14:59.963 [main] DEBUG org.dcm4che3.imageio.plugins.dcm.DicomImageReader - Start decompressing frame #2
Exception in thread "main" java.lang.IllegalArgumentException: Width (0) and height (0) must be > 0
at java.awt.image.SampleModel.<init>(SampleModel.java:126)
at java.awt.image.ComponentSampleModel.<init>(ComponentSampleModel.java:146)
at java.awt.image.PixelInterleavedSampleModel.<init>(PixelInterleavedSampleModel.java:87)
at java.awt.image.Raster.createInterleavedRaster(Raster.java:641)
at java.awt.image.Raster.createInterleavedRaster(Raster.java:278)
at java.awt.image.Raster.createInterleavedRaster(Raster.java:212)
at java.awt.image.ComponentColorModel.createCompatibleWritableRaster(ComponentColorModel.java:2825)
at org.weasis.opencv.op.ImageConversion.toBufferedImage(ImageConversion.java:79)
at org.weasis.opencv.op.ImageConversion.toBufferedImage(ImageConversion.java:116)
at org.dcm4che3.opencv.NativeImageReader.read(NativeImageReader.java:252)
at org.dcm4che3.imageio.plugins.dcm.DicomImageReader.read(DicomImageReader.java:455)
at org.medoro.Test.main(Test.java:24)
Minimal example java code:
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
public class Test {
public static void main(String[] args) throws IOException {
ImageReader reader = ImageIO.getImageReadersByFormatName("DICOM").next();
ByteArrayInputStream is = new ByteArrayInputStream(Files.readAllBytes(new File("/tmp/test.dcm").toPath()));
try (ImageInputStream iis = ImageIO.createImageInputStream(is)) {
reader.setInput(iis, false);
reader.read(1, reader.getDefaultReadParam());
}
}
}
Tested DICOM image is in attachement.
Pavel