DICOM を Java で、読み込み、Jpeg に変換 (決定版)
http://blogs.yahoo.co.jp/dk521123/6683637.htmlでの課題が結局、解決せず、以下のURLを参考に、別の方法に切り替える。http://samucs.blogspot.com/2008/03/converting-dicom-to-jpeg-using-dcm4che.html
環境設定(外部JARなど)
なお、以下をダウンロードして、外部JARとして、ソースに取り込んでおく必要がある。
■ JAI ImageIO Toolkit
http://www.java2s.com/Code/Jar/JKL/Downloadjaiimageio11jar.htmで「 jai_imageio-1.1.jar.zip」をダウンロードする もしくは、以下で、「jai-core-1.1.3-alpha.jar」および「jai_imageio-1.1-alpha.jar」をダウンロードするhttp://www.findjar.com/jar/geoserver/jai/jars/jai_imageio-1.1-alpha.jar.html
http://www.findjar.com/jar/geoserver/jai/jars/jai-core-1.1.3-alpha.jar.html
■ dcm4che (dcm4che-2.0.21-bin.zip)
http://sourceforge.net/projects/dcm4che/files/dcm4che2/しかし、一部のDICOMファイルで、以下のようなエラーになる。エラー内容
・・・省略・・・ Caused by: org.dcm4che2.data.ConfigurationError: No Image Reader of class com.sun.media.imageioimpl.plugins.jpeg.CLibJPEGImageReader available for format:jpeg at org.dcm4che2.imageio.ImageReaderFactory.getReaderForTransferSyntax(ImageReaderFactory.java:99) at org.dcm4che2.imageioimpl.plugins.dcm.DicomImageReader.initCompressedImageReader(DicomImageReader.java:332) at org.dcm4che2.imageioimpl.plugins.dcm.DicomImageReader.initImageReader(DicomImageReader.java:317) at org.dcm4che2.imageioimpl.plugins.dcm.DicomImageReader.read(DicomImageReader.java:479) at Converter.ConvertDicom.ConvertDicomToJpeg(ConvertDicom.java:73) ... 1 more CLibJPEGImageReaderクラスがないっと言っているっぽいので、 その周辺を色々調べたり、試したりしたところ、SUNが出している 「Java Advanced Imaging Image I/O Tools 1.1 Alpha」をインストールしてみたら、JPEGとして変換できた。
■ Java Advanced Imaging Image I/O Tools 1.1 Alpha
(jai_imageio-1_1-alpha-lib-windows-i586-jre.exe)http://java.sun.com/products/java-media/jai/downloads/download-iio-1_1.html
インストール後、「C:\Program Files\Java\jre6\bin」以下にある 画像入出力ライブラリ『clib_jiio.dll』を、Eclipseの作業ディレクトリ (.projectや.classpathファイルが作られているディレクトリ)に置く。http://blogs.yahoo.co.jp/dk521123/6843885.html
なお、「C:\Program Files\Java\jre6\lib\ext」以下に保存される 『clibwrapper_jiio.jar』と『jai_imageio.jar』は、JAI ImageIO Toolkit(「jai-core-1.1.3-alpha.jar」 および「jai_imageio-1.1-alpha.jar」)の代用として、用いることができる。 '''
サンプル
testMain.jave
import Converter.ConvertDicom; public class testMain { public static void main(String args[]) { ConvertDicom dicom = new ConvertDicom(); try { dicom.ConvertDicomToJpeg("C:\\dicomImage.dcm", "C:\\dicomImage.jpg" ); } catch (Exception ex) { System.out.println("Failed... " + ex); ex.printStackTrace(); return; } System.out.println("Success!" ); } }
ConvertDicom.java
package Converter; import java.awt.image.BufferedImage; import java.io.*; import javax.imageio.*; import javax.imageio.stream.ImageInputStream; import org.apache.log4j.BasicConfigurator; import org.dcm4che2.data.ConfigurationError; import org.dcm4che2.imageio.plugins.dcm.DicomImageReadParam; import org.dcm4che2.io.DicomCodingException; import com.sun.image.codec.jpeg.*; import java.util.Iterator; public class ConvertDicom { public ConvertDicom () { } /** * To Convert Dicom To Jpeg * * @param inputFilePath input file path (DICOM File) * @param outputFilePath output file path (JPEG File) * @return true : SUCCESSFUL / false : FAIL * @exception Exception * @see <a href="USE">http://www.dcm4che.org/">USE dcm4che</a> * @version 0.0.1 */ public boolean ConvertDicomToJpeg(String inputFilePath, String outFilePath) throws Exception { BasicConfigurator.configure(); File dicomFile = new File(inputFilePath); File jpegFile = new File(outFilePath); BufferedImage jpegImage = null; /* To Read DICOM file */ Iterator<ImageReader> iter = ImageIO.getImageReadersByFormatName("dicom" ); if (iter == null || !iter.hasNext()) { return false; // Error : No data } ImageReader reader = (ImageReader)iter.next(); DicomImageReadParam param = (DicomImageReadParam)reader.getDefaultReadParam(); ImageInputStream iis = ImageIO.createImageInputStream(dicomFile); reader.setInput(iis); /* To create Jpeg file */ jpegImage = reader.read(0, param); if (jpegImage == null) { return false; // Error : No data } OutputStream output = new BufferedOutputStream(new FileOutputStream(jpegFile)); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(output); encoder.encode(jpegImage); /* Free Resource */ if (iis != null) iis.close(); if (output != null) output.close(); } }