From 9219c421676e091ba26d7b4b4e63cff296e5311d Mon Sep 17 00:00:00 2001 From: eschaeffer Date: Mon, 29 May 2000 09:22:53 +0000 Subject: [PATCH] Add a consumer class not to have to rewrite it in each image implementing class git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@193389 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/fop/image/FopImageConsumer.java | 183 ++++++++++++++++++ 1 file changed, 183 insertions(+) create mode 100644 src/org/apache/fop/image/FopImageConsumer.java diff --git a/src/org/apache/fop/image/FopImageConsumer.java b/src/org/apache/fop/image/FopImageConsumer.java new file mode 100644 index 000000000..5954dc9e4 --- /dev/null +++ b/src/org/apache/fop/image/FopImageConsumer.java @@ -0,0 +1,183 @@ +/* + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +//Author: Eric SCHAEFFER +//Description: implement ImageConsumer for FopImage classes + +package org.apache.fop.image; + +// Java +import java.util.Hashtable; +import java.awt.image.*; +import java.awt.*; + +import java.lang.reflect.Array; + +// CONSUMER CLASS +public class FopImageConsumer implements ImageConsumer { + protected int width = -1; + protected int height = -1; + protected Integer imageStatus = new Integer(-1); + protected int hints = 0; + protected Hashtable properties = null; + protected ColorModel cm = null; + protected ImageProducer ip = null; + + public FopImageConsumer(ImageProducer iprod) { + this.ip = iprod; + } + + public void imageComplete(int status) { +/* +System.err.print("Status "); +if (status == ImageConsumer.COMPLETESCANLINES) { + System.err.println("CompleteScanLines"); +} else if (status == ImageConsumer.IMAGEABORTED) { + System.err.println("ImageAborted"); +} else if (status == ImageConsumer.IMAGEERROR) { + System.err.println("ImageError"); +} else if (status == ImageConsumer.RANDOMPIXELORDER) { + System.err.println("RandomPixelOrder"); +} else if (status == ImageConsumer.SINGLEFRAME) { + System.err.println("SingleFrame"); +} else if (status == ImageConsumer.SINGLEFRAMEDONE) { + System.err.println("SingleFrameDone"); +} else if (status == ImageConsumer.SINGLEPASS) { + System.err.println("SinglePass"); +} else if (status == ImageConsumer.STATICIMAGEDONE) { + System.err.println("StaticImageDone"); +} else if (status == ImageConsumer.TOPDOWNLEFTRIGHT) { + System.err.println("TopDownLeftRight"); +} +*/ + synchronized(this.imageStatus) { + // Need to stop status if image done + if (this.imageStatus.intValue() != ImageConsumer.STATICIMAGEDONE) + this.imageStatus = new Integer(status); + } + } + + public void setColorModel(ColorModel model) { +//System.err.println("setColorModel: " + model); + this.cm = model; + } + + public void setDimensions(int width, int height) { +//System.err.println("setDimension: w=" + width + " h=" + height); + this.width = width; + this.height = height; + } + + public void setHints(int hintflags) { +//System.err.println("setHints: " + hintflags); + this.hints = hintflags; + } + + public void setProperties(Hashtable props) { +//System.err.println("setProperties: " + props); + this.properties = props; + } + + public void setPixels(int x, int y, int w, int h, + ColorModel model, byte[] pixels,int off, + int scansize) {} + + public void setPixels(int x, int y, int w, int h, + ColorModel model, int[] pixels, int off, + int scansize) {} + + public boolean isImageReady() throws Exception { + synchronized(this.imageStatus) { + if (this.imageStatus.intValue() == ImageConsumer.IMAGEABORTED) + throw new Exception("Image aborted"); + if (this.imageStatus.intValue() == ImageConsumer.IMAGEERROR) + throw new Exception("Image error"); + + if (this.imageStatus.intValue() == ImageConsumer.STATICIMAGEDONE) + return true; + + return false; + } + } + + public int getWidth() { + return this.width; + } + + public int getHeight() { + return this.height; + } + + public ColorModel getColorModel() { + return this.cm; + } + + public int[] getImage() throws Exception { + int tmpMap[] = new int[this.width * this.height]; + PixelGrabber pg = new PixelGrabber( + this.ip, + 0, 0, + this.width, this.height, + tmpMap, + 0, this.width + ); + pg.setDimensions(this.width, this.height); + pg.setColorModel(this.cm); + pg.setHints(this.hints); + pg.setProperties(this.properties); + try { + pg.grabPixels(); + } catch (InterruptedException intex) { + throw new Exception("Image grabbing interrupted : " + intex.getMessage()); + } + return tmpMap; + } +} -- 2.39.5