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