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/11/09 23:53:44 UTC
cvs commit: xml-batik/sources/org/apache/batik/ext/awt/image/rendered GaussianBlurRed8Bit.java
deweese 01/11/09 14:53:44
Modified: sources/org/apache/batik/ext/awt/image/rendered
GaussianBlurRed8Bit.java
Log:
1) Box filter is now approx twice as fast.
Revision Changes Path
1.3 +71 -66 xml-batik/sources/org/apache/batik/ext/awt/image/rendered/GaussianBlurRed8Bit.java
Index: GaussianBlurRed8Bit.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/ext/awt/image/rendered/GaussianBlurRed8Bit.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- GaussianBlurRed8Bit.java 2001/04/30 22:01:05 1.2
+++ GaussianBlurRed8Bit.java 2001/11/09 22:53:44 1.3
@@ -34,7 +34,7 @@
* GraphicsNode on demand for tiles.
*
* @author <a href="mailto:vincent.hardy@eng.sun.com">Vincent Hardy</a>
- * @version $Id: GaussianBlurRed8Bit.java,v 1.2 2001/04/30 22:01:05 deweese Exp $
+ * @version $Id: GaussianBlurRed8Bit.java,v 1.3 2001/11/09 22:53:44 deweese Exp $
*/
public class GaussianBlurRed8Bit extends AbstractRed {
@@ -238,6 +238,7 @@
// this lets the Vertical conv know how much is junk, so it
// doesn't bother to convolve the top and bottom edges
int skipX;
+ // long t1 = System.currentTimeMillis();
if (convOp[0] != null) {
tmpR2 = getColorModel().createCompatibleWritableRaster
@@ -282,6 +283,10 @@
}
tmpR2 = tmpR1;
}
+ // long t2 = System.currentTimeMillis();
+ // System.out.println("Time: " + (t2-t1) +
+ // (((convOp[0] != null) || (convOp[1] != null))?
+ // " ConvOp":""));
// System.out.println("Rasters WR :" + wr.getBounds());
// System.out.println(" tmp:" + tmpR2.getBounds());
// System.out.println(" bounds:" + getBounds());
@@ -335,10 +340,8 @@
final int srcPixels [] = srcDB.getBankData()[0];
final int destPixels[] = dstDB.getBankData()[0];
- final int [] bufferA = new int [boxSz];
- final int [] bufferR = new int [boxSz];
- final int [] bufferG = new int [boxSz];
- final int [] bufferB = new int [boxSz];
+ final int [] buffer = new int [boxSz];
+ int curr, prev;
// Fixed point normalization factor (8.24)
int scale = (1<<24)/boxSz;
@@ -354,11 +357,11 @@
*/
for (int y=skipY; y<(h-skipY); y++) {
- int sp = srcOff + y*srcScanStride;
- int dp = dstOff + y*dstScanStride;
+ int sp = srcOff + y*srcScanStride;
+ int dp = dstOff + y*dstScanStride;
int rowEnd = sp + (w-skipX);
- int k=0;
+ int k = 0;
int sumA = 0;
int sumR = 0;
int sumG = 0;
@@ -368,41 +371,43 @@
int end = sp+boxSz;
while (sp < end) {
- final int currentPixel = srcPixels[sp];
- sumA += bufferA[k] = currentPixel>>>24;
- sumR += bufferR[k] = (currentPixel>>16)&0xff;
- sumG += bufferG[k] = (currentPixel>>8)&0xff;
- sumB += bufferB[k] = currentPixel&0xff;
+ curr = buffer[k] = srcPixels[sp];
+ sumA += (curr>>> 24);
+ sumR += (curr >> 16)&0xFF;
+ sumG += (curr >> 8)&0xFF;
+ sumB += (curr )&0xFF;
k++;
sp++;
}
dp += skipX + loc;
- destPixels[dp] = (( (sumA*scale)&0xFF000000) |
- (((sumR*scale)&0xFF000000)>>>8) |
- (((sumG*scale)&0xFF000000)>>>16) |
- (((sumB*scale)&0xFF000000)>>>24));
+ prev = destPixels[dp] = (( (sumA*scale)&0xFF000000) |
+ (((sumR*scale)&0xFF000000)>>>8) |
+ (((sumG*scale)&0xFF000000)>>>16) |
+ (((sumB*scale)&0xFF000000)>>>24));
dp++;
-
k=0;
while (sp < rowEnd) {
- final int currentPixel = srcPixels[sp];
- sumA -= bufferA[k];
- sumA += bufferA[k] = currentPixel>>>24;
-
- sumR -= bufferR[k];
- sumR += bufferR[k] = (currentPixel>> 16)&0xff;
-
- sumG -= bufferG[k];
- sumG += bufferG[k] = (currentPixel>> 8)&0xff;
-
- sumB -= bufferB[k];
- sumB += bufferB[k] = currentPixel &0xff;
-
- destPixels[dp] = (( (sumA*scale)&0xFF000000) |
- (((sumR*scale)&0xFF000000)>>>8) |
- (((sumG*scale)&0xFF000000)>>>16) |
- (((sumB*scale)&0xFF000000)>>>24));
+ curr = buffer[k];
+ if (curr == srcPixels[sp]) {
+ destPixels[dp] = prev;
+ } else {
+ sumA -= (curr>>> 24);
+ sumR -= (curr >> 16)&0xFF;
+ sumG -= (curr >> 8)&0xFF;
+ sumB -= (curr )&0xFF;
+
+ curr = buffer[k] = srcPixels[sp];
+
+ sumA += (curr>>> 24);
+ sumR += (curr >> 16)&0xFF;
+ sumG += (curr >> 8)&0xFF;
+ sumB += (curr )&0xFF;
+ prev = destPixels[dp] = (( (sumA*scale)&0xFF000000) |
+ (((sumR*scale)&0xFF000000)>>>8) |
+ (((sumG*scale)&0xFF000000)>>>16) |
+ (((sumB*scale)&0xFF000000)>>>24));
+ }
k = (k+1)%boxSz;
sp++;
dp++;
@@ -454,10 +459,8 @@
final int srcPixels [] = srcDB.getBankData()[0];
final int destPixels[] = dstDB.getBankData()[0];
- final int [] bufferA = new int [boxSz];
- final int [] bufferR = new int [boxSz];
- final int [] bufferG = new int [boxSz];
- final int [] bufferB = new int [boxSz];
+ final int [] buffer = new int [boxSz];
+ int curr, prev;
// Fixed point normalization factor (8.24)
final int scale = (1<<24)/boxSz;
@@ -487,42 +490,44 @@
int end = sp+(boxSz*srcScanStride);
while (sp < end) {
- final int currentPixel = srcPixels[sp];
- sumA += bufferA[k] = currentPixel>>>24;
- sumR += bufferR[k] = (currentPixel>> 16)&0xff;
- sumG += bufferG[k] = (currentPixel>> 8)&0xff;
- sumB += bufferB[k] = currentPixel &0xff;
+ curr = buffer[k] = srcPixels[sp];
+ sumA += (curr>>> 24);
+ sumR += (curr >> 16)&0xFF;
+ sumG += (curr >> 8)&0xFF;
+ sumB += (curr )&0xFF;
k++;
sp+=srcScanStride;
}
dp += (skipY + loc)*dstScanStride;
- destPixels[dp] = (( (sumA*scale)&0xFF000000) |
- (((sumR*scale)&0xFF000000)>>>8) |
- (((sumG*scale)&0xFF000000)>>>16) |
- (((sumB*scale)&0xFF000000)>>>24));
+ prev = destPixels[dp] = (( (sumA*scale)&0xFF000000) |
+ (((sumR*scale)&0xFF000000)>>>8) |
+ (((sumG*scale)&0xFF000000)>>>16) |
+ (((sumB*scale)&0xFF000000)>>>24));
dp+=dstScanStride;
k=0;
while (sp < colEnd) {
- final int currentPixel = srcPixels[sp];
- sumA -= bufferA[k];
- sumA += bufferA[k] = currentPixel>>>24;
-
- sumR -= bufferR[k];
- sumR += bufferR[k] = (currentPixel>>16)&0xff;
-
- sumG -= bufferG[k];
- sumG += bufferG[k] = (currentPixel>>8)&0xff;
-
- sumB -= bufferB[k];
- sumB += bufferB[k] = currentPixel&0xff;
-
- destPixels[dp] = (( (sumA*scale)&0xFF000000) |
- (((sumR*scale)&0xFF000000)>>>8) |
- (((sumG*scale)&0xFF000000)>>>16) |
- (((sumB*scale)&0xFF000000)>>>24));
-
+ curr = buffer[k];
+ if (curr == srcPixels[sp]) {
+ destPixels[dp] = prev;
+ } else {
+ sumA -= (curr>>> 24);
+ sumR -= (curr >> 16)&0xFF;
+ sumG -= (curr >> 8)&0xFF;
+ sumB -= (curr )&0xFF;
+
+ curr = buffer[k] = srcPixels[sp];
+
+ sumA += (curr>>> 24);
+ sumR += (curr >> 16)&0xFF;
+ sumG += (curr >> 8)&0xFF;
+ sumB += (curr )&0xFF;
+ prev = destPixels[dp] = (( (sumA*scale)&0xFF000000) |
+ (((sumR*scale)&0xFF000000)>>>8) |
+ (((sumG*scale)&0xFF000000)>>>16) |
+ (((sumB*scale)&0xFF000000)>>>24));
+ }
k = (k+1)%boxSz;
sp+=srcScanStride;
dp+=dstScanStride;
---------------------------------------------------------------------
To unsubscribe, e-mail: batik-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: batik-dev-help@xml.apache.org