]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Made a common base class for both PNG and TIFF classes because they are almost identical.
authorJeremias Maerki <jeremias@apache.org>
Mon, 11 Oct 2004 21:43:13 +0000 (21:43 +0000)
committerJeremias Maerki <jeremias@apache.org>
Mon, 11 Oct 2004 21:43:13 +0000 (21:43 +0000)
Some style updates.

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@198038 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/fop/image/BatikImage.java [new file with mode: 0644]
src/java/org/apache/fop/image/PNGImage.java
src/java/org/apache/fop/image/TIFFImage.java

diff --git a/src/java/org/apache/fop/image/BatikImage.java b/src/java/org/apache/fop/image/BatikImage.java
new file mode 100644 (file)
index 0000000..96a79ec
--- /dev/null
@@ -0,0 +1,194 @@
+/*
+ * Copyright 2004 The Apache Software Foundation 
+ *
+ * Licensed 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$ */
+
+package org.apache.fop.image;
+
+import java.awt.Color;
+import java.awt.Transparency;
+import java.awt.image.ColorModel;
+import java.awt.image.IndexColorModel;
+import java.awt.image.WritableRaster;
+import java.awt.image.BufferedImage;
+import java.io.IOException;
+
+import org.apache.batik.ext.awt.image.codec.SeekableStream;
+import org.apache.batik.ext.awt.image.codec.MemoryCacheSeekableStream;
+import org.apache.batik.ext.awt.image.codec.FileCacheSeekableStream;
+import org.apache.batik.ext.awt.image.rendered.Any2sRGBRed;
+import org.apache.batik.ext.awt.image.rendered.CachableRed;
+
+/**
+ * FopImage object using TIFF
+ * @author Eric SCHAEFFER
+ * @see AbstractFopImage
+ * @see FopImage
+ */
+public abstract class BatikImage extends AbstractFopImage {
+
+    private byte[] softMask = null;
+
+    /**
+     * Constructs a new BatikImage instance.
+     * @param imgReader basic metadata for the image
+     */
+    public BatikImage(FopImage.ImageInfo imgReader) {
+        super(imgReader);
+    }
+
+    /**
+     * @see org.apache.fop.image.AbstractFopImage#loadDimensions()
+     */
+    protected boolean loadDimensions() {
+        if (this.bitmaps == null) {
+            loadImage();
+        }
+
+        return this.bitmaps != null;
+    }
+
+    /**
+     * @see org.apache.fop.image.AbstractFopImage#loadBitmap()
+     */
+    protected boolean loadBitmap() {
+        if (this.bitmaps == null) {
+            loadImage();
+        }
+
+        return this.bitmaps != null;
+    }
+
+    /**
+     * @see org.apache.fop.image.FopImage#hasSoftMask()
+     */
+    public boolean hasSoftMask() {
+        if (this.bitmaps == null) {
+            loadImage();
+        }
+
+        return (this.softMask != null);
+    }
+
+    /**
+     * @see org.apache.fop.image.FopImage#getSoftMask()
+     */
+    public byte[] getSoftMask() {
+        if (this.bitmaps == null) {
+            loadImage();
+        }
+
+        return this.softMask;
+    }
+
+    /**
+     * Decodes the image from the stream.
+     * @param stream the stream to read the image from
+     * @return the decoded image
+     * @throws IOException in case an I/O problem occurs
+     */
+    protected abstract CachableRed decodeImage(SeekableStream stream) throws IOException;
+    
+    /**
+     * Loads the image from the InputStream.
+     */
+    protected void loadImage() {
+        try {
+            SeekableStream seekableInput;
+            try { seekableInput = new FileCacheSeekableStream(inputStream);
+            } catch (IOException ioe) {
+                seekableInput = new MemoryCacheSeekableStream(inputStream);
+            }
+
+            CachableRed cr = decodeImage(seekableInput);
+            ColorModel cm = cr.getColorModel();
+
+            this.height = cr.getHeight();
+            this.width  = cr.getWidth();
+
+            cr = new Any2sRGBRed(cr);
+
+            this.isTransparent = false;
+            this.softMask = null;
+            int transparencyType = cm.getTransparency();
+            if ((transparencyType == Transparency.BITMASK) 
+                    && (cm instanceof IndexColorModel)) {
+                // Use 'transparent color'.
+                IndexColorModel icm = (IndexColorModel)cm;
+                int numColor = icm.getMapSize();
+                byte [] alpha = new byte[numColor];
+                icm.getAlphas(alpha);
+                for (int i = 0; i < numColor; i++) {
+                    if ((alpha[i] & 0xFF) == 0) {
+                        this.isTransparent = true;
+                        int red = (icm.getRed  (i)) & 0xFF;
+                        int grn = (icm.getGreen(i)) & 0xFF;
+                        int blu = (icm.getBlue (i)) & 0xFF;
+                        this.transparentColor = new Color(red, grn, blu);
+                        break;
+                    }
+                }
+            }
+
+            // Get our current ColorModel
+            cm = cr.getColorModel();
+
+            // It has an alpha channel so generate a soft mask.
+            if ((!this.isTransparent) && cm.hasAlpha()) {
+                this.softMask = new byte[this.width * this.height];
+            }
+
+            this.bitsPerPixel = 8;
+            this.bitmapsSize = this.width * this.height * 3;
+            this.bitmaps = new byte[this.bitmapsSize];
+            this.colorSpace = cm.getColorSpace();
+
+            WritableRaster wr = (WritableRaster)cr.getData();
+            BufferedImage bi = new BufferedImage
+                (cm, wr.createWritableTranslatedChild(0, 0), 
+                 cm.isAlphaPremultiplied(), null);
+            int [] tmpMap = new int[this.width];
+            int idx = 0;
+            int sfIdx = 0;
+            for (int y = 0; y < this.height; y++) {
+                tmpMap = bi.getRGB(0, y, this.width, 1, tmpMap, 0, this.width);
+                if (softMask != null) {
+                    for (int x = 0; x < this.width; x++) {
+                        int pix = tmpMap[x];
+                        this.softMask[sfIdx++] = (byte)(pix >>> 24);
+                        this.bitmaps[idx++]    = (byte)((pix >>> 16) & 0xFF);
+                        this.bitmaps[idx++]    = (byte)((pix >>> 8)  & 0xFF);
+                        this.bitmaps[idx++]    = (byte)((pix)        & 0xFF);
+                    }
+                } else {
+                    for (int x = 0; x < this.width; x++) {
+                        int pix = tmpMap[x];
+                        this.bitmaps[idx++] = (byte)((pix >> 16) & 0xFF);
+                        this.bitmaps[idx++] = (byte)((pix >> 8)  & 0xFF);
+                        this.bitmaps[idx++] = (byte)((pix)       & 0xFF);
+                    }
+                }
+            }
+        } catch (Exception ex) {
+            log.error("Error loading an image" , ex);
+            /*throw new FopImageException("Error while loading image "
+                                         + "" + " : "
+                                         + ex.getClass() + " - "
+                                         + ex.getMessage());
+            */
+        }
+    }
+};
index 4d7cef5655511f2d506ee380b4c47073808819df..292febc0e80a4c708f8bff9e4a428e885ee0c7ee 100644 (file)
@@ -1,36 +1,28 @@
 /*
- *  Copyright 2004 The Apache Software Foundation 
+ * Copyright 2004 The Apache Software Foundation 
  *
- *  Licensed 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
+ * Licensed 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.
- *
+ * 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$ */
+
 package org.apache.fop.image;
 
