You are viewing a plain text version of this content. The canonical link for it is here.
Posted to batik-dev@xmlgraphics.apache.org by de...@apache.org on 2001/09/05 21:25:02 UTC

cvs commit: xml-batik/sources/org/apache/batik/ext/awt/image/rendered DisplacementMapRed.java

deweese     01/09/05 12:25:01

  Modified:    sources/org/apache/batik/ext/awt/image/rendered
                        DisplacementMapRed.java
  Log:
  More careful to round fixed point values instead of truncating.
  Fixes regression in feDisplacementMap.
  
  Revision  Changes    Path
  1.2       +22 -14    xml-batik/sources/org/apache/batik/ext/awt/image/rendered/DisplacementMapRed.java
  
  Index: DisplacementMapRed.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/ext/awt/image/rendered/DisplacementMapRed.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DisplacementMapRed.java	2001/08/03 17:37:28	1.1
  +++ DisplacementMapRed.java	2001/09/05 19:25:01	1.2
  @@ -35,7 +35,7 @@
    * GraphicsNode on demand for tiles.
    *
    * @author <a href="mailto:vincent.hardy@eng.sun.com">Vincent Hardy</a>
  - * @version $Id: DisplacementMapRed.java,v 1.1 2001/08/03 17:37:28 deweese Exp $
  + * @version $Id: DisplacementMapRed.java,v 1.2 2001/09/05 19:25:01 deweese Exp $
    */
   public class DisplacementMapRed extends AbstractRed {
       // Use these to control timing and Nearest Neighbot vs. Bilinear Interp.
  @@ -412,7 +412,8 @@
                   sp0  = (pel01>>>16) & 0xFF00;
                   sp1  = (pel11>>>16) & 0xFF00;
                   pel1 = (sp0 + (((sp1-sp0)*xFrac)>>15)) & 0xFFFF;
  -                newPel = (((pel0<<15) + (pel1-pel0)*yFrac)&0x7F800000)<<  1;
  +                newPel = (((pel0<<15) + (pel1-pel0)*yFrac + 0x00400000)
  +                          &0x7F800000)<<  1;
   
                   // Combine the red channels.
                   sp0  = (pel00>>  8) & 0xFF00;
  @@ -421,7 +422,8 @@
                   sp0  = (pel01>>  8) & 0xFF00;
                   sp1  = (pel11>>  8) & 0xFF00;
                   pel1 = (sp0 + (((sp1-sp0)*xFrac)>>15)) & 0xFFFF;
  -                newPel |= (((pel0<<15) + (pel1-pel0)*yFrac)&0x7F800000)>>> 7;
  +                newPel |= (((pel0<<15) + (pel1-pel0)*yFrac + 0x00400000)
  +                           &0x7F800000)>>> 7;
   
                   // Combine the green channels.
                   sp0  = (pel00     ) & 0xFF00;
  @@ -430,7 +432,8 @@
                   sp0  = (pel01     ) & 0xFF00;
                   sp1  = (pel11     ) & 0xFF00;
                   pel1 = (sp0 + (((sp1-sp0)*xFrac)>>15)) & 0xFFFF;
  -                newPel |= (((pel0<<15) + (pel1-pel0)*yFrac)&0x7F800000)>>>15;
  +                newPel |= (((pel0<<15) + (pel1-pel0)*yFrac + 0x00400000)
  +                           &0x7F800000)>>>15;
   
                   // Combine the blue channels.
                   sp0  = (pel00<<  8) & 0xFF00;
  @@ -439,7 +442,8 @@
                   sp0  = (pel01<<  8) & 0xFF00;
                   sp1  = (pel11<<  8) & 0xFF00;
                   pel1 = (sp0 + (((sp1-sp0)*xFrac)>>15)) & 0xFFFF;
  -                newPel |= (((pel0<<15) + (pel1-pel0)*yFrac)&0x7F800000)>>>23;
  +                newPel |= (((pel0<<15) + (pel1-pel0)*yFrac + 0x00400000)
  +                           &0x7F800000)>>>23;
   
                   dstPixels[dp] = newPel;
               }
  @@ -517,7 +521,7 @@
           int sp0, sp1, pel0, pel1, a00, a01, a10, a11;
   
           int x, y, x0, y0, xDisplace, yDisplace, dPel;
  -        final int norm = (1<<16)/255;
  +        final int norm = (1<<24)/255;
   
           int xt=xTile[0]-1, yt=yTile[0]-1, xt1, yt1;
           int [] imgPix = null;
  @@ -594,15 +598,16 @@
                   sp0  = (pel00>>>16) & 0xFF00;
                   sp1  = (pel10>>>16) & 0xFF00;
                   pel0 = (sp0 + (((sp1-sp0)*xFrac)>>15)) & 0xFFFF;
  -                a00 = (sp0>>8)*norm;
  -                a10 = (sp1>>8)*norm;
  +                a00 = ((sp0>>8)*norm + 0x80)>>8;
  +                a10 = ((sp1>>8)*norm + 0x80)>>8;
   
                   sp0  = (pel01>>>16) & 0xFF00;
                   sp1  = (pel11>>>16) & 0xFF00;
                   pel1 = (sp0 + (((sp1-sp0)*xFrac)>>15)) & 0xFFFF;
  -                a01 = (sp0>>8)*norm;
  -                a11 = (sp1>>8)*norm;
  -                newPel = (((pel0<<15) + (pel1-pel0)*yFrac)&0x7F800000)<<  1;
  +                a01 = ((sp0>>8)*norm + 0x80)>>8;
  +                a11 = ((sp1>>8)*norm + 0x80)>>8;
  +                newPel = (((pel0<<15) + (pel1-pel0)*yFrac + 0x00400000)
  +                          &0x7F800000)<<  1;
   
                   // Combine the red channels.
                   sp0  = ((((pel00>> 16) & 0xFF)*a00)>>8) & 0xFF00;
  @@ -611,7 +616,8 @@
                   sp0  = ((((pel01>> 16) & 0xFF)*a01)>>8) & 0xFF00;
                   sp1  = ((((pel11>> 16) & 0xFF)*a11)>>8) & 0xFF00;
                   pel1 = (sp0 + (((sp1-sp0)*xFrac)>>15)) & 0xFFFF;
  -                newPel |= (((pel0<<15) + (pel1-pel0)*yFrac)&0x7F800000)>>> 7;
  +                newPel |= (((pel0<<15) + (pel1-pel0)*yFrac + 0x00400000)
  +                           &0x7F800000)>>> 7;
   
                   // Combine the green channels.
                   sp0  = ((((pel00>> 8) & 0xFF)*a00)>>8) & 0xFF00;
  @@ -620,7 +626,8 @@
                   sp0  = ((((pel01>> 8) & 0xFF)*a01)>>8) & 0xFF00;
                   sp1  = ((((pel11>> 8) & 0xFF)*a11)>>8) & 0xFF00;
                   pel1 = (sp0 + (((sp1-sp0)*xFrac)>>15)) & 0xFFFF;
  -                newPel |= (((pel0<<15) + (pel1-pel0)*yFrac)&0x7F800000)>>>15;
  +                newPel |= (((pel0<<15) + (pel1-pel0)*yFrac + 0x00400000)
  +                           &0x7F800000)>>>15;
   
                   // Combine the blue channels.
                   sp0  = (((pel00 & 0xFF)*a00)>>8) & 0xFF00;
  @@ -629,7 +636,8 @@
                   sp0  = (((pel01 & 0xFF)*a01)>>8) & 0xFF00;
                   sp1  = (((pel11 & 0xFF)*a11)>>8) & 0xFF00;
                   pel1 = (sp0 + (((sp1-sp0)*xFrac)>>15)) & 0xFFFF;
  -                newPel |= (((pel0<<15) + (pel1-pel0)*yFrac)&0x7F800000)>>>23;
  +                newPel |= (((pel0<<15) + (pel1-pel0)*yFrac + 0x00400000)
  +                           &0x7F800000)>>>23;
   
                   dstPixels[dp] = newPel;
               }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: batik-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: batik-dev-help@xml.apache.org