You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by je...@apache.org on 2005/08/24 15:43:14 UTC

svn commit: r239661 - in /xmlgraphics/fop/trunk/src: java-1.4/org/apache/fop/image/ java/org/apache/fop/image/ java/org/apache/fop/render/pdf/ java/org/apache/fop/render/ps/

Author: jeremias
Date: Wed Aug 24 06:43:00 2005
New Revision: 239661

URL: http://svn.apache.org/viewcvs?rev=239661&view=rev
Log:
Fixes unrecoverable exceptions causing BatchDiffer to fail.
Doing a clean separation of encoded and decoded data inside the image implementations. Helps fix a problem with the encoded CCITT TIFF being sent to the PS output even though this is not yet implemented.

Modified:
    xmlgraphics/fop/trunk/src/java-1.4/org/apache/fop/image/ImageIOImage.java
    xmlgraphics/fop/trunk/src/java/org/apache/fop/image/AbstractFopImage.java
    xmlgraphics/fop/trunk/src/java/org/apache/fop/image/BatikImage.java
    xmlgraphics/fop/trunk/src/java/org/apache/fop/image/BmpImage.java
    xmlgraphics/fop/trunk/src/java/org/apache/fop/image/GifImage.java
    xmlgraphics/fop/trunk/src/java/org/apache/fop/image/JAIImage.java
    xmlgraphics/fop/trunk/src/java/org/apache/fop/image/JimiImage.java
    xmlgraphics/fop/trunk/src/java/org/apache/fop/image/JpegImage.java
    xmlgraphics/fop/trunk/src/java/org/apache/fop/image/TIFFImage.java
    xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/FopPDFImage.java
    xmlgraphics/fop/trunk/src/java/org/apache/fop/render/ps/PSImageUtils.java

Modified: xmlgraphics/fop/trunk/src/java-1.4/org/apache/fop/image/ImageIOImage.java
URL: http://svn.apache.org/viewcvs/xmlgraphics/fop/trunk/src/java-1.4/org/apache/fop/image/ImageIOImage.java?rev=239661&r1=239660&r2=239661&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java-1.4/org/apache/fop/image/ImageIOImage.java (original)
+++ xmlgraphics/fop/trunk/src/java-1.4/org/apache/fop/image/ImageIOImage.java Wed Aug 24 06:43:00 2005
@@ -127,8 +127,7 @@
             }
 
             // Should take care of the ColorSpace and bitsPerPixel
