org.apache.xmlgraphics.image.codec.util.ImageDecoderImpl Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of xmlgraphics-commons Show documentation
Show all versions of xmlgraphics-commons Show documentation
Apache XML Graphics Commons is a library that consists of several reusable
components used by Apache Batik and Apache FOP. Many of these components
can easily be used separately outside the domains of SVG and XSL-FO.
/*
* 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.
*
*/
public abstract class ImageDecoderImpl implements ImageDecoder {
/**
* The SeekableStream
associcted with this
* ImageEncoder
.
*/
protected SeekableStream input;
/**
* The ImageDecodeParam
object associated with this
* ImageEncoder
.
*/
protected ImageDecodeParam param;
/**
* Constructs an ImageDecoderImpl
with a given
* SeekableStream
and ImageDecodeParam
* 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.
*/
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
.
*/
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
.
*/
public void setParam(ImageDecodeParam param) {
this.param = param;
}
/**
* Returns the SeekableStream
associated with
* this ImageDecoder
.
*/
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.
*/
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.
*/
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.
*
* @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.
*/
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.
*
* @param page The page to be decoded.
*/
public abstract RenderedImage decodeAsRenderedImage(int page)
throws IOException;
}