ImageDecoderImpl.java
上传用户:btjssb159
上传日期:2018-01-04
资源大小:241k
文件大小:7k
源码类别:

DNA

开发平台:

Java

  1. /*
  2.  * Copyright (c) 2001 Sun Microsystems, Inc. All Rights Reserved.
  3.  *
  4.  * Redistribution and use in source and binary forms, with or without 
  5.  * modification, are permitted provided that the following conditions are met:
  6.  * 
  7.  * -Redistributions of source code must retain the above copyright notice, this 
  8.  * list of conditions and the following disclaimer.
  9.  *
  10.  * -Redistribution in binary form must reproduct the above copyright notice,
  11.  * this list of conditions and the following disclaimer in the documentation
  12.  * and/or other materials provided with the distribution.
  13.  * 
  14.  * Neither the name of Sun Microsystems, Inc. or the names of contributors may
  15.  * be used to endorse or promote products derived from this software without
  16.  * specific prior written permission.
  17.  * 
  18.  * This software is provided "AS IS," without a warranty of any kind. ALL
  19.  * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
  20.  * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
  21.  * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE
  22.  * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
  23.  * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS
  24.  * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
  25.  * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
  26.  * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
  27.  * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
  28.  * POSSIBILITY OF SUCH DAMAGES.
  29.  * 
  30.  * You acknowledge that Software is not designed,licensed or intended for use in 
  31.  * the design, construction, operation or maintenance of any nuclear facility.
  32.  */
  33. import java.awt.image.Raster;
  34. import java.awt.image.RenderedImage;
  35. import java.io.InputStream;
  36. import java.io.IOException;
  37. /**
  38.  * A partial implementation of the <code>ImageDecoder</code> interface
  39.  * useful for subclassing.
  40.  *
  41.  * <p><b> This class is not a committed part of the JAI API.  It may
  42.  * be removed or changed in future releases of JAI.</b>
  43.  */
  44. public abstract class ImageDecoderImpl implements ImageDecoder {
  45.     /**
  46.      * The <code>SeekableStream</code> associcted with this
  47.      * <code>ImageEncoder</code>.
  48.      */
  49.     protected SeekableStream input;
  50.     /**
  51.      * The <code>ImageDecodeParam</code> object associated with this
  52.      * <code>ImageEncoder</code>.
  53.      */
  54.     protected ImageDecodeParam param;
  55.     /**
  56.      * Constructs an <code>ImageDecoderImpl</code> with a given
  57.      * <code>SeekableStream</code> and <code>ImageDecodeParam</code>
  58.      * instance.
  59.      */
  60.     public ImageDecoderImpl(SeekableStream input,
  61.                             ImageDecodeParam param) {
  62.         this.input = input;
  63.         this.param = param;
  64.     }
  65.     /**
  66.      * Constructs an <code>ImageDecoderImpl</code> with a given
  67.      * <code>InputStream</code> and <code>ImageDecodeParam</code>
  68.      * instance.  The <code>input</code> parameter will be used to
  69.      * construct a <code>ForwardSeekableStream</code>; if the ability
  70.      * to seek backwards is required, the caller should construct
  71.      * an instance of <code>SeekableStream</code> and
  72.      * make use of the other contructor.
  73.      */
  74.     public ImageDecoderImpl(InputStream input,
  75.                             ImageDecodeParam param) {
  76.         this.input = new ForwardSeekableStream(input);
  77.         this.param = param;
  78.     }
  79.     /**
  80.      * Returns the current parameters as an instance of the
  81.      * <code>ImageDecodeParam</code> interface.  Concrete
  82.      * implementations of this interface will return corresponding
  83.      * concrete implementations of the <code>ImageDecodeParam</code>
  84.      * interface.  For example, a <code>JPEGImageDecoder</code> will
  85.      * return an instance of <code>JPEGDecodeParam</code>.
  86.      */
  87.     public ImageDecodeParam getParam() {
  88.         return param;
  89.     }
  90.     /**
  91.      * Sets the current parameters to an instance of the
  92.      * <code>ImageDecodeParam</code> interface.  Concrete
  93.      * implementations of <code>ImageDecoder</code> may throw a
  94.      * <code>RuntimeException</code> if the <code>param</code>
  95.      * argument is not an instance of the appropriate subclass or
  96.      * subinterface.  For example, a <code>JPEGImageDecoder</code>
  97.      * will expect <code>param</code> to be an instance of
  98.      * <code>JPEGDecodeParam</code>.
  99.      */
  100.     public void setParam(ImageDecodeParam param) {
  101.         this.param = param;
  102.     }
  103.     /**
  104.      * Returns the <code>SeekableStream</code> associated with
  105.      * this <code>ImageDecoder</code>.
  106.      */
  107.     public SeekableStream getInputStream() {
  108.         return input;
  109.     }
  110.     /**
  111.      * Returns the number of pages present in the current stream.
  112.      * By default, the return value is 1.  Subclasses that deal with
  113.      * multi-page formats should override this method.
  114.      */
  115.     public int getNumPages() throws IOException {
  116.         return 1;
  117.     }
  118.     
  119.     /**
  120.      * Returns a <code>Raster</code> that contains the decoded
  121.      * contents of the <code>SeekableStream</code> associated
  122.      * with this <code>ImageDecoder</code>.  Only
  123.      * the first page of a multi-page image is decoded.
  124.      */
  125.     public Raster decodeAsRaster() throws IOException {
  126.         return decodeAsRaster(0);
  127.     }
  128.     /**
  129.      * Returns a <code>Raster</code> that contains the decoded
  130.      * contents of the <code>SeekableStream</code> associated
  131.      * with this <code>ImageDecoder</code>.
  132.      * The given page of a multi-page image is decoded.  If
  133.      * the page does not exist, an IOException will be thrown.
  134.      * Page numbering begins at zero.
  135.      *
  136.      * @param page The page to be decoded.
  137.      */
  138.     public Raster decodeAsRaster(int page) throws IOException {
  139.         RenderedImage im = decodeAsRenderedImage(page);
  140.         return im.getData();
  141.     }
  142.     /**
  143.      * Returns a <code>RenderedImage</code> that contains the decoded
  144.      * contents of the <code>SeekableStream</code> associated
  145.      * with this <code>ImageDecoder</code>.  Only
  146.      * the first page of a multi-page image is decoded.
  147.      */
  148.     public RenderedImage decodeAsRenderedImage() throws IOException {
  149.         return decodeAsRenderedImage(0);
  150.     }
  151.     /**
  152.      * Returns a <code>RenderedImage</code> that contains the decoded
  153.      * contents of the <code>SeekableStream</code> associated
  154.      * with this <code>ImageDecoder</code>.
  155.      * The given page of a multi-page image is decoded.  If
  156.      * the page does not exist, an IOException will be thrown.
  157.      * Page numbering begins at zero.
  158.      *
  159.      * @param page The page to be decoded.
  160.      */
  161.     public abstract RenderedImage decodeAsRenderedImage(int page)
  162.         throws IOException;
  163. }