-            this.bitmapsSize = this.width * this.height * 3;
-            this.bitmaps = new byte[this.bitmapsSize];
+            this.bitmaps = new byte[this.width * this.height * 3];
             for (int i = 0; i < this.height; i++) {
                 for (int j = 0; j < this.width; j++) {
                     int p = tmpMap[i * this.width + j];

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/image/AbstractFopImage.java
URL: http://svn.apache.org/viewcvs/xmlgraphics/fop/trunk/src/java/org/apache/fop/image/AbstractFopImage.java?rev=239661&r1=239660&r2=239661&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/image/AbstractFopImage.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/image/AbstractFopImage.java Wed Aug 24 06:43:00 2005
@@ -82,14 +82,14 @@
     protected int bitsPerPixel = 0;
 
     /**
-     * Image data (uncompressed).
+     * Image data (pixels, uncompressed).
      */
     protected byte[] bitmaps = null;
 
     /**
-     * Image data size.
+     * Image data (undecoded, compressed, for image formats that can be embedded without decoding.
      */
-    protected int bitmapsSize = 0;
+    protected byte[] raw = null;
 
     /**
      * Image transparency.
@@ -298,7 +298,7 @@
     }
 
     /**
-     * Return the image data (uncompressed).
+     * Return the image data (pixels, uncompressed).
      * @return the image data
      */
     public byte[] getBitmaps() {
@@ -306,11 +306,11 @@
     }
 
     /**
-     * Return the image data size (uncompressed).
+     * Return the image data size (number of bytes taken up by the uncompressed pixels).
      * @return the image data size
      */
     public int getBitmapsSize() {
-        return this.bitmapsSize;
+        return (bitmaps != null ? bitmaps.length : 0);
     }
 
     /**
@@ -318,7 +318,7 @@
      * @return the original image data
      */
     public byte[] getRessourceBytes() {
-        return null;
+        return raw;
     }
 
     /**
@@ -326,7 +326,7 @@
      * @return the original image data size
      */
     public int getRessourceBytesSize() {
-        return 0;
+        return (raw != null ? raw.length : 0);
     }
 
 }

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/image/BatikImage.java
URL: http://svn.apache.org/viewcvs/xmlgraphics/fop/trunk/src/java/org/apache/fop/image/BatikImage.java?rev=239661&r1=239660&r2=239661&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/image/BatikImage.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/image/BatikImage.java Wed Aug 24 06:43:00 2005
@@ -140,7 +140,7 @@
      * @see org.apache.fop.image.FopImage#hasSoftMask()
      */
     public boolean hasSoftMask() {
-        if (this.bitmaps == null) {
+        if (this.bitmaps == null && this.raw == null) {
             loadImage();
         }
 
@@ -172,15 +172,20 @@
     protected void loadImage() {
         if (loadDimensions()) {
             try {
+                if (cr == null) {
+                    throw new IllegalStateException(
+                            "Can't load the bitmaps data without the CachableRed instance");
+                }
+                
                 // Get our current ColorModel
                 ColorModel cm = cr.getColorModel();
 
                 // It has an alpha channel so generate a soft mask.
-                if (!this.isTransparent && cm.hasAlpha())
+                if (!this.isTransparent && cm.hasAlpha()) {
                     this.softMask = new byte[this.width * this.height];
+                }
 
-                this.bitmapsSize = this.width * this.height * 3;
-                this.bitmaps = new byte[this.bitmapsSize];
+                this.bitmaps = new byte[this.width * this.height * 3];
 
                 WritableRaster wr = (WritableRaster)cr.getData();
                 BufferedImage bi = new BufferedImage

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/image/BmpImage.java
URL: http://svn.apache.org/viewcvs/xmlgraphics/fop/trunk/src/java/org/apache/fop/image/BmpImage.java?rev=239661&r1=239660&r2=239661&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/image/BmpImage.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/image/BmpImage.java Wed Aug 24 06:43:00 2005
@@ -125,8 +125,7 @@
         }
 
         // Should take care of the ColorSpace and bitsPerPixel
-        this.bitmapsSize = this.width * this.height * 3;
-        this.bitmaps = new byte[this.bitmapsSize];
+        this.bitmaps = new byte[this.width * this.height * 3];
 
         int[] temp = new int[bytes * this.height];
         try {

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/image/GifImage.java
URL: http://svn.apache.org/viewcvs/xmlgraphics/fop/trunk/src/java/org/apache/fop/image/GifImage.java?rev=239661&r1=239660&r2=239661&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/image/GifImage.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/image/GifImage.java Wed Aug 24 06:43:00 2005
@@ -150,8 +150,7 @@
         }
 
         // Should take care of the ColorSpace and bitsPerPixel
-        this.bitmapsSize = this.width * this.height * 3;
-        this.bitmaps = new byte[this.bitmapsSize];
+        this.bitmaps = new byte[this.width * this.height * 3];
         for (int i = 0; i < this.height; i++) {
             for (int j = 0; j < this.width; j++) {
                 int p = tmpMap[i * this.width + j];

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/image/JAIImage.java
URL: http://svn.apache.org/viewcvs/xmlgraphics/fop/trunk/src/java/org/apache/fop/image/JAIImage.java?rev=239661&r1=239660&r2=239661&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/image/JAIImage.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/image/JAIImage.java Wed Aug 24 06:43:00 2005
@@ -22,7 +22,6 @@
 import java.awt.image.ColorModel;
 import java.awt.image.IndexColorModel;
 import java.awt.image.BufferedImage;
-import java.awt.color.ColorSpace;
 import java.awt.Color;
 
 // JAI
@@ -150,8 +149,7 @@
             }
 
             // Should take care of the ColorSpace and bitsPerPixel
-            this.bitmapsSize = this.width * this.height * 3;
-            this.bitmaps = new byte[this.bitmapsSize];
+            this.bitmaps = new byte[this.width * this.height * 3];
             for (int i = 0; i < this.height; i++) {
                 for (int j = 0; j < this.width; j++) {
                     int p = tmpMap[i * this.width + j];

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/image/JimiImage.java
URL: http://svn.apache.org/viewcvs/xmlgraphics/fop/trunk/src/java/org/apache/fop/image/JimiImage.java?rev=239661&r1=239660&r2=239661&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/image/JimiImage.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/image/JimiImage.java Wed Aug 24 06:43:00 2005
@@ -76,8 +76,7 @@
     protected void loadImage() {
         int[] tmpMap = null;
         try {
-            ImageProducer ip =
-              Jimi.getImageProducer(inputStream,
+            ImageProducer ip = Jimi.getImageProducer(inputStream,
                                     Jimi.SYNCHRONOUS | Jimi.IN_MEMORY);
             FopImageConsumer consumer = new FopImageConsumer(ip);
             ip.startProduction(consumer);
@@ -163,8 +162,7 @@
 
 
         // Should take care of the ColorSpace and bitsPerPixel
-        this.bitmapsSize = this.width * this.height * 3;
-        this.bitmaps = new byte[this.bitmapsSize];
+        this.bitmaps = new byte[this.width * this.height * 3];
         for (int i = 0; i < this.height; i++) {
             for (int j = 0; j < this.width; j++) {
                 int p = tmpMap[i * this.width + j];

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/image/JpegImage.java
URL: http://svn.apache.org/viewcvs/xmlgraphics/fop/trunk/src/java/org/apache/fop/image/JpegImage.java?rev=239661&r1=239660&r2=239661&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/image/JpegImage.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/image/JpegImage.java Wed Aug 24 06:43:00 2005
@@ -36,7 +36,6 @@
 public class JpegImage extends AbstractFopImage {
     private ICC_Profile iccProfile = null;
     private boolean foundICCProfile = false;
-    private boolean foundDimensions = false;
 
     /**
      * Create a jpeg image with the info.
@@ -74,38 +73,38 @@
             inputStream = null;
         }
 
-        this.bitmaps = baos.toByteArray();
+        this.raw = baos.toByteArray();
         this.bitsPerPixel = 8;
         this.isTransparent = false;
 
         //Check for SOI (Start of image) marker (FFD8)
-        if (this.bitmaps.length > (index + 2)
-                && uByte(this.bitmaps[index]) == 255 /*0xFF*/
-                && uByte(this.bitmaps[index + 1]) == 216 /*0xD8*/) {
+        if (this.raw.length > (index + 2)
+                && uByte(this.raw[index]) == 255 /*0xFF*/
+                && uByte(this.raw[index + 1]) == 216 /*0xD8*/) {
             index += 2;
 
-            while (index < this.bitmaps.length && cont) {
+            while (index < this.raw.length && cont) {
                 //check to be sure this is the begining of a header
-                if (this.bitmaps.length > (index + 2)
-                        && uByte(this.bitmaps[index]) == 255 /*0xFF*/) {
+                if (this.raw.length > (index + 2)
+                        && uByte(this.raw[index]) == 255 /*0xFF*/) {
 
                     //192 or 194 are the header bytes that contain
                     // the jpeg width height and color depth.
-                    if (uByte(this.bitmaps[index + 1]) == 192 /*0xC0*/
-                            || uByte(this.bitmaps[index + 1]) == 194 /*0xC2*/) {
+                    if (uByte(this.raw[index + 1]) == 192 /*0xC0*/
+                            || uByte(this.raw[index + 1]) == 194 /*0xC2*/) {
 
-                        this.height = calcBytes(this.bitmaps[index + 5],
-                                                  this.bitmaps[index + 6]);
-                        this.width = calcBytes(this.bitmaps[index + 7],
-                                                 this.bitmaps[index + 8]);
+                        this.height = calcBytes(this.raw[index + 5],
+                                                  this.raw[index + 6]);
+                        this.width = calcBytes(this.raw[index + 7],
+                                                 this.raw[index + 8]);
 
-                        if (this.bitmaps[index + 9] == 1) {
+                        if (this.raw[index + 9] == 1) {
                             this.colorSpace = ColorSpace.getInstance(
                               ColorSpace.CS_GRAY);
-                        } else if (this.bitmaps[index + 9] == 3) {
+                        } else if (this.raw[index + 9] == 3) {
                             this.colorSpace = ColorSpace.getInstance(
                               ColorSpace.CS_LINEAR_RGB);
-                        } else if (this.bitmaps[index + 9] == 4) {
+                        } else if (this.raw[index + 9] == 4) {
                             // howto create CMYK color space
                             /*
                             this.colorSpace = ColorSpace.getInstance(
@@ -118,36 +117,35 @@
                             return false;
                         }
 
-                        foundDimensions = true;
                         if (foundICCProfile) {
                             cont = false;
                             break;
                         }
-                        index += calcBytes(this.bitmaps[index + 2],
-                                           this.bitmaps[index + 3]) + 2;
+                        index += calcBytes(this.raw[index + 2],
+                                           this.raw[index + 3]) + 2;
 
-                    } else if (uByte(this.bitmaps[index + 1]) == 226 /*0xE2*/
-                                   && this.bitmaps.length > (index + 60)) {
+                    } else if (uByte(this.raw[index + 1]) == 226 /*0xE2*/
+                                   && this.raw.length > (index + 60)) {
                         // Check if ICC profile
                         byte[] iccString = new byte[11];
-                        System.arraycopy(this.bitmaps, index + 4,
+                        System.arraycopy(this.raw, index + 4,
                                          iccString, 0, 11);
 
                         if ("ICC_PROFILE".equals(new String(iccString))) {
                             int chunkSize = calcBytes(
-                                              this.bitmaps[index + 2],
-                                              this.bitmaps[index + 3]) + 2;
+                                              this.raw[index + 2],
+                                              this.raw[index + 3]) + 2;
 
-                            iccStream.write(this.bitmaps,
+                            iccStream.write(this.raw,
                                             index + 18, chunkSize - 18);
 
                         }
 
-                        index += calcBytes(this.bitmaps[index + 2],
-                                           this.bitmaps[index + 3]) + 2;
+                        index += calcBytes(this.raw[index + 2],
+                                           this.raw[index + 3]) + 2;
                     } else {
-                        index += calcBytes(this.bitmaps[index + 2],
-                                           this.bitmaps[index + 3]) + 2;
+                        index += calcBytes(this.raw[index + 2],
+                                           this.raw[index + 3]) + 2;
                     }
 
                 } else {

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/image/TIFFImage.java
URL: http://svn.apache.org/viewcvs/xmlgraphics/fop/trunk/src/java/org/apache/fop/image/TIFFImage.java?rev=239661&r1=239660&r2=239661&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/image/TIFFImage.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/image/TIFFImage.java Wed Aug 24 06:43:00 2005
@@ -62,9 +62,7 @@
         return stripCount;
     }
 
-    /**
-     * @see org.apache.fop.image.BatikImage#decodeImage(org.apache.batik.ext.awt.image.codec.SeekableStream)
-     */
+    /** @see org.apache.fop.image.BatikImage */
     protected CachableRed decodeImage(SeekableStream stream) throws IOException {
         org.apache.batik.ext.awt.image.codec.tiff.TIFFImage img
             = new org.apache.batik.ext.awt.image.codec.tiff.TIFFImage
@@ -135,7 +133,7 @@
                     return false;
                 }
 
-                this.bitmaps = readBuf;
+                this.raw = readBuf;
                 return true;
             } catch (IOException ioe) {
                 log.error("Error while loading image strip 1 (TIFF): ", ioe);

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/FopPDFImage.java
URL: http://svn.apache.org/viewcvs/xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/FopPDFImage.java?rev=239661&r1=239660&r2=239661&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/FopPDFImage.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/FopPDFImage.java Wed Aug 24 06:43:00 2005
@@ -213,7 +213,11 @@
         if (isPS) {
             outputPostScriptContents(out);
         } else {
-            out.write(fopImage.getBitmaps());
+            if (fopImage.getBitmapsSize() > 0) {
+                out.write(fopImage.getBitmaps());
+            } else {
+                out.write(fopImage.getRessourceBytes());
+            }
         }
     }
 

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/render/ps/PSImageUtils.java
URL: http://svn.apache.org/viewcvs/xmlgraphics/fop/trunk/src/java/org/apache/fop/render/ps/PSImageUtils.java?rev=239661&r1=239660&r2=239661&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/render/ps/PSImageUtils.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/render/ps/PSImageUtils.java Wed Aug 24 06:43:00 2005
@@ -66,7 +66,12 @@
         }
         boolean iscolor = img.getColorSpace().getType()
                           != ColorSpace.CS_GRAY;
-        byte[] imgmap = img.getBitmaps();
+        byte[] imgmap;
+        if (img.getBitmapsSize() > 0) {
+            imgmap = img.getBitmaps();
+        } else {
+            imgmap = img.getRessourceBytes();
+        }
 
         gen.saveGraphicsState();
         gen.writeln(x + " " + y + " translate");



---------------------------------------------------------------------
To unsubscribe, e-mail: fop-commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-commits-help@xmlgraphics.apache.org