/* $Id$
* Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
* For details on use and redistribution please refer to the
* LICENSE file included with these sources."
*/
package org.apache.fop.image;
// Java
import java.util.Hashtable;
import java.net.URL;
// FOP
import org.apache.fop.datatypes.ColorSpace;
import org.apache.fop.pdf.PDFColor;
import org.apache.fop.pdf.PDFFilter;
import org.apache.fop.image.analyser.ImageReaderFactory;
import org.apache.fop.image.analyser.ImageReader;
/**
* Base class to implement the FopImage interface.
* @author Eric SCHAEFFER
* @see FopImage
*/
public abstract class AbstractFopImage implements FopImage {
/**
* Image width (in pixel).
*/
protected int m_width = 0;
/**
* Image height (in pixel).
*/
protected int m_height = 0;
/**
* Image URL.
*/
protected URL m_href = null;
/**
* ImageReader object (to obtain image header informations).
*/
protected ImageReader m_imageReader = null;
/**
* Image color space (org.apache.fop.datatypes.ColorSpace).
*/
protected ColorSpace m_colorSpace = null;
/**
* Bits per pixel.
*/
protected int m_bitsPerPixel = 0;
/**
* Image data (uncompressed).
*/
protected byte[] m_bitmaps = null;
/**
* Image data size.
*/
protected int m_bitmapsSize = 0;
/**
* Image transparency.
*/
protected boolean m_isTransparent = false;
/**
* Transparent color (org.apache.fop.pdf.PDFColor).
*/
protected PDFColor m_transparentColor = null;
/**
* Constructor.
* Construct a new FopImage object and initialize its default properties:
*
* - image width
*
- image height
*
* The image data isn't kept in memory.
* @param href image URL
* @return a new FopImage object
* @exception FopImageException an error occured during initialization
*/
public AbstractFopImage(URL href) throws FopImageException {
this.m_href = href;
try {
this.m_imageReader = ImageReaderFactory.Make(this.m_href.toExternalForm(), this.m_href.openStream());
} catch (Exception e) {
throw new FopImageException(e.getMessage());
}
this.m_width = this.m_imageReader.getWidth();
this.m_height = this.m_imageReader.getHeight();
}
/**
* Constructor.
* Construct a new FopImage object and initialize its default properties:
*
* - image width
*
- image height
*
* The image data isn't kept in memory.
* @param href image URL
* imgReader ImageReader object
* @return a new FopImage object
* @exception FopImageException an error occured during initialization
*/
public AbstractFopImage(URL href, ImageReader imgReader)
throws FopImageException {
this.m_href = href;
this.m_imageReader = imgReader;
this.m_width = this.m_imageReader.getWidth();
this.m_height = this.m_imageReader.getHeight();
}
/**
* Load image data and initialize its properties.
* Subclasses need to implement this method.
* @exception FopImageException an error occured during loading
*/
abstract protected void loadImage() throws FopImageException;
/**
* Return the image URL.
* @return the image URL (as String)
*/
public String getURL() {
return this.m_href.toString();
}
/**
* Return the image width.
* @return the image width
* @exception FopImageException an error occured during property retriaval
*/
public int getWidth() throws FopImageException {
if (this.m_width == 0)
this.loadImage();
return this.m_width;
}
/**
* Return the image height.
* @return the image height
* @exception FopImageException an error occured during property retriaval
*/
public int getHeight() throws FopImageException {
if (this.m_height == 0)
this.loadImage();
return this.m_height;
}
/**
* Return the image color space.
* @return the image color space (org.apache.fop.datatypes.ColorSpace)
* @exception FopImageException an error occured during property retriaval
*/
public ColorSpace getColorSpace() throws FopImageException {
if (this.m_colorSpace == null)
this.loadImage();
return this.m_colorSpace;
}
/**
* Return the number of bits per pixel.
* @return number of bits per pixel
* @exception FopImageException an error occured during property retriaval
*/
public int getBitsPerPixel() throws FopImageException {
if (this.m_bitsPerPixel == 0)
this.loadImage();
return this.m_bitsPerPixel;
}
/**
* Return the image transparency.
* @return true if the image is transparent
* @exception FopImageException an error occured during property retriaval
*/
public boolean isTransparent() throws FopImageException {
return this.m_isTransparent;
}
/**
* Return the transparent color.
* @return the transparent color (org.apache.fop.pdf.PDFColor)
* @exception FopImageException an error occured during property retriaval
*/
public PDFColor getTransparentColor() throws FopImageException {
return this.m_transparentColor;
}
/**
* Return the image data (uncompressed).
* @return the image data
* @exception FopImageException an error occured during loading
*/
public byte[] getBitmaps() throws FopImageException {
if (this.m_bitmaps == null)
this.loadImage();
return this.m_bitmaps;
}
/**
* Return the image data size (uncompressed).
* @return the image data size
* @exception FopImageException an error occured during loading
*/
public int getBitmapsSize() throws FopImageException {
if (this.m_bitmapsSize == 0)
this.loadImage();
return this.m_bitmapsSize;
}
/**
* Return the original image data (compressed).
* @return the original image data
* @exception FopImageException an error occured during loading
*/
public byte[] getRessourceBytes() throws FopImageException {
return null;
}
/**
* Return the original image data size (compressed).
* @return the original image data size
* @exception FopImageException an error occured during loading
*/
public int getRessourceBytesSize() throws FopImageException {
return 0;
}
/**
* Return the original image compression type.
* @return the original image compression type (org.apache.fop.pdf.PDFFilter)
* @exception FopImageException an error occured during loading
*/
public PDFFilter getPDFFilter() throws FopImageException {
return null;
}
/**
* Free all ressource.
*/
public void close() {
/* For the moment, only release the bitmaps (image areas
can share the same FopImage object)
Thus, even if it had been called, other properties
are still available.
*/
//this.m_width = 0;
//this.m_height = 0;
//this.m_href = null;
//this.m_colorSpace = null;
//this.m_bitsPerPixel = 0;
this.m_bitmaps = null;
this.m_bitmapsSize = 0;
//this.m_isTransparent = false;
//this.m_transparentColor = null;
}
}