在Swing图像格式和服务提供商

时间:2014-07-19 18:41:45

标签: java image swing

我原本想知道Swing支持哪些图像格式,独立于平台。 Swing是我首选的工具包,我正在尝试研究在我的爱好工作中使用哪种图像格式的决定。一旦我知道哪些格式本身就受支持,我将决定使用其中一种格式是否更简单,或者是否更容易找到并使用经过适当许可的第三方库。但是,我遇到了麻烦,我想帮助解决我出错的地方。

我已经通过javax.imageio API进行了一些挖掘,并且通过执行以下操作,我未能成功地确定我的PC上支持哪些格式:

package iiortester;

import javax.imageio.spi.IIORegistry;
import javax.imageio.spi.ImageReaderSpi;

public class IIORTester {
    public static void main(String[] args) {
        IIORegistry iioRegistry = IIORegistry.getDefaultInstance();
        ImageReaderSpi imageReaderSpi =
                iioRegistry.getServiceProviderByClass(ImageReaderSpi.class);
        System.out.println(imageReaderSpi); // output is null
    }
}

当我调用ServiceRegistry.getCategories()时,默认的IIORegistry实例确实报告了ImageReaderSpi类别,但是当我尝试在上面的代码中获取图像阅读器服务提供程序接口时,我收到null个引用。这可能暗示我没有以正确的方式解决这个问题,我查询ImageReaderWriterSpi.getFormatNames()的计划已被挫败。但是,即使它成功报告支持的图像格式,也不会告诉我这些格式是否在任何JVM中本身都受支持,或者是否因为我正在运行Windows 7 JVM而受到支持。

我在寻找错误的地方吗?大概。我应该去哪儿看?我不知道。 JVM是否具有内置的ImageIO服务提供商,或者仅适用于第三方库注册? Swing API中哪些软件可以查找支持的图像格式?

2 个答案:

答案 0 :(得分:2)

所有JRE都应支持GIF,JPEG和PNG。

作为任何特定JRE支持的更具体的答案,请参阅提供大量信息的MediaTypes源代码。

答案 1 :(得分:1)

要查看支持的图像格式:

要查看哪些文件可以阅读:ImageIO.getReaderFormatNames();
  要查看可以写入哪些文件:ImageIO.getWriterFormatNames();

JOptionPane.showMessageDialog(null,"Java Image Formats:\r\nread:\t"+Arrays.toString(ImageIO.getReaderFormatNames())+"\r\nwrite:\t"+Arrays.toString(ImageIO.getWriterFormatNames()));

在Java中注册的图像类型将显示在列表中。