deweese 01/07/23 12:36:30 Modified: sources/org/apache/batik/bridge URIResolver.java sources/org/apache/batik/ext/awt/image/renderable TileRable.java TileRable8Bit.java sources/org/apache/batik/ext/awt/image/rendered TileRed.java sources/org/apache/batik/gvt PatternPaintContext.java Log: 1) Fixed PR 2667 a NPE for URIResolver when building from memory DOM. 2) _Greatly_ increased the speed of small patterns (the smaller the pattern block in device space the bigger the difference). PR: 2667 Revision Changes Path 1.8 +14 -14 xml-batik/sources/org/apache/batik/bridge/URIResolver.java Index: URIResolver.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/URIResolver.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- URIResolver.java 2001/07/18 22:04:53 1.7 +++ URIResolver.java 2001/07/23 19:36:29 1.8 @@ -27,7 +27,7 @@ * This class is used to resolve the URI that can be found in a SVG document. * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: URIResolver.java,v 1.7 2001/07/18 22:04:53 deweese Exp $ + * @version $Id: URIResolver.java,v 1.8 2001/07/23 19:36:29 deweese Exp $ */ public class URIResolver { /** @@ -85,22 +85,22 @@ if (documentURI == null) documentURI = document.getURL(); - if (documentURI.equals(uri)) { - return document; - } - if (uri.startsWith(documentURI) && - uri.length() > documentURI.length() + 1 && - uri.charAt(documentURI.length()) == '#') { - uri = uri.substring(documentURI.length()); - } - - if (uri.startsWith("#")) { - return document.getElementById(uri.substring(1)); + ParsedURL purl = new ParsedURL(documentURI, uri); + String ref = purl.getRef(); + if ((ref != null) && (documentURI != null)) { + ParsedURL pDocURL = new ParsedURL(documentURI); + // Check if the rest of the URL matches... + // if so then return the referenced element. + if ((pDocURL.getPath() == purl.getPath()) && + (pDocURL.getPort() == purl.getPort()) && + (pDocURL.getHost() == purl.getHost()) && + (pDocURL.getProtocol() == purl.getProtocol())) + return document.getElementById(ref); } - ParsedURL purl = new ParsedURL(documentURI, uri); + // uri is not a reference into this document, so load the + // document it does reference. Document doc = documentLoader.loadDocument(purl.toString()); - String ref = purl.getRef(); if (ref != null) return doc.getElementById(ref); return doc; 1.2 +2 -2 xml-batik/sources/org/apache/batik/ext/awt/image/renderable/TileRable.java Index: TileRable.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/ext/awt/image/renderable/TileRable.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- TileRable.java 2001/01/24 05:39:34 1.1 +++ TileRable.java 2001/07/23 19:36:29 1.2 @@ -14,9 +14,9 @@ * A renderable that can tile its source into the tile region. * * @author <a href="mailto:[EMAIL PROTECTED]">Vincent Hardy</a> - * @version $Id: TileRable.java,v 1.1 2001/01/24 05:39:34 vhardy Exp $ + * @version $Id: TileRable.java,v 1.2 2001/07/23 19:36:29 deweese Exp $ */ -public interface TileRable extends Filter { +public interface TileRable extends FilterColorInterpolation { /** * Returns the tile region */ 1.4 +6 -4 xml-batik/sources/org/apache/batik/ext/awt/image/renderable/TileRable8Bit.java Index: TileRable8Bit.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/ext/awt/image/renderable/TileRable8Bit.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- TileRable8Bit.java 2001/04/24 21:34:47 1.3 +++ TileRable8Bit.java 2001/07/23 19:36:29 1.4 @@ -31,9 +31,11 @@ * 8 bit TileRable implementation * * @author <a href="mailto:[EMAIL PROTECTED]">Vincent Hardy</a> - * @version $Id: TileRable8Bit.java,v 1.3 2001/04/24 21:34:47 deweese Exp $ + * @version $Id: TileRable8Bit.java,v 1.4 2001/07/23 19:36:29 deweese Exp $ */ -public class TileRable8Bit extends AbstractRable implements TileRable{ +public class TileRable8Bit + extends AbstractColorInterpolationRable + implements TileRable{ /** * Tile region */ @@ -235,7 +237,7 @@ RenderContext tileRc = new RenderContext(tileAt, srcRect, rh); // RenderedImage tileRed = new DemandRed(source, tileRc); RenderedImage tileRed = source.createRendering(tileRc); - + // System.out.println("TileRed: " + // GraphicsUtil.wrap(tileRed).getBounds()); @@ -269,7 +271,7 @@ Integer.MAX_VALUE/2); } // System.out.println("tiledArea: " + tiledArea); - + tileRed = convertSourceCS(tileRed); TileRed tiledRed = new TileRed(tileRed, tiledArea, dw, dh); // org.apache.batik.test.gvt.ImageDisplay.showImage("Tile", tiledRed); 1.7 +57 -3 xml-batik/sources/org/apache/batik/ext/awt/image/rendered/TileRed.java Index: TileRed.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/ext/awt/image/rendered/TileRed.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- TileRed.java 2001/05/02 14:56:27 1.6 +++ TileRed.java 2001/07/23 19:36:29 1.7 @@ -37,7 +37,7 @@ * left corner of the tiled region. * * @author <a href="mailto:[EMAIL PROTECTED]">Vincent Hardy</a> - * @version $Id: TileRed.java,v 1.6 2001/05/02 14:56:27 deweese Exp $ + * @version $Id: TileRed.java,v 1.7 2001/07/23 19:36:29 deweese Exp $ */ public class TileRed extends AbstractRed implements TileGenerator { static final AffineTransform IDENTITY = new AffineTransform(); @@ -133,8 +133,62 @@ tile.getMinX(), tile.getMinY(), null); if (raster != null) { - fillRasterFrom(raster, tile); - this.tile = null; // don't need it (It's in the raster). + int minX = raster.getMinX(); + int minY = raster.getMinY(); + int width = raster.getWidth(); + int height = raster.getHeight(); + + // This is a fairly expensive operation so do it once + // upfront. If we wanted this to go even faster we could + // bypass copyData alltogeather and do the copy loops + // directly. + boolean int_pack = GraphicsUtil.is_INT_PACK_Data(sm, false); + + WritableRaster fromRaster = raster.createWritableChild + (minX, minY, xStep, yStep, minX, minY, null); + + // Fill one 'tile' of the input.... + fillRasterFrom(fromRaster, tile); + this.tile = null; // don't need it anymore (It's in the raster). + + // Now replicate that out to the rest of the + // raster. We keep growing the size of the + // chunk we replicate by 2x. + + // Start replicating across the first row... + int step=xStep; + for (int x=xStep; x<width; x+=step, step*=2) { + int w = step; + if (x+w > width) w = width-x; + WritableRaster toRaster = raster.createWritableChild + (minX+x, minY, w, yStep, minX, minY, null); + + if (int_pack) + GraphicsUtil.copyData_INT_PACK(fromRaster, toRaster); + else + GraphicsUtil.copyData_FALLBACK(fromRaster, toRaster); + + fromRaster = raster.createWritableChild + (minX, minY, x+w, yStep, minX, minY, null); + } + + // Next replicate that row down to the bottom of the raster... + step = yStep; + for (int y=yStep; y<height; y+=step, step*=2) { + int h = step; + if (y+h > height) h = height-y; + WritableRaster toRaster = raster.createWritableChild + (minX, minY+y, width, h, minX, minY, null); + + if (int_pack) + GraphicsUtil.copyData_INT_PACK(fromRaster, toRaster); + else + GraphicsUtil.copyData_FALLBACK(fromRaster, toRaster); + + + fromRaster = raster.createWritableChild + (minX, minY, width, y+h, minX, minY, null); + } } else { this.tile = tile; 1.6 +22 -39 xml-batik/sources/org/apache/batik/gvt/PatternPaintContext.java Index: PatternPaintContext.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/gvt/PatternPaintContext.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- PatternPaintContext.java 2001/05/02 14:56:32 1.5 +++ PatternPaintContext.java 2001/07/23 19:36:30 1.6 @@ -29,6 +29,7 @@ import org.apache.batik.ext.awt.image.GraphicsUtil; import org.apache.batik.ext.awt.image.renderable.Filter; +import org.apache.batik.ext.awt.image.renderable.TileRable; import org.apache.batik.ext.awt.image.renderable.TileRable8Bit; import org.apache.batik.ext.awt.image.rendered.TileCacheRed; @@ -37,7 +38,7 @@ * paint implementation. * * @author <a href="[EMAIL PROTECTED]">Vincent Hardy</a> - * @version $Id: PatternPaintContext.java,v 1.5 2001/05/02 14:56:32 deweese Exp $ + * @version $Id: PatternPaintContext.java,v 1.6 2001/07/23 19:36:30 deweese Exp $ */ public class PatternPaintContext implements PaintContext { @@ -93,59 +94,41 @@ // System.out.println("PatB: " + patternRegion); // System.out.println("Tile: " + tile); - Filter tileRable = new TileRable8Bit(tile, - EVERYTHING, - patternRegion, - overflow); + TileRable tileRable = new TileRable8Bit(tile, + EVERYTHING, + patternRegion, + overflow); + + ColorSpace destCS = destCM.getColorSpace(); + if (destCS == ColorSpace.getInstance(ColorSpace.CS_sRGB)) + tileRable.setColorSpaceLinear(false); + else if (destCS == ColorSpace.getInstance(ColorSpace.CS_LINEAR_RGB)) + tileRable.setColorSpaceLinear(true); RenderContext rc = new RenderContext(usr2dev, EVERYTHING, hints); - tiled = tileRable.createRendering(rc); // System.out.println("tileRed: " + tiled); // org.apache.batik.test.gvt.ImageDisplay.showImage("Tiled: ", tiled); //System.out.println("Created rendering"); - if(tiled != null) { - rasterCM = tiled.getColorModel(); - ColorSpace destCS = destCM.getColorSpace(); - - if (destCS != rasterCM.getColorSpace()) { - if (destCS == ColorSpace.getInstance(ColorSpace.CS_sRGB)) - tiled = GraphicsUtil.convertTosRGB - (GraphicsUtil.wrap(tiled)); - else if (destCS == - ColorSpace.getInstance(ColorSpace.CS_LINEAR_RGB)) - tiled = GraphicsUtil.convertToLsRGB - (GraphicsUtil.wrap(tiled)); - } - - rasterCM = tiled.getColorModel(); - if (rasterCM.hasAlpha()) { - if (destCM.hasAlpha()) { - if (rasterCM.isAlphaPremultiplied() != - destCM .isAlphaPremultiplied()) - rasterCM = GraphicsUtil.coerceColorModel - (rasterCM, destCM.isAlphaPremultiplied()); - } else { - rasterCM = GraphicsUtil.coerceColorModel(rasterCM, false); - } - } - } - else { + if(tiled == null) { //System.out.println("Tile was null"); rasterCM = ColorModel.getRGBdefault(); WritableRaster wr; wr = rasterCM.createCompatibleWritableRaster(32, 32); tiled = new BufferedImage(rasterCM, wr, false, null); + return; } - - // System.out.println("DestCM : " + destCM); - // System.out.println("RasterCM: " + rasterCM); - // Exception e = new Exception("Pattern"); - // e.printStackTrace(); - + rasterCM = tiled.getColorModel(); + if (rasterCM.hasAlpha()) { + if (destCM.hasAlpha()) + rasterCM = GraphicsUtil.coerceColorModel + (rasterCM, destCM.isAlphaPremultiplied()); + else + rasterCM = GraphicsUtil.coerceColorModel(rasterCM, false); + } } public void dispose(){ --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]