将DICOM图像转换为jpeg图像

时间:2013-11-20 11:20:23

标签: java jsp

我的代码是

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 DicomToJpeg {    
    public static void main(String args[]) throws IOException, Exception
    {
        dicomToJpeg("d:/F74AFBC7");
    }

    public static void dicomToJpeg(String args) throws IOException, Exception {
        // TODO Auto-generated method stub      
        try 
        {               
            File myDicomFile = new File(args);
            BufferedImage myJpegImage = null;
            Iterator<ImageReader> iter = ImageIO.getImageReadersByFormatName("DICOM");
            ImageReader reader = (ImageReader) iter.next();
            DicomImageReadParam param = null;
            try{                    
                param = (DicomImageReadParam) reader.getDefaultReadParam();
            }
            catch (Exception e) {                   
                e.printStackTrace();
            }
         ImageInputStream iis=ImageIO.createImageInputStream(myDicomFile);
                   reader.setInput(iis, false);   
                   myJpegImage = reader.read(0, param);   
                   iis.close();
                   if (myJpegImage == null) {
                          System.out.println("\nError: couldn't read dicom image!");
                          return;
                       }

                   File myJpegFile = new File("d:/demo.jpg");   
                   OutputStream output = new BufferedOutputStream(new FileOutputStream(myJpegFile));
                   JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(output);
                   encoder.encode(myJpegImage);
                   System.out.println("Image Create successufully");
                   output.close();

            } 
            catch(IOException e){
               System.out.println("\nError: couldn't read dicom image!"+ e.getMessage());
               return;
            }
    }
}

当我使用eclipse在java项目中执行时,它工作正常... 但是当我使用Web应用程序执行时,我在控制器页面中调用它,如

  

DicomToJpeg.dicomToJpeg( “d:/ F74AFBC7”);

然后它会给出错误......

java.util.NoSuchElementException
    at javax.imageio.spi.FilterIterator.next(Unknown Source)
    at javax.imageio.ImageIO$ImageReaderIterator.next(Unknown Source)
    at javax.imageio.ImageIO$ImageReaderIterator.next(Unknown Source)
    at com.lifecare.controller.DicomToJpeg.dicomToJpeg(DicomToJpeg.java:32)

如何解决这个错误请帮帮我....

3 个答案:

答案 0 :(得分:2)

ImageIO.getImageREadersByFormatName的javadoc说:

  

返回包含所有当前已注册的ImageReader的Iterator   声称能够解码指定的格式。

如果访问迭代器而不检查它是否有元素,则会出现异常。

由于它在IDE中运行而不在服务器上运行,因此您可以查看DICOM的图像阅读器是否位于服务器上的应用程序类路径中。

但是,我也想知道你怎么称呼上述课程。它来自servlet吗?

答案 1 :(得分:1)

我通过在ImageIO.getImageReadersByFormatName()

之前调用ImageIO.scanForPlugins()来解决它
ImageIO.scanForPlugins()            
Iterator<ImageReader> iter = ImageIO.getImageReadersByFormatName("DICOM");
ImageReader reader = (ImageReader) iter.next();

这适用于servlet

答案 2 :(得分:0)

试试这个

BufferImage bi = ImageIO.read(dcm file name with path);  

ImageIO.write(enter pathname with filename, format);