deweese     01/10/11 05:31:23

  Modified:    sources/org/apache/batik/ext/awt/image/codec
                        PNGImageEncoder.java
  Log:
  1) Encoding a subimage of a BufferedImage now works properly.
     The problem was a bug in the JDK's implementation of subimage or
     getData (probably subimage).  See code for details.
  
  Revision  Changes    Path
  1.4       +31 -10    
xml-batik/sources/org/apache/batik/ext/awt/image/codec/PNGImageEncoder.java
  
  Index: PNGImageEncoder.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/ext/awt/image/codec/PNGImageEncoder.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- PNGImageEncoder.java      2001/07/04 16:49:59     1.3
  +++ PNGImageEncoder.java      2001/10/11 12:31:23     1.4
  @@ -13,6 +13,8 @@
   import java.awt.image.Raster;
   import java.awt.image.RenderedImage;
   import java.awt.image.SampleModel;
  +import java.awt.Rectangle;
  +
   import java.io.ByteArrayOutputStream;
   import java.io.DataOutput;
   import java.io.DataOutputStream;
  @@ -303,17 +305,17 @@
           return (val > maxValue) ? maxValue : val;
       }
   
  -    private void encodePass(OutputStream os,
  -                            Raster ras,
  -                            int xOffset, int yOffset,
  -                            int xSkip, int ySkip) throws IOException {
  -        int minX = ras.getMinX();
  -        int minY = ras.getMinY();
  -        int width = ras.getWidth();
  +    private void encodePass(OutputStream os, Raster ras,
  +                            int xOffset,     int yOffset,
  +                            int xSkip,       int ySkip) 
  +        throws IOException {
  +        int minX   = ras.getMinX();
  +        int minY   = ras.getMinY();
  +        int width  = ras.getWidth();
           int height = ras.getHeight();
   
           xOffset *= numBands;
  -        xSkip *= numBands;
  +        xSkip   *= numBands;
   
           int samplesPerByte = 8/bitDepth;
   
  @@ -415,8 +417,27 @@
           DeflaterOutputStream dos =
               new DeflaterOutputStream(ios, new Deflater(9));
   
  -        // Future work - don't convert entire image to a Raster
  -        Raster ras = image.getData();
  +        // Future work - don't convert entire image to a Raster It
  +        // might seem that you could just call image.getData() but
  +        // 'BufferedImage.subImage' doesn't appear to set the Width
  +        // and height properly of the Child Raster, so the Raster
  +        // you get back here appears larger than it should.
  +        // This solves that problem by bounding the raster to the
  +        // image's bounds...
  +        Raster ras = image.getData(new Rectangle(image.getMinX(), 
  +                                                 image.getMinY(),
  +                                                 image.getWidth(),
  +                                                 image.getHeight()));
  +        // System.out.println("Image: [" + 
  +        //                    image.getMinY()  + ", " + 
  +        //                    image.getMinX()  + ", " + 
  +        //                    image.getWidth()  + ", " + 
  +        //                    image.getHeight() + "]");
  +        // System.out.println("Ras: [" + 
  +        //                    ras.getMinX()  + ", " + 
  +        //                    ras.getMinY()  + ", " + 
  +        //                    ras.getWidth()  + ", " + 
  +        //                    ras.getHeight() + "]");
   
           if (skipAlpha) {
               int numBands = ras.getNumBands() - 1;
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to