Michael, Thanks for sending the patch. I'll put it in later today. Cheers, Vincent.
Michael Hartle wrote: > > Hello all, > > I have been using Batik 1.1.1 via Cocoon extensively for some while, and > I am considering Batik to be a really valuable component. After > switching to Java 1.4.0, the library refused to produce the correct > images as JPEGs via the JPEGTranscoder. The bug shows whenever there is > a KEY_BACKGROUND_COLOR hint set and the JPEGTranscoder is used under > Java 1.4.0, the result is a plain image with the specificed background > color. I already filed it as a bug at > http://nagoya.apache.org/bugzilla/show_bug.cgi?id=6775 > > The problem traces back to a seemingly now enforced semantic of Graphics > and subsequently Graphics2D in Java 1.4.0; according to > http://java.sun.com/j2se/1.4/docs/api/java/awt/Graphics.html#dispose(), > after disposing a Graphics object, > > > Disposes of this graphics context and releases any system resources > > that it is using. A |Graphics| object cannot be used after |dispose| > > has been called. > > In org.apache.batik.transcoder.image.ImageTranscoder.transcode(), find > the following section > > BufferedImage dest = createImage(w, h); > > Graphics2D g2d = GraphicsUtil.createGraphics(dest); > if (hints.containsKey(KEY_BACKGROUND_COLOR)) { > Paint bgcolor = (Paint)hints.get(KEY_BACKGROUND_COLOR); > g2d.setComposite(AlphaComposite.SrcOver); > g2d.setPaint(bgcolor); > g2d.fillRect(0, 0, w, h); > g2d.dispose(); > } > if (rend != null) { // might be null if the svg document is empty > g2d.drawRenderedImage(rend, new AffineTransform()); > } > rend = null; // We're done with it... > writeImage(dest, output); > > and have a look at the g2d.dispose() call and the following call to > g2d.drawRenderedImage(rend, new AffineTransform()); a move of the > g2d.dispose() call after the next if-block, looking like this > > BufferedImage dest = createImage(w, h); > > Graphics2D g2d = GraphicsUtil.createGraphics(dest); > if (hints.containsKey(KEY_BACKGROUND_COLOR)) { > Paint bgcolor = (Paint)hints.get(KEY_BACKGROUND_COLOR); > g2d.setComposite(AlphaComposite.SrcOver); > g2d.setPaint(bgcolor); > g2d.fillRect(0, 0, w, h); > } > if (rend != null) { // might be null if the svg document is empty > g2d.drawRenderedImage(rend, new AffineTransform()); > } > g2d.dispose(); > rend = null; // We're done with it... > writeImage(dest, output); > > does the trick; I am now able to use Batik 1.1.1 in Cocoon 2.0.2-dev > with Tomcat 4.0.1 and Suns JDK 1.4.0 to turn SVG into JPEG images again. > > Best regards, > > Michael Hartle, > Hartle & Klug GbR > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]