-import java.awt.Color;
-import java.awt.Transparency;
-import java.awt.image.ColorModel;
-import java.awt.image.IndexColorModel;
-import java.awt.image.WritableRaster;
-import java.awt.image.BufferedImage;
 import java.io.IOException;
 
 import org.apache.batik.ext.awt.image.codec.PNGRed;
 import org.apache.batik.ext.awt.image.codec.PNGDecodeParam;
 import org.apache.batik.ext.awt.image.codec.SeekableStream;
-import org.apache.batik.ext.awt.image.codec.MemoryCacheSeekableStream;
-import org.apache.batik.ext.awt.image.codec.FileCacheSeekableStream;
-import org.apache.batik.ext.awt.image.rendered.Any2sRGBRed;
 import org.apache.batik.ext.awt.image.rendered.CachableRed;
 
 /**
@@ -39,133 +31,24 @@ import org.apache.batik.ext.awt.image.rendered.CachableRed;
  * @see AbstractFopImage
  * @see FopImage
  */
-public class PNGImage extends AbstractFopImage {
-
-    private byte[] softMask = null;
+public class PNGImage extends BatikImage {
 
+    /**
+     * Constructs a new PNGImage instance.
+     * @param imgReader basic metadata for the image
+     */
     public PNGImage(FopImage.ImageInfo imgReader) {
         super(imgReader);
     }
 
-    protected boolean loadDimensions() {
-        if (this.bitmaps == null) {
-            loadImage();
-        }
-
-        return this.bitmaps != null;
-    }
-
     /**
-     * @see org.apache.fop.image.AbstractFopImage#loadBitmap()
+     * @see org.apache.fop.image.BatikImage#decodeImage(org.apache.batik.ext.awt.image.codec.SeekableStream)
      */
-    protected boolean loadBitmap() {
-        if (this.bitmaps == null) {
-            loadImage();
-        }
-
-        return this.bitmaps != null;
-    }
-
-    public boolean hasSoftMask() {
-        if (this.bitmaps == null) {
-            loadImage();
-        }
-
-        return (this.softMask != null);
-    }
-
-    public byte[] getSoftMask() {
-        if (this.bitmaps == null) {
-            loadImage();
-        }
-
-        return this.softMask;
-    }
-
-    protected void loadImage() {
-        try {
-            SeekableStream seekableInput;
-            try { seekableInput = new FileCacheSeekableStream(inputStream);
-            } catch (IOException ioe) {
-                seekableInput = new MemoryCacheSeekableStream(inputStream);
-            }
-
-            PNGDecodeParam param = new PNGDecodeParam();
-            param.setPerformGammaCorrection(true);
-            param.setDisplayExponent(2.2f); // sRGB gamma
-            CachableRed cr = new PNGRed(seekableInput, param);
-            ColorModel cm = cr.getColorModel();
-
-            this.height = cr.getHeight();
-            this.width  = cr.getWidth();
-
-            cr = new Any2sRGBRed(cr);
-
-            this.isTransparent = false;
-            this.softMask = null;
-            int transparencyType = cm.getTransparency();
-            if ((transparencyType == Transparency.BITMASK) 
-                    && (cm instanceof IndexColorModel)) {
-                // Currently only supports 'transparent color'(?)
-                IndexColorModel icm = (IndexColorModel)cm;
-                int numColor = icm.getMapSize();
-                byte [] alpha = new byte[numColor];
-                icm.getAlphas(alpha);
-                for (int i = 0; i < numColor; i++) {
-                    if ((alpha[i] & 0xFF) == 0) {
-                        this.isTransparent = true;
-                        int red = (icm.getRed  (i)) & 0xFF;
-                        int grn = (icm.getGreen(i)) & 0xFF;
-                        int blu = (icm.getBlue (i)) & 0xFF;
-                        this.transparentColor = new Color(red, grn, blu);
-                        break;
-                    }
-                }
-            }
-
-            cm = cr.getColorModel();
-            if ((!this.isTransparent) && cm.hasAlpha()) {
-                this.softMask = new byte[this.width * this.height];
-            }
-
-            this.bitsPerPixel = 8;
-            this.bitmapsSize = this.width * this.height * 3;
-            this.bitmaps = new byte[this.bitmapsSize];
-            this.colorSpace = cm.getColorSpace();
-
-            WritableRaster wr = (WritableRaster)cr.getData();
-            BufferedImage bi = new BufferedImage
-                (cm, wr.createWritableTranslatedChild(0, 0), 
-                 cm.isAlphaPremultiplied(), null);
-            int [] tmpMap = new int[this.width];
-            int idx = 0;
-            int sfIdx = 0;
-            for (int y = 0; y < this.height; y++) {
-                tmpMap = bi.getRGB(0, y, this.width, 1, tmpMap, 0, this.width);
-                if (softMask != null) {
-                    for (int x = 0; x < this.width; x++) {
-                        int pix = tmpMap[x];
-                        this.softMask[sfIdx++] = (byte)(pix >>> 24);
-                        this.bitmaps[idx++]    = (byte)((pix >>> 16) & 0xFF);
-                        this.bitmaps[idx++]    = (byte)((pix >>> 8)  & 0xFF);
-                        this.bitmaps[idx++]    = (byte)((pix)        & 0xFF);
-                    }
-                } else {
-                    for (int x = 0; x < this.width; x++) {
-                        int pix = tmpMap[x];
-                        this.bitmaps[idx++] = (byte)((pix >> 16) & 0xFF);
-                        this.bitmaps[idx++] = (byte)((pix >> 8)  & 0xFF);
-                        this.bitmaps[idx++] = (byte)((pix)       & 0xFF);
-                    }
-                }
-            }
-        } catch (Exception ex) {
-            ex.printStackTrace();
-            /*throw new FopImageException("Error while loading image "
-                                         + "" + " : "
-                                         + ex.getClass() + " - "
-                                         + ex.getMessage());
-            */
-        }
+    protected CachableRed decodeImage(SeekableStream stream) throws IOException {
+        PNGDecodeParam param = new PNGDecodeParam();
+        param.setPerformGammaCorrection(true);
+        param.setDisplayExponent(2.2f); // sRGB gamma
+        return new PNGRed(stream, param);
     }
-};
+    
+}
index d4359d844655536d60a9a3d3090be9606149b25a..254b81912d0567bdaad46b851cdc8869d235171e 100644 (file)
@@ -1,48 +1,35 @@
 /*
- *  Copyright 2004 The Apache Software Foundation 
+ * Copyright 2004 The Apache Software Foundation
  *
- *  Licensed 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
+ * Licensed 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.
- *
+ * 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$ */
+
 package org.apache.fop.image;
 
-import java.awt.Color;
-import java.awt.Transparency;
-import java.awt.image.ColorModel;
-import java.awt.image.IndexColorModel;
-import java.awt.image.WritableRaster;
-import java.awt.image.BufferedImage;
 import java.io.IOException;
 
 import org.apache.batik.ext.awt.image.codec.SeekableStream;
-import org.apache.batik.ext.awt.image.codec.MemoryCacheSeekableStream;
-import org.apache.batik.ext.awt.image.codec.FileCacheSeekableStream;
-import org.apache.batik.ext.awt.image.rendered.Any2sRGBRed;
 import org.apache.batik.ext.awt.image.rendered.CachableRed;
 
 /**
- * FopImage object using TIFF
- * @author Eric SCHAEFFER
- * @see AbstractFopImage
- * @see FopImage
+ * @author Jeremias Maerki
  */
-public class TIFFImage extends AbstractFopImage {
-
-    private byte[] softMask = null;
+public class TIFFImage extends BatikImage {
 
     /**
-     * Constructs a new TIFFImage instance.
+     * Constructs a new BatikImage instance.
      * @param imgReader basic metadata for the image
      */
     public TIFFImage(FopImage.ImageInfo imgReader) {
@@ -50,137 +37,11 @@ public class TIFFImage extends AbstractFopImage {
     }
 
     /**
-     * @see org.apache.fop.image.AbstractFopImage#loadDimensions()
-     */
-    protected boolean loadDimensions() {
-        if (this.bitmaps == null) {
-            loadImage();
-        }
-
-        return this.bitmaps != null;
-    }
-
-    /**
-     * @see org.apache.fop.image.AbstractFopImage#loadBitmap()
+     * @see org.apache.fop.image.BatikImage#decodeImage(org.apache.batik.ext.awt.image.codec.SeekableStream)
      */
-    protected boolean loadBitmap() {
-        if (this.bitmaps == null) {
-            loadImage();
-        }
-
-        return this.bitmaps != null;
-    }
-
-    /**
-     * @see org.apache.fop.image.FopImage#hasSoftMask()
-     */
-    public boolean hasSoftMask() {
-        if (this.bitmaps == null) {
-            loadImage();
-        }
-
-        return (this.softMask != null);
-    }
-
-    /**
-     * @see org.apache.fop.image.FopImage#getSoftMask()
-     */
-    public byte[] getSoftMask() {
-        if (this.bitmaps == null) {
-            loadImage();
-        }
-
-        return this.softMask;
-    }
-
-    /**
-     * Loads the image from the InputStream.
-     */
-    protected void loadImage() {
-        try {
-            SeekableStream seekableInput;
-            try { seekableInput = new FileCacheSeekableStream(inputStream);
-            } catch (IOException ioe) {
-                seekableInput = new MemoryCacheSeekableStream(inputStream);
-            }
-
-            CachableRed cr;
-            cr = new org.apache.batik.ext.awt.image.codec.tiff.TIFFImage
-                (seekableInput, null, 0);
-            ColorModel cm = cr.getColorModel();
-
-            this.height = cr.getHeight();
-            this.width  = cr.getWidth();
-
-            cr = new Any2sRGBRed(cr);
-
-            this.isTransparent = false;
-            this.softMask = null;
-            int transparencyType = cm.getTransparency();
-            if ((transparencyType == Transparency.BITMASK) 
-                    && (cm instanceof IndexColorModel)) {
-                // Use 'transparent color'.
-                IndexColorModel icm = (IndexColorModel)cm;
-                int numColor = icm.getMapSize();
-                byte [] alpha = new byte[numColor];
-                icm.getAlphas(alpha);
-                for (int i = 0; i < numColor; i++) {
-                    if ((alpha[i] & 0xFF) == 0) {
-                        this.isTransparent = true;
-                        int red = (icm.getRed  (i)) & 0xFF;
-                        int grn = (icm.getGreen(i)) & 0xFF;
-                        int blu = (icm.getBlue (i)) & 0xFF;
-                        this.transparentColor = new Color(red, grn, blu);
-                        break;
-                    }
-                }
-            }
-
-            // Get our current ColorModel
-            cm = cr.getColorModel();
-
-            // It has an alpha channel so generate a soft mask.
-            if ((!this.isTransparent) && cm.hasAlpha()) {
-                this.softMask = new byte[this.width * this.height];
-            }
-
-            this.bitsPerPixel = 8;
-            this.bitmapsSize = this.width * this.height * 3;
-            this.bitmaps = new byte[this.bitmapsSize];
-            this.colorSpace = cm.getColorSpace();
-
-            WritableRaster wr = (WritableRaster)cr.getData();
-            BufferedImage bi = new BufferedImage
-                (cm, wr.createWritableTranslatedChild(0, 0), 
-                 cm.isAlphaPremultiplied(), null);
-            int [] tmpMap = new int[this.width];
-            int idx = 0;
-            int sfIdx = 0;
-            for (int y = 0; y < this.height; y++) {
-                tmpMap = bi.getRGB(0, y, this.width, 1, tmpMap, 0, this.width);
-                if (softMask != null) {
-                    for (int x = 0; x < this.width; x++) {
-                        int pix = tmpMap[x];
-                        this.softMask[sfIdx++] = (byte)(pix >>> 24);
-                        this.bitmaps[idx++]    = (byte)((pix >>> 16) & 0xFF);
-                        this.bitmaps[idx++]    = (byte)((pix >>> 8)  & 0xFF);
-                        this.bitmaps[idx++]    = (byte)((pix)        & 0xFF);
-                    }
-                } else {
-                    for (int x = 0; x < this.width; x++) {
-                        int pix = tmpMap[x];
-                        this.bitmaps[idx++] = (byte)((pix >> 16) & 0xFF);
-                        this.bitmaps[idx++] = (byte)((pix >> 8)  & 0xFF);
-                        this.bitmaps[idx++] = (byte)((pix)       & 0xFF);
-                    }
-                }
-            }
-        } catch (Exception ex) {
-            /*throw new FopImageException("Error while loading image "
-                                         + "" + " : "
-                                         + ex.getClass() + " - "
-                                         + ex.getMessage());
-            */
-        }
+    protected CachableRed decodeImage(SeekableStream stream) throws IOException {
+        return new org.apache.batik.ext.awt.image.codec.tiff.TIFFImage
+                (stream, null, 0);
     }
-};
+    
+}