deweese     02/02/25 11:23:20

  Modified:    sources/org/apache/batik/ext/awt/image/rendered
                        ProfileRed.java
  Log:
  Fixed an Alpha Premult problem when source was not unpremultiplied.
  
  Revision  Changes    Path
  1.5       +30 -27    
xml-batik/sources/org/apache/batik/ext/awt/image/rendered/ProfileRed.java
  
  Index: ProfileRed.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/ext/awt/image/rendered/ProfileRed.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- ProfileRed.java   22 Feb 2002 12:08:05 -0000      1.4
  +++ ProfileRed.java   25 Feb 2002 19:23:20 -0000      1.5
  @@ -37,7 +37,7 @@
    * on its source
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Vincent Hardy</a>
  - * @version $Id: ProfileRed.java,v 1.4 2002/02/22 12:08:05 vhardy Exp $
  + * @version $Id: ProfileRed.java,v 1.5 2002/02/25 19:23:20 deweese Exp $
    */
   public class ProfileRed extends AbstractRed {
       private static final ColorSpace sRGBCS 
  @@ -140,23 +140,24 @@
                * BandedSampleModel, do the conversion now.
                */
               if(!(imgCM instanceof ComponentColorModel) ||
  -               !(img.getSampleModel() instanceof BandedSampleModel)){
  +               !(img.getSampleModel() instanceof BandedSampleModel) ||
  +               (imgCM.hasAlpha() &&
  +                imgCM.isAlphaPremultiplied() == true)) {
                   ComponentColorModel imgCompCM 
                       = new ComponentColorModel
                           (imgCS,                      // Same ColorSpace as img
                            imgCM.getComponentSize(),   // Number of bits/comp
                            imgCM.hasAlpha(),             // Same alpha as img
  -                         imgCM.isAlphaPremultiplied(), // Same premult as img  
  +                         false, // unpremult alpha (so we can remove it next).
                            imgCM.getTransparency(),      // Same trans as img 
                            DataBuffer.TYPE_BYTE);        // 8 bit/component.
   
  -                WritableRaster wr 
  -                    = Raster.createBandedRaster
  +                WritableRaster wr = Raster.createBandedRaster
                       (DataBuffer.TYPE_BYTE,
                        argbWR.getWidth(), argbWR.getHeight(),
                        imgCompCM.getNumComponents(),
                        new Point(0, 0));
  -                
  +
                   BufferedImage imgComp = new BufferedImage
                       (imgCompCM, wr, imgCompCM.isAlphaPremultiplied(), null);
   
  @@ -179,19 +180,19 @@
                * profile, using a ComponentColorModel as well, because
                * we know the number of components match (this was
                * checked at the begining of this routine).  */
  -            ComponentColorModel newCM 
  -                = new ComponentColorModel(colorSpace,                    // ****** 
New ColorSpace ********
  -                                          imgCM.getComponentSize(),      // Array 
of number of bits per components
  -                                          false,                         // No alpa
  -                                          false,                         // Not 
premultiplied
  -                                          Transparency.OPAQUE,           // No 
transparency
  -                                          DataBuffer.TYPE_BYTE);         // 8 Bits
  +            ComponentColorModel newCM = new ComponentColorModel
  +                (colorSpace,                    // **** New ColorSpace ****
  +                 imgCM.getComponentSize(),      // Array of number of bits per 
components
  +                 false,                         // No alpa
  +                 false,                         // Not premultiplied
  +                 Transparency.OPAQUE,           // No transparency
  +                 DataBuffer.TYPE_BYTE);         // 8 Bits
               
               // Build a raster with bands 0, 1 and 2 of img's raster
               DataBufferByte data = (DataBufferByte)srcWR.getDataBuffer();
               srcWR = Raster.createBandedRaster
  -                (data, img.getWidth(), img.getHeight(), 
  -                 img.getWidth(), new int[]{0, 1, 2},
  +                (data, argbWR.getWidth(), argbWR.getHeight(), 
  +                 argbWR.getWidth(), new int[]{0, 1, 2},
                    new int[]{0, 0, 0}, new Point(0, 0));
               BufferedImage newImg = new BufferedImage
                   (newCM, srcWR, newCM.isAlphaPremultiplied(), null);
  @@ -208,7 +209,7 @@
                    DataBuffer.TYPE_BYTE);
   
               WritableRaster wr = Raster.createBandedRaster
  -                (DataBuffer.TYPE_BYTE, img.getWidth(), img.getHeight(),
  +                (DataBuffer.TYPE_BYTE, argbWR.getWidth(), argbWR.getHeight(),
                    sRGBCompCM.getNumComponents(), new Point(0, 0));
   
               BufferedImage sRGBImage = new BufferedImage
  @@ -227,16 +228,17 @@
                   byte[][] argbBanks = {rgbBanks[0], rgbBanks[1], 
                                         rgbBanks[2], imgBanks[3]};
                   DataBufferByte argbData = new DataBufferByte(argbBanks, 
imgBanks[0].length);
  -                srcWR = Raster.createBandedRaster(argbData, img.getWidth(), 
img.getHeight(),
  -                                                  img.getWidth(), new int[]{0, 1, 
2, 3},
  -                                                  new int[]{0, 0, 0, 0}, new 
Point(0, 0));
  -                sRGBCompCM =
  -                    new 
ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB),
  -                                            new int[]{8, 8, 8, 8},
  -                                            true,
  -                                            false,
  -                                            Transparency.TRANSLUCENT,
  -                                            DataBuffer.TYPE_BYTE);
  +                srcWR = Raster.createBandedRaster
  +                    (argbData, argbWR.getWidth(), argbWR.getHeight(),
  +                     argbWR.getWidth(), new int[]{0, 1, 2, 3},
  +                     new int[]{0, 0, 0, 0}, new Point(0, 0));
  +                sRGBCompCM = new ComponentColorModel
  +                    (ColorSpace.getInstance(ColorSpace.CS_sRGB),
  +                     new int[]{8, 8, 8, 8},
  +                     true,
  +                     false,
  +                     Transparency.TRANSLUCENT,
  +                     DataBuffer.TYPE_BYTE);
                   sRGBImage = new BufferedImage(sRGBCompCM,
                                                 srcWR,
                                                 false,
  @@ -251,6 +253,8 @@
                                                        
argbWR.createWritableTranslatedChild(0, 0),
                                                        false,
                                                        null);
  +
  +
               ///////////////////////////////////////////////
               // BUG IN ColorConvertOp: The following breaks:
               // colorConvertOp.filter(sRGBImage, result);
  @@ -262,7 +266,6 @@
                                  RenderingHints.VALUE_COLOR_RENDER_QUALITY);
               g.drawImage(sRGBImage, 0, 0, null);
               g.dispose();
  -            
   
               return argbWR;
           }catch(Exception e){
  
  
  

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

Reply via email to