我是在代码工作的DICOM Iamge(.DCM)转换为JPEG格式 - 这是我使用的代码,它给了我一个:javax.imageio.spi.ImageReaderSpi中:提供com.sun.media.imageioimpl.plugins .pcx.PCXImageReaderSpi没有发现错误...
import java.awt.image.BufferedImage;
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.dcm4che.imageio.plugins.DcmImageReadParam;
import org.dcm4che.util.BufferedOutputStream;
import org.dcm4che2.imageio.plugins.dcm.DicomImageReadParam;
public class DicomToJpeg
{
public static void main(String[] args)
{
//our DICOM file
File my`enter code here`DicomFile = new File("IM-0001-0001.dcm");
//declaring our JPEG image
BufferedImage myJpegImage = null;
//iterator containing all registered ImageReades that claim to decome the name format
Iterator<ImageReader> iter= ImageIO.getImageReadersByFormatName("DICOM");
//geting our ImageReader object
ImageReader reader = (ImageReader) iter.next();
//getting the parameters to read the DICOM image
DicomImageReadParam param = (DicomImageReadParam)reader.getDefaultReadParam();
try
{
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 teh dicom image!");
return;
}
File myJpegFile = new File("OutputJpegImage.jpg");
OutputStream output = new BufferedOutputStream( new FileOutputStream(myJpegFile));
ImageIO.write(myJpegImage, "jpeg", output);
output.close();
}
catch (IOException e)
{
System.out.println("\nError: couldn't read dicom image!"+ e.getMessage());
return;
}
}
}
这是我收到的错误?任何想法,我缺少什么
Exception in thread "main" java.util.ServiceConfigurationError: javax.imageio.spi.ImageReaderSpi: Provider com.sun.media.imageioimpl.plugins.pcx.PCXImageReaderSpi not found
at java.util.ServiceLoader.fail(Unknown Source)
at java.util.ServiceLoader.access$300(Unknown Source)
at java.util.ServiceLoader$LazyIterator.next(Unknown Source)
at java.util.ServiceLoader$1.next(Unknown Source)
at javax.imageio.spi.IIORegistry.registerApplicationClasspathSpis(Unknown Source)
at javax.imageio.spi.IIORegistry.<init>(Unknown Source)
at javax.imageio.spi.IIORegistry.getDefaultInstance(Unknown Source)
at javax.imageio.ImageIO.<clinit>(Unknown Source)
at dcm4chee.DicomToJpeg.main(DicomToJpeg.java:29)
某处在你的classpath,你的避风港(一个JAR中的文件或资源)的条目,命名为:
/META-INF/services/javax.imageio.spi.ImageReaderSpi
...含有(至少)的行:
com.sun.media.imageioimpl.plugins.pcx.PCXImageReaderSpi
每当ImageIO
被初始化,或ImageIO.scanForPlugins()
的调用由,在IIORegistry/ServiceLoader
将扫描匹配上面的名称资源类路径。对于这个文件/资源的每一行,它会尝试与给定的名称(通常是服务提供商)将类实例。如果类不能被发现,或者不能被实例化(访问保护,缺少构造等),这将失败,ServiceConfigurationError
。
例如见this link以获取更多信息。
要解决,您可能需要删除的文件或包含资源的JAR(或编辑出来的jar),或删除含有不良服务提供商行。此外,服务提供商添加到您的类路径(我认为这是正常的JAR称为jai_imageio.jar
)。但我不认为你需要PCX(ZSOFT画笔格式)支持DICOM解码。
static
{
for (Iterator<urclass> im = ServiceLoader.load(urclass.class).iterator(); im.hasNext();)
try
{
urclass tclass = im.next();
}
catch (ServiceConfigurationError e)
{
}
}
这是查找未在JRE完成,并允许不能被实例化类的样本。