/*
* $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.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;
import org.apache.fop.fo.FOUserAgent;
/**
* Base class to implement the FopImage interface.
* @author Eric SCHAEFFER
* @author Modified by Eric Dalquist - 9/14/2001 - ebdalqui@mtu.edu
* @see FopImage
*/
public abstract class AbstractFopImage implements FopImage {
protected int loaded = 0;
/**
* 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 FopImage.ImageInfo imageInfo = 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;
/**
* Image compression type.
* Added by Eric Dalquist
*/
protected PDFFilter m_compressionType = 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
* imgReader ImageReader object
* @return a new FopImage object
*/
public AbstractFopImage(URL href, FopImage.ImageInfo info) {
this.m_href = href;
this.imageInfo = info;
this.m_width = this.imageInfo.width;
this.m_height = this.imageInfo.height;
loaded = loaded & DIMENSIONS;
}
public String getMimeType() {
return imageInfo.mimeType;
}
/**
* Load image data and initialize its properties.
*/
public synchronized boolean load(int type, FOUserAgent ua) {
if((loaded & type) != 0) {
return true;
}
boolean success = true;
if(((type & DIMENSIONS) != 0) && ((loaded & DIMENSIONS) == 0)) {
success = success && loadDimensions(ua);
if(!success) {
return false;
}
loaded = loaded & DIMENSIONS;
}
if(((type & BITMAP) != 0) && ((loaded & BITMAP) == 0)) {
success = success && loadBitmap(ua);
if(success) {
loaded = loaded & BITMAP;
}
}
return success;
}
protected boolean loadDimensions(FOUserAgent ua) {
return false;
}
protected boolean loadBitmap(FOUserAgent ua) {
return false;
}
/**
* 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
*/
public int getWidth() {
return this.m_width;
}
/**
* Return the image height.
* @return the image height
*/
public int getHeight() {
return this.m_height;
}
/**
* Return the image color space.
* @return the image color space (org.apache.fop.datatypes.ColorSpace)
*/
public ColorSpace getColorSpace() {
return this.m_colorSpace;
}
/**
* Return the number of bits per pixel.
* @return number of bits per pixel
*/
public int getBitsPerPixel() {
return this.m_bitsPerPixel;
}
/**
* Return the image transparency.
* @return true if the image is transparent
*/
public boolean isTransparent() {
return this.m_isTransparent;
}
/**
* Return the transparent color.
* @return the transparent color (org.apache.fop.pdf.PDFColor)
*/
public PDFColor getTransparentColor() {
return this.m_transparentColor;
}
/**
* Return the image data (uncompressed).
* @return the image data
*/
public byte[] getBitmaps() {
return this.m_bitmaps;
}
/**
* Return the image data size (uncompressed).
* @return the image data size
*/
public int getBitmapsSize() {
return this.m_bitmapsSize;
}
/**
* Return the original image data (compressed).
* @return the original image data
*/
public byte[] getRessourceBytes() {
return null;
}
/**
* Return the original image data size (compressed).
* @return the original image data size
*/
public int getRessourceBytesSize() {
return 0;
}
/**
* Return the original image compression type.
* @return the original image compression type (org.apache.fop.pdf.PDFFilter)
*/
public PDFFilter getPDFFilter() {
/*
* Added by Eric Dalquist
* Using the bitsPerPixel var as our flag since many imges will
* have a null m_compressionType even after being loaded
*/
return m_compressionType;
}
}