当前位置: 首页 > 知识库问答 >
问题:

为什么DCM4CHE2.0.29不能将Dicom文件转换为JPEG图像?

骆利
2023-03-14

我正在尝试在一个新的DICOM项目中使用dcm4che(最近的版本2.0.29)。我在尝试将DICOM文件转换为JPEG时出现以下错误。我找不到包含com.sun.medialib.codec.jpeg.decoder类的jar文件。谁能给我一个主意在哪能找到它?

这里是我的代码:

    public static void main(String[] args) {
    try {

        //com.sun.media.imageioimpl.plugins.jpeg.CLibJPEGImageReader
        //com.sun.media.imageioimpl.plugins.jpeg.CLibJPEGImageReader

        ImageIO.scanForPlugins();
        IIORegistry reg = IIORegistry.getDefaultInstance();
        reg.registerApplicationClasspathSpis();

        CLibJPEGImageReaderSpi prov = new com.sun.media.imageioimpl.plugins.jpeg.CLibJPEGImageReaderSpi();
        System.out.println("prov: "+prov.getClass().getName());
        System.out.println("prov: "+prov.getPluginClassName()+" ("+prov.getDescription(Locale.US)+")");
        for (String t:prov.getMIMETypes()){
            System.out.println("MIME: "+t);
        }
        reg.registerServiceProvider(prov, ImageReaderSpi.class);
        Dcm2Jpg dcm2jpg=new Dcm2Jpg();

        File origen=new File("c:/tmp/dicom/2.25.140624125599408099713879344899488955633.dcm");
        File destino=new File("c:/tmp/dicom/prueba.jpg");
        dcm2jpg.convert(origen, destino);

控制台输出:

javax.imageio.IIOException: codecLib error
at com.sun.media.imageioimpl.plugins.jpeg.CLibJPEGImageReader.getInfoImage(CLibJPEGImageReader.java:207)
at com.sun.media.imageioimpl.plugins.jpeg.CLibJPEGImageReader.getImageTypes(CLibJPEGImageReader.java:274)
at javax.imageio.ImageReader.getRawImageType(ImageReader.java:665)
at com.sun.media.imageioimpl.plugins.clib.CLibImageReader.read(CLibImageReader.java:571)
at org.dcm4che2.imageioimpl.plugins.dcm.DicomImageReader.read(DicomImageReader.java:778)
at org.dcm4che2.tool.dcm2jpg.Dcm2Jpg.convert(Dcm2Jpg.java:175)
at es.cimkey.dicomclient.DicomClient.main(DicomClient.java:94)
Caused by: java.lang.NoClassDefFoundError: com/sun/medialib/codec/jpeg/Decoder
    at com.sun.media.imageioimpl.plugins.jpeg.CLibJPEGImageReader.getInfoImage(CLibJPEGImageReader.java:199)
    ... 6 more
Caused by: java.lang.ClassNotFoundException: com.sun.medialib.codec.jpeg.Decoder
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
... 7 more

共有1个答案

宋建柏
2023-03-14

JAI不能在64位Windows Java上工作。尝试在64位Windows计算机上使用32位JRE。

另请参见:64位Windows的JAI和ImageIO

 类似资料:
  • 问题内容: 如何使用Java将Dicom文件(.dcm)转换为jpeg图像?这是我的代码: 我在运行项目时遇到以下错误 请帮助并提前感谢 问题答案: 这是使用dcm4che 2将DICOM转换为JPEG的链接 以下是我的代码,效果很好,我将其与导入一起放置,因此可能用完了。 用于运行它的罐子 dcm4che-imageio-2.0.28.jar dcm4che-image-2.0.28.jar j

  • 问题内容: 我在将简单的PNG转换为JPEG格式时遇到问题。我正在使用以下代码: … … 我最后遇到一个JAI异常-> java.lang.RuntimeException:只能写入1或3字节的字节数据。在com.sun.media.jai.codecimpl.JPEGImageEncoder.encode(JPEGImageEncoder.java:148)… 退出选项。有什么建议吗? 问题答案

  • 问题内容: 我可以设置属性并创建dicom文件,但是不能将图像写入dicom文件吗? 问题答案: 我已经尝试过使用拥有的图像并且它可以工作,但是我希望它不适用于RGB图像。像这样的东西 编辑1 我假设您的图片在这里有一个无符号的短数据缓冲区。 要处理其他数据缓冲区,应检查type,相应地进行强制转换,然后转换为字节数组。对于字节缓冲区,应该很容易 然后 您的图片在哪里0 应该返回一个字节数组

  • 问题内容: Java中的所有数字都应为int类型。以下行在Java> 1.5中是合法的 同样的机制去和实例。但是龙的作品完全不同。以下代码给出了编译时错误 Long对长类型使用自动装箱方法,因此 我看不到为什么不能将int赋给Long变量。关于这个问题有什么想法吗? 问题答案: 我认为问题不在于泛型转换原语和包装。问题是关于将int转换为java.lang.Long和将int转换为java.lan

  • 问题内容: 执行此强制转换时出现编译错误: 应该被继承,尽管不能直接继承。 从文档: 农具其中inturn & 为什么这无效? 也感谢您提供有关使用as 的正确方法的意见? 我正在考虑包装方法。 问题答案: 扩展,并且 不 扩展。 如果您想从中获得帮助,我认为实现包装器类是您最简单的选择。幸运的是的唯一抽象方法是。 RandomAccessFile实现了DataInput,该数据输入将依次转为Da

  • 问题内容: 我正在寻找将JPEG文件流转换为TIFF文件的Java API。我查看了JAI,但未找到与我正在查看的内容类似的内容。 有人可以指出我要这样做的一个好的API吗? 问题答案: 这里有一个例子 http://log.robmeek.com/2005/08/write-tiff-in- java.html