dcm4che操作dcm文件

java操作dcm文件的开源库dcm4che使用介绍:

开源地址

GitHub地址:https://github.com/dcm4che/dcm4che

打包编译

使用git工具将源码拉取到本地仓库,用maven3将源码打包编译

命令:mvn install -Dmaven.test.skip=true

 

下面介绍使用打包好的jar对dcm文件的一些常用操作

dcm转jpg

/**
     * dcm转jpg
     * @param dcmFile  dcm文件
     * @param jpgFile Jpg文件
     * @param quality 控制jpg文件清晰度(0-1),清晰度越高,文件越大
     * @return
     */
    public static boolean dcm2jpg(File dcmFile, File jpgFile ,Number quality) {
        try {
            Dcm2Jpg dcm2jpg = new Dcm2Jpg();
            dcm2jpg.initImageWriter("JPEG", null, "com.sun.imageio.plugins.*", null, quality);
            dcm2jpg.convert(dcmFile, jpgFile);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

dcm转png

/**
     * dcm转jpg
     * @param dcmFile  dcm文件
     * @param pngFile png文件
     * @return
     */
    public static boolean dcm2png(File dcmFile, File pngFile) {
        try {
            Dcm2Jpg dcm2jpg = new Dcm2Jpg();
            dcm2jpg.initImageWriter("PNG", null, "com.sun.imageio.plugins.*", null, null);
            dcm2jpg.convert(dcmFile, pngFile);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

dcm转实体bean

DcmModel是自己定义的实体bean,自己可以定义dcm属性,从Tag里面去获取想要的值

/**
     * dcm文件提取Tag值,将数据封装到DcmModel
     * @param dcmPath dcm文件路径
     * @return DcmModel
     */
    public static DcmModel dcm2Attributes(String dcmPath){
        DicomInputStream dicomInputStream;
        DcmModel dcmModel = new DcmModel();
        try {
            File file = new File(dcmPath);
            dicomInputStream = new DicomInputStream(file);

            Attributes attributes = dicomInputStream.readDataset(-1,-1);
            dcmModel.setAge(attributes.getString(Tag.PatientAge));
            dcmModel.setBirth(attributes.getString(Tag.PatientBirthDate));
            dcmModel.setPatientName(attributes.getString(Tag.PatientName));
            return dcmModel;
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            dicomInputStream.close();
        }
        return null;
    }     

dcm转xml

需获取dcm的Attributes属性,将属性赋值到自己定义的实体对象中,我这是DcmModel对象,定义了名字,年龄,患者号等属性

/**
     * DcmModel转xml
     * @param dcmModel  存储dcm中Tag信息的对象
     * @param xmlFile  xml文件
     * @return
     */
    public static boolean beanToXml(DcmModel dcmModel,File xmlFile){

        JAXBContext context;
        Marshaller marshaller;
        try {
            context = JAXBContext.newInstance(dcmModel.getClass());
            marshaller = context.createMarshaller();
            marshaller.marshal(dcmModel, xmlFile);
            return true;
        } catch (JAXBException e) {
            e.printStackTrace();
        }
        return false;
    }

实体类上使用注解:

@Data
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)

属性上使用注解:

@XmlElement

dcm转raw

/**
     * dcm文件转raw
     * @param dcmFile dcm文件路径
     * @param rawFile raw文件路径
     * @return
     */
    public static boolean dcm2raw(File dcmFile,File rawFile){

        try {
            DicomInputStream dis = new DicomInputStream(dcmFile);
            OutputStream outputStream = new FileOutputStream(rawFile);
            try{
                Attributes d = dis.readDataset(-1, -1);
                //获取dicom中图像信息(原始二进制文件)
                byte[] pixelData = d.getBytes(Tag.PixelData);

                outputStream.write(pixelData);
                outputStream.flush();
                return true;
            }catch (Exception e){
                e.printStackTrace();
            }finally {
                outputStream.close();
                dis.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return false;
    }

当然还可以转很多类型的文件,自己可以参考源码,以下是可以实现的工具类

常见问题

获取到的tag属性因为是中文的,导致乱码

可以直接设置编码,操作Attributes,如下即可:

attributes.setString(Tag.SpecificCharacterSet, VR.LO,"GB18030");

 

有问题可留言,jar包的话不想自己打包编译可直接私聊提供邮箱,对您有帮助的话请点个赞或者关注哦!

 

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值