java dcm_喵星之旅-狂奔的兔子-使用java实现dcm文件转jpg

package club.kittybunny.tool.dcmfile;

import org.dcm4che3.data.Attributes;

import org.dcm4che3.imageio.plugins.dcm.DicomImageReadParam;

import javax.imageio.ImageIO;

import javax.imageio.ImageReadParam;

import javax.imageio.ImageReader;

import javax.imageio.stream.ImageInputStream;

import java.awt.image.BufferedImage;

import java.io.ByteArrayOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.util.Iterator;public classDcm2Jpg2 {private final ImageReader imageReader = ImageIO.getImageReadersByFormatName("DICOM").next();private floatwindowCenter;private floatwindowWidth;private boolean autoWindowing = true;private intwindowIndex;private intvoiLutIndex;private boolean preferWindow = true;privateAttributes prState;private int overlayActivationMask = 0xffff;private int overlayGrayscaleValue = 0xffff;private int frame = 1;/**

* 通过制定源文件目录和目标文件目录,实现dcm转jpg格式

* @param args

* @throws Exception*/

public static voidmain(String[] args) throws Exception {//源文件加目录全路径,结尾用/结束,只处理里面dcm格式文件 ,例如"/home/bunny/桌面/src/"

String src = "/home/bunny/Downloads/qq-files/1023354682/file_recv/3000566.000000-03192/";//目标路径全路径,将源文件加内所有dcm文件转换为同名jpg文件,使用/结束,;例如 "/home/bunny/桌面/w/dcm/"

String out = "/home/bunny/桌面/w/dcm/";if (args.length >= 2) {

src= args[0];out = args[1];

}

File f= newFile(src);//读取到所有文件名

String[] arr =f.list();for (int i = 0; i < arr.length; i++) {//筛选符合条件的文件处理

if (arr[i].endsWith(".dcm")) {

InputStreamin = new FileInputStream(src +arr[i]);

ByteArrayOutputStream byteArrayOutputStream= new Dcm2Jpg2().convert(in, null);

FileOutputStream fileOutputStream= null;try{

fileOutputStream= new FileOutputStream(out + arr[i].substring(0, arr[i].lastIndexOf("."))+".jpg");

fileOutputStream.write(byteArrayOutputStream.toByteArray());

}catch(IOException e) {

e.printStackTrace();

}

}

}

}/**

*

* 实现单文件的dcm转jpg

* @param src dcm文件流

* @param name oss的getFileName

* @throws Exception*/

publicByteArrayOutputStream convert(InputStream src, String name) throws Exception {

Iterator iter = ImageIO.getImageReadersByFormatName("DICOM");

ImageReader reader=iter.next();try (ImageInputStream iis =ImageIO.createImageInputStream(src)) {

reader.setInput(iis,false);

BufferedImage bi=readImage(iis);if (bi == null) {throw new Exception("无法读取到图片");

}

ByteArrayOutputStream os= newByteArrayOutputStream();

ImageIO.write(bi,"jpg", os);returnos;

}catch(IOException e) {

e.printStackTrace();return null;

}

}privateImageReadParam readParam() {

DicomImageReadParam param=(DicomImageReadParam) imageReader.getDefaultReadParam();

param.setWindowCenter(windowCenter);

param.setWindowWidth(windowWidth);

param.setAutoWindowing(autoWindowing);

param.setWindowIndex(windowIndex);

param.setVOILUTIndex(voiLutIndex);

param.setPreferWindow(preferWindow);

param.setPresentationState(prState);

param.setOverlayActivationMask(overlayActivationMask);

param.setOverlayGrayscaleValue(overlayGrayscaleValue);returnparam;

}privateBufferedImage readImage(ImageInputStream iis) throws IOException {

imageReader.setInput(iis);return imageReader.read(frame - 1, readParam());

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值