imageioreader.java

来自「world wind java sdk 源码」· Java 代码 · 共 210 行

JAVA
210
字号
/* Copyright (C) 2001, 2008 United States Government as represented bythe Administrator of the National Aeronautics and Space Administration.All Rights Reserved.*/package gov.nasa.worldwind.data;import gov.nasa.worldwind.formats.tiff.GeotiffImageReaderSpi;import gov.nasa.worldwind.util.*;import gov.nasa.worldwind.avlist.*;/** * @author dcollins * @version $Id: ImageIOReader.java 9716 2009-03-27 16:55:14Z dcollins $ */public class ImageIOReader extends BasicDataIODescriptor{    static    {        javax.imageio.spi.IIORegistry.getDefaultInstance().registerServiceProvider(GeotiffImageReaderSpi.inst());    }    public ImageIOReader()    {        super(javax.imageio.ImageIO.getReaderMIMETypes(), getImageIOReaderSuffixes());    }    public boolean canRead(Object input)    {        if (input == null)            return false;        // Use format suffix as an early exit criteria. If the input has a format suffix, and it does not match, then        // immediately return false.        String suffix = getSuffixFor(input);        //noinspection SimplifiableIfStatement        if (suffix != null && !this.matchesFormatSuffix(suffix))            return false;        return this.doCanRead(input);    }    public java.awt.image.BufferedImage read(Object input) throws java.io.IOException    {        if (!this.canRead(input))        {            String message = Logging.getMessage("generic.InvalidDataSource", input);            Logging.logger().severe(message);            throw new java.io.IOException(message);        }        return this.doRead(input);    }    public void readMetadata(Object input, AVList values) throws java.io.IOException    {        if (!this.canRead(input))        {            String message = Logging.getMessage("generic.InvalidDataSource", input);            Logging.logger().severe(message);            throw new java.io.IOException(message);        }        if (values == null)        {            String message = Logging.getMessage("nullValue.AVListIsNull");            Logging.logger().severe(message);            throw new java.io.IOException(message);        }        this.doReadMetadata(input, values);    }    protected boolean doCanRead(Object input)    {        javax.imageio.stream.ImageInputStream iis = null;        javax.imageio.ImageReader reader = null;        try        {            iis = createInputStream(input);            if (iis != null)                reader = readerFor(iis);        }        catch (Exception ignored)        {        }        finally        {            if (reader != null)            {                reader.dispose();            }            try            {                if (iis != null)                {                    iis.close();                }            }            catch (Exception ignored)            {            }        }        return reader != null;    }    protected java.awt.image.BufferedImage doRead(Object input) throws java.io.IOException    {        javax.imageio.stream.ImageInputStream iis = createInputStream(input);        return javax.imageio.ImageIO.read(iis);    }    protected void doReadMetadata(Object input, AVList values) throws java.io.IOException    {        javax.imageio.stream.ImageInputStream iis = createInputStream(input);        javax.imageio.ImageReader reader = readerFor(iis);        try        {            if (reader == null)            {                String message = Logging.getMessage("generic.UnrecognizedImageSourceType", input);                Logging.logger().severe(message);                throw new java.io.IOException(message);            }            reader.setInput(iis, true, true);            int width = reader.getWidth(0);            int height = reader.getHeight(0);            values.setValue(AVKey.WIDTH, width);            values.setValue(AVKey.HEIGHT, height);        }        finally        {            if (reader != null)                reader.dispose();            iis.close();        }    }    protected static javax.imageio.stream.ImageInputStream createInputStream(Object input) throws java.io.IOException    {        // ImageIO can create an ImageInputStream automatically from a File references or a standard I/O InputStream        // reference. If the data source is a URL, or a string file path, then we must open an input stream ourselves.        if (input instanceof java.net.URL)            input = ((java.net.URL) input).openStream();        else if (input instanceof CharSequence)            input = openInputStream(input.toString());        return javax.imageio.ImageIO.createImageInputStream(input);    }    protected static java.io.InputStream openInputStream(String path) throws java.io.IOException    {        Object streamOrException = WWIO.getFileOrResourceAsStream(path, null);        if (streamOrException == null)        {            return null;        }        else if (streamOrException instanceof java.io.IOException)        {            throw (java.io.IOException) streamOrException;        }        else if (streamOrException instanceof Exception)        {            String message = Logging.getMessage("generic.ExceptionAttemptingToReadImageFile", path);            Logging.logger().log(java.util.logging.Level.SEVERE, message, streamOrException);            throw new java.io.IOException(message);        }        return (java.io.InputStream) streamOrException;    }    protected static javax.imageio.ImageReader readerFor(javax.imageio.stream.ImageInputStream iis)    {        java.util.Iterator<javax.imageio.ImageReader> readers = javax.imageio.ImageIO.getImageReaders(iis);        if (!readers.hasNext())            return null;        return readers.next();    }    protected static String[] getImageIOReaderSuffixes()    {        java.util.Iterator<javax.imageio.spi.ImageReaderSpi> iter;        try        {            iter = javax.imageio.spi.IIORegistry.getDefaultInstance().getServiceProviders(                javax.imageio.spi.ImageReaderSpi.class, true);        }        catch (Exception e)        {            return new String[0];        }        java.util.Set<String> set = new java.util.HashSet<String>();        while (iter.hasNext())        {            javax.imageio.spi.ImageReaderSpi spi = iter.next();            String[] names = spi.getFileSuffixes();            set.addAll(java.util.Arrays.asList(names));        }        String[] array = new String[set.size()];        set.toArray(array);        return array;    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?