How we can convert a dicom file(.dcm) to a jpeg image using java? Here is my code:
import java.io.File; import java.io.IOException; import org.dcm4che2.tool.dcm2jpg.Dcm2Jpg; public class MainClass { public static void main(String[] args) throws IOException{ Dcm2Jpg conv = new Dcm2Jpg(); conv.convert(new File("C:\\Users\\lijo.joseph\\Desktop\\Dicom\\IM-0001-0001.dcm"), new File("C:\\Users\\lijo.joseph\\Desktop\\Dicom\\IM-0001-0001.jpg")); } }
and i am getting the following error while running the project
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/cli/ParseException at MainClass.main(MainClass.java:7) Caused by: java.lang.ClassNotFoundException: org.apache.commons.cli.ParseException at java.net.URLClassLoader$1.run(URLClassLoader.java:372) at java.net.URLClassLoader$1.run(URLClassLoader.java:361) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:360) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 1 more
please help and thanks in advance
Here is the link Converting DICOM to JPEG using dcm4che 2
Following is my code which works perfectly.I have placed it with imports so it might be use-full.
import java.awt.image.BufferedImage; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.Iterator; import javax.imageio.ImageIO; import javax.imageio.ImageReader; import javax.imageio.stream.ImageInputStream; import org.dcm4che2.imageio.plugins.dcm.DicomImageReadParam; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGImageEncoder; public class Examplke1 { static BufferedImage myJpegImage=null; public static void main(String[] args) { File file = new File("test5/12840.dcm"); Iterator iterator =ImageIO.getImageReadersByFormatName("DICOM"); while (iterator.hasNext()) { ImageReader imageReader = (ImageReader) iterator.next(); DicomImageReadParam dicomImageReadParam = (DicomImageReadParam) imageReader.getDefaultReadParam(); try { ImageInputStream iis = ImageIO.createImageInputStream(file); imageReader.setInput(iis,false); myJpegImage = imageReader.read(0, dicomImageReadParam); iis.close(); if(myJpegImage == null){ System.out.println("Could not read image!!"); } } catch (IOException e) { e.printStackTrace(); } File file2 = new File("/test.jpg"); try { OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(file2)); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(outputStream); encoder.encode(myJpegImage); outputStream.close(); } catch (IOException e) { e.printStackTrace(); } System.out.println("Completed"); } } }
Jars Used to Run it
- dcm4che-imageio-2.0.28.jar
- dcm4che-image-2.0.28.jar
- jai_imageio-1.1.jar
- dcm4che-core-2.0.28.jar
- slf4j-api-1.7.7.jar
- slf4j-log4j12-1.7.7.jar
- apache-logging-log4j.jar
Hope it helps.
This Code is used for Converting Dicom Image to JPG Image
import java.io.File; import java.io.IOException; public class Dcm2JpgTest { public static void main(String[] args) throws IOException { try{ File src = new File("d:\\Test.dcm"); File dest = new File("d:\\Test.jpg"); Dcm2Jpeg dcm2jpg= new Dcm2Jpeg(); dcm2jpg.convert(src, dest); System.out.println("Completed"); } catch(IOException e){ e.printStackTrace(); } catch(Exception e){ e.printStackTrace(); } } }
Dcm2Jpeg.java File
import java.awt.image.BufferedImage; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.util.Iterator; import java.util.List; import javax.imageio.ImageIO; import javax.imageio.ImageReader; import javax.imageio.stream.ImageInputStream; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.GnuParser; import org.apache.commons.cli.HelpFormatter; import org.apache.commons.cli.OptionBuilder; import org.apache.commons.cli.Options; import org.apache.commons.cli.ParseException; import org.dcm4che2.data.DicomObject; import org.dcm4che2.imageio.plugins.dcm.DicomImageReadParam; import org.dcm4che2.io.DicomInputStream; import org.dcm4che2.util.CloseUtils; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGImageEncoder; public class Dcm2Jpeg { private static final String USAGE = "dcm2jpg [Options] \n" + "or dcm2jpg [Options] ... \n" + "or dcm2jpg [Options] ... "; private static final String DESCRIPTION = "Convert DICOM image(s) to JPEG(s)\nOptions:"; private static final String EXAMPLE = null; private int frame = 1; private float center; private float width; private String vlutFct; private boolean autoWindowing; private DicomObject prState; private short[] pval2gray; private String fileExt = ".jpg"; private void setFrameNumber(int frame) { this.frame = frame; } private void setWindowCenter(float center) { this.center = center; } private void setWindowWidth(float width) { this.width = width; } public final void setVoiLutFunction(String vlutFct) { this.vlutFct = vlutFct; } private final void setAutoWindowing(boolean autoWindowing) { this.autoWindowing = autoWindowing; } private final void setPresentationState(DicomObject prState) { this.prState = prState; } private final void setPValue2Gray(short[] pval2gray) { this.pval2gray = pval2gray; } public final void setFileExt(String fileExt) { this.fileExt = fileExt; } public void convert(File src, File dest) throws IOException { Iterator iter = ImageIO.getImageReadersByFormatName("DICOM"); ImageReader reader = iter.next(); DicomImageReadParam param = (DicomImageReadParam) reader.getDefaultReadParam(); param.setWindowCenter(center); param.setWindowWidth(width); param.setVoiLutFunction(vlutFct); param.setPresentationState(prState); param.setPValue2Gray(pval2gray); param.setAutoWindowing(autoWindowing); ImageInputStream iis = ImageIO.createImageInputStream(src); BufferedImage bi; OutputStream out = null; try { reader.setInput(iis, false); bi = reader.read(frame - 1, param); if (bi == null) { System.out.println("\nError: " + src + " - couldn't read!"); return; } out = new BufferedOutputStream(new FileOutputStream(dest)); JPEGImageEncoder enc = JPEGCodec.createJPEGEncoder(out); enc.encode(bi); } finally { CloseUtils.safeClose(iis); CloseUtils.safeClose(out); } //System.out.print('.'); } public int mconvert(List args, int optind, File destDir) throws IOException { int count = 0; for (int i = optind, n = args.size() - 1; i 0 && !dest.exists()) { dest.mkdirs(); } int count = 0; for (int i = 0; i argList = cl.getArgList(); int argc = argList.size(); File dest = new File(argList.get(argc-1)); long t1 = System.currentTimeMillis(); int count = 1; if (dest.isDirectory()) { count = dcm2jpg.mconvert(argList, 0, dest); } else { File src = new File(argList.get(0)); if (argc > 2 || src.isDirectory()) { exit("dcm2jpg: when converting several files, " + "last argument must be a directory\n"); } dcm2jpg.convert(src, dest); } long t2 = System.currentTimeMillis(); System.out.println("\nconverted " + count + " files in " + (t2 - t1) / 1000f + " s."); } private static DicomObject loadDicomObject(File file) { DicomInputStream in = null; try { in = new DicomInputStream(file); return in.readDicomObject(); } catch (IOException e) { exit(e.getMessage()); throw new RuntimeException(); } finally { CloseUtils.safeClose(in); } } private static short[] loadPVal2Gray(File file) { BufferedReader r = null; try { r = new BufferedReader(new InputStreamReader(new FileInputStream( file))); short[] pval2gray = new short[256]; int n = 0; String line; while ((line = r.readLine()) != null) { try { int val = Integer.parseInt(line.trim()); if (n == pval2gray.length) { if (n == 0x10000) { exit("Number of entries in " + file + " > 2^16"); } short[] tmp = pval2gray; pval2gray = new short[n = min && i
Jars Files Used to Run this code
- dcm4che-core-2.0.23.jar
- dcm4che-image-2.0.23.jar
- dcm4che-imageio-2.0.23.jar
- dcm4che-imageio-rle-2.0.23.jar
- slf4j-log4j12-1.5.0.jar
- slf4j-api-1.5.0.jar
- log4j-1.2.13.jar
- commons-cli-1.2.jar
If you don't want to use direct Dcm2Jpg.java file then you can include below jar file.
dcm4che-tool-dcm2jpg-2.0.23.jar
In this jar you can import org.dcm4che2.tool.dcm2jpg.Dcm2Jpg this java file