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包的话不想自己打包编译可直接私聊提供邮箱,对您有帮助的话请点个赞或者关注哦!