如何使用Java Commons Sanselan / Imaging in Java查看/读取TIFF图像文件?

时间:2016-06-23 12:10:18

标签: java apache tiff

我是Apache Commons Imaging(以及StackOverflow)的新手,我无法找到任何有用的资源来学习如何使用Imaging。有文档,但是缺乏示例/教程来解释正在发生的事情。

目标:我想使用Apache Commons Imaging制作一个TIFF图像查看器(显示器)。但我一直无法找到任何示例代码或接近它的东西,甚至是一个相关的教程。

代码中的问题: 1)我不确定下面的代码是否是我想要的任务。 2)我不知道如何使用main()方法测试'second'类。

我无法编写main()方法来测试以下类:

public class second {
    public static BufferedImage imageReadExample(final File file)
            throws ImageReadException, IOException {
        final Map<String, Object> params = new HashMap<>();

        // set optional parameters if you like
        params.put(SanselanConstants.BUFFERED_IMAGE_FACTORY,
                new ManagedImageBufferedImageFactory());

        // params.put(ImagingConstants.PARAM_KEY_VERBOSE, Boolean.TRUE);

        // read image
        final BufferedImage image = Sanselan.getBufferedImage(file, params);

        return image;
    }

    public static class ManagedImageBufferedImageFactory implements
            IBufferedImageFactory {

        @Override
        public BufferedImage getColorBufferedImage(final int width, final int height,
                final boolean hasAlpha) {
            final GraphicsEnvironment ge = GraphicsEnvironment
                .getLocalGraphicsEnvironment();
            final GraphicsDevice gd = ge.getDefaultScreenDevice();
            final GraphicsConfiguration gc = gd.getDefaultConfiguration();
            return gc.createCompatibleImage(width, height,
                Transparency.TRANSLUCENT);
        }

        @Override
        public BufferedImage getGrayscaleBufferedImage(final int width, final int height,
                final boolean hasAlpha) {
            return getColorBufferedImage(width, height, hasAlpha);
        }
    }
}

我从here

的Apache网站(ImageReadExample)上提供的一个示例中获取了上述代码

为了测试'第二'课程,我写了主要方法如下:

public class test {
    public static void main(String args[]){
        final File file = new File("someimage.TIF");

        try {
            final BufferedImage image = second.imageReadExample(file);
        } catch (ImageReadException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

请注意,上面的主要方法只是一个天真的尝试,因为我不知道如何测试'第二'课程。 我想显示我在File构造函数中写入路径的TIFF图像。

当我运行此代码时,它会抛出此异常:

org.apache.sanselan.ImageReadException: Missing expected field: 277 (0x115: Samples Per Pixel): 
at org.apache.sanselan.formats.tiff.TiffDirectory.findField(TiffDirectory.java:186)
at org.apache.sanselan.formats.tiff.TiffImageParser.getBufferedImage(TiffImageParser.java:463)
at org.apache.sanselan.formats.tiff.TiffDirectory.getTiffImage(TiffDirectory.java:163)
at org.apache.sanselan.formats.tiff.TiffImageParser.getBufferedImage(TiffImageParser.java:441)
at org.apache.sanselan.Sanselan.getBufferedImage(Sanselan.java:1264)
at org.apache.sanselan.Sanselan.getBufferedImage(Sanselan.java:1255)
at bisag.second.imageReadExample(second.java:29)
at bisag.test.main(test.java:22)

这里,'bisag'是我的包名,其中包含“test”和“second”类。

需要更正代码并帮助理解要执行的操作以及如何实现代码。提前谢谢!

P.S。 :由于我的PC中只有Sanselan(0.97孵化器)(而不是Imaging 1.0 SNAPSHOT),我根据Sanselan修改了代码。所以,代码基本相同。

0 个答案:

没有答案