/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/* $Id: ImageDecoderImpl.java 1732018 2016-02-24 04:51:06Z gadams $ */
package org.apache.xmlgraphics.image.codec.util;
import java.awt.image.Raster;
import java.awt.image.RenderedImage;
import java.io.IOException;
import java.io.InputStream;
A partial implementation of the ImageDecoder
interface
useful for subclassing.
/**
* A partial implementation of the <code>ImageDecoder</code> interface
* useful for subclassing.
*
*/
public abstract class ImageDecoderImpl implements ImageDecoder {
The SeekableStream
associcted with this
ImageEncoder
.
/**
* The <code>SeekableStream</code> associcted with this
* <code>ImageEncoder</code>.
*/
protected SeekableStream input;
The ImageDecodeParam
object associated with this
ImageEncoder
.
/**
* The <code>ImageDecodeParam</code> object associated with this
* <code>ImageEncoder</code>.
*/
protected ImageDecodeParam param;
Constructs an ImageDecoderImpl
with a given
SeekableStream
and ImageDecodeParam
instance.
/**
* Constructs an <code>ImageDecoderImpl</code> with a given
* <code>SeekableStream</code> and <code>ImageDecodeParam</code>
* instance.
*/
public ImageDecoderImpl(SeekableStream input,
ImageDecodeParam param) {
this.input = input;
this.param = param;
}
Constructs an ImageDecoderImpl
with a given
InputStream
and ImageDecodeParam
instance. The input
parameter will be used to
construct a ForwardSeekableStream
; if the ability
to seek backwards is required, the caller should construct
an instance of SeekableStream
and
make use of the other contructor.
/**
* Constructs an <code>ImageDecoderImpl</code> with a given
* <code>InputStream</code> and <code>ImageDecodeParam</code>
* instance. The <code>input</code> parameter will be used to
* construct a <code>ForwardSeekableStream</code>; if the ability
* to seek backwards is required, the caller should construct
* an instance of <code>SeekableStream</code> and
* make use of the other contructor.
*/
public ImageDecoderImpl(InputStream input,
ImageDecodeParam param) {
this.input = new ForwardSeekableStream(input);
this.param = param;
}
Returns the current parameters as an instance of the
ImageDecodeParam
interface. Concrete
implementations of this interface will return corresponding
concrete implementations of the ImageDecodeParam
interface. For example, a JPEGImageDecoder
will
return an instance of JPEGDecodeParam
.
/**
* Returns the current parameters as an instance of the
* <code>ImageDecodeParam</code> interface. Concrete
* implementations of this interface will return corresponding
* concrete implementations of the <code>ImageDecodeParam</code>
* interface. For example, a <code>JPEGImageDecoder</code> will
* return an instance of <code>JPEGDecodeParam</code>.
*/
public ImageDecodeParam getParam() {
return param;
}
Sets the current parameters to an instance of the
ImageDecodeParam
interface. Concrete
implementations of ImageDecoder
may throw a
RuntimeException
if the param
argument is not an instance of the appropriate subclass or
subinterface. For example, a JPEGImageDecoder
will expect param
to be an instance of
JPEGDecodeParam
.
/**
* Sets the current parameters to an instance of the
* <code>ImageDecodeParam</code> interface. Concrete
* implementations of <code>ImageDecoder</code> may throw a
* <code>RuntimeException</code> if the <code>param</code>
* argument is not an instance of the appropriate subclass or
* subinterface. For example, a <code>JPEGImageDecoder</code>
* will expect <code>param</code> to be an instance of
* <code>JPEGDecodeParam</code>.
*/
public void setParam(ImageDecodeParam param) {
this.param = param;
}
Returns the SeekableStream
associated with
this ImageDecoder
.
/**
* Returns the <code>SeekableStream</code> associated with
* this <code>ImageDecoder</code>.
*/
public SeekableStream getInputStream() {
return input;
}
Returns the number of pages present in the current stream.
By default, the return value is 1. Subclasses that deal with
multi-page formats should override this method.
/**
* Returns the number of pages present in the current stream.
* By default, the return value is 1. Subclasses that deal with
* multi-page formats should override this method.
*/
public int getNumPages() throws IOException {
return 1;
}
Returns a Raster
that contains the decoded
contents of the SeekableStream
associated
with this ImageDecoder
. Only
the first page of a multi-page image is decoded.
/**
* Returns a <code>Raster</code> that contains the decoded
* contents of the <code>SeekableStream</code> associated
* with this <code>ImageDecoder</code>. Only
* the first page of a multi-page image is decoded.
*/
public Raster decodeAsRaster() throws IOException {
return decodeAsRaster(0);
}
Returns a Raster
that contains the decoded
contents of the SeekableStream
associated
with this ImageDecoder
.
The given page of a multi-page image is decoded. If
the page does not exist, an IOException will be thrown.
Page numbering begins at zero.
Params: - page – The page to be decoded.
/**
* Returns a <code>Raster</code> that contains the decoded
* contents of the <code>SeekableStream</code> associated
* with this <code>ImageDecoder</code>.
* The given page of a multi-page image is decoded. If
* the page does not exist, an IOException will be thrown.
* Page numbering begins at zero.
*
* @param page The page to be decoded.
*/
public Raster decodeAsRaster(int page) throws IOException {
RenderedImage im = decodeAsRenderedImage(page);
return im.getData();
}
Returns a RenderedImage
that contains the decoded
contents of the SeekableStream
associated
with this ImageDecoder
. Only
the first page of a multi-page image is decoded.
/**
* Returns a <code>RenderedImage</code> that contains the decoded
* contents of the <code>SeekableStream</code> associated
* with this <code>ImageDecoder</code>. Only
* the first page of a multi-page image is decoded.
*/
public RenderedImage decodeAsRenderedImage() throws IOException {
return decodeAsRenderedImage(0);
}
Returns a RenderedImage
that contains the decoded
contents of the SeekableStream
associated
with this ImageDecoder
.
The given page of a multi-page image is decoded. If
the page does not exist, an IOException will be thrown.
Page numbering begins at zero.
Params: - page – The page to be decoded.
/**
* Returns a <code>RenderedImage</code> that contains the decoded
* contents of the <code>SeekableStream</code> associated
* with this <code>ImageDecoder</code>.
* The given page of a multi-page image is decoded. If
* the page does not exist, an IOException will be thrown.
* Page numbering begins at zero.
*
* @param page The page to be decoded.
*/
public abstract RenderedImage decodeAsRenderedImage(int page)
throws IOException;
}