You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by je...@apache.org on 2006/06/29 12:13:08 UTC

svn commit: r417984 - in /xmlgraphics/fop/trunk/src/sandbox/org/apache/fop/render/afp: AFPGraphics2DAdapter.java AFPRenderer.java AFPRendererContextConstants.java SVGConverter.java

Author: jeremias
Date: Thu Jun 29 03:13:08 2006
New Revision: 417984

URL: http://svn.apache.org/viewvc?rev=417984&view=rev
Log:
Re-routing SVG painting to the Graphics2DAdapter and teach the latter to respect the renderer's colorImages setting.
Removed obsolete SVGConverter.
This fixes painting SVG at a hard-coded resolution. Now uses the target resolution from the user agent.

Added:
    xmlgraphics/fop/trunk/src/sandbox/org/apache/fop/render/afp/AFPRendererContextConstants.java
Removed:
    xmlgraphics/fop/trunk/src/sandbox/org/apache/fop/render/afp/SVGConverter.java
Modified:
    xmlgraphics/fop/trunk/src/sandbox/org/apache/fop/render/afp/AFPGraphics2DAdapter.java
    xmlgraphics/fop/trunk/src/sandbox/org/apache/fop/render/afp/AFPRenderer.java

Modified: xmlgraphics/fop/trunk/src/sandbox/org/apache/fop/render/afp/AFPGraphics2DAdapter.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/sandbox/org/apache/fop/render/afp/AFPGraphics2DAdapter.java?rev=417984&r1=417983&r2=417984&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/sandbox/org/apache/fop/render/afp/AFPGraphics2DAdapter.java (original)
+++ xmlgraphics/fop/trunk/src/sandbox/org/apache/fop/render/afp/AFPGraphics2DAdapter.java Thu Jun 29 03:13:08 2006
@@ -43,10 +43,12 @@
         RendererContext.RendererContextWrapper wrappedContext
                 = new RendererContext.RendererContextWrapper(context);
         AFPRenderer afp = (AFPRenderer)context.getRenderer();
+        Boolean grayObj = (Boolean)context.getProperty(AFPRendererContextConstants.AFP_GRAYSCALE);
+        boolean gray = (grayObj != null ? grayObj.booleanValue() : false);
         
         //Paint to a BufferedImage
         int resolution = (int)Math.round(context.getUserAgent().getTargetResolution());
-        BufferedImage bi = paintToBufferedImage(painter, wrappedContext, resolution, false, false);
+        BufferedImage bi = paintToBufferedImage(painter, wrappedContext, resolution, gray, false);
 
         afp.drawBufferedImage(bi, resolution, x, y, width, height);
     }

Modified: xmlgraphics/fop/trunk/src/sandbox/org/apache/fop/render/afp/AFPRenderer.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/sandbox/org/apache/fop/render/afp/AFPRenderer.java?rev=417984&r1=417983&r2=417984&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/sandbox/org/apache/fop/render/afp/AFPRenderer.java (original)
+++ xmlgraphics/fop/trunk/src/sandbox/org/apache/fop/render/afp/AFPRenderer.java Thu Jun 29 03:13:08 2006
@@ -67,6 +67,7 @@
 import org.apache.fop.image.XMLImage;
 import org.apache.fop.render.AbstractPathOrientedRenderer;
 import org.apache.fop.render.Graphics2DAdapter;
+import org.apache.fop.render.RendererContext;
 import org.apache.fop.render.afp.extensions.AFPElementMapping;
 import org.apache.fop.render.afp.extensions.AFPPageSetup;
 import org.apache.fop.render.afp.fonts.AFPFontInfo;
@@ -1054,6 +1055,18 @@
     }
 
     /**
+     * @see org.apache.fop.render.PrintRenderer#createRendererContext(
+     *          int, int, int, int, java.util.Map)
+     */
+    protected RendererContext createRendererContext(int x, int y, int width, int height, Map foreignAttributes) {
+        RendererContext context;
+        context = super.createRendererContext(x, y, width, height, foreignAttributes);
+        context.setProperty(AFPRendererContextConstants.AFP_GRAYSCALE, 
+                new Boolean(!this.colorImages));
+        return context;
+    }
+
+    /**
      * Draw an image at the indicated location.
      * @see org.apache.fop.render.AbstractRenderer#drawImage(String, Rectangle2D, Map)
      */
@@ -1077,7 +1090,7 @@
                 return;
             }
             String mime = fopimage.getMimeType();
-            if ("text/xml".equals(mime)) {
+            if ("text/xml".equals(mime) || MimeConstants.MIME_SVG.equals(mime)) {
                 if (!fopimage.load(FopImage.ORIGINAL_DATA)) {
                     return;
                 }
@@ -1085,27 +1098,6 @@
                 String ns = ((XMLImage) fopimage).getNameSpace();
 
                 renderDocument(doc, ns, pos, foreignAttributes);
-            } else if (MimeConstants.MIME_SVG.equals(mime)) {
-                if (!fopimage.load(FopImage.ORIGINAL_DATA)) {
-                    return;
-                }
-                int x = mpts2units(pos.getX() + currentIPPosition);
-                int y = mpts2units(pos.getY() + currentBPPosition);
-                int w = mpts2units(pos.getWidth());
-                int h = mpts2units(pos.getHeight());
-                ImageObject io = _afpDataStream.getImageObject(x, y, w, h);
-                io.setImageParameters(
-                    (int)(fopimage.getHorizontalResolution() * 10),
-                    (int)(fopimage.getVerticalResolution() * 10),
-                    fopimage.getWidth(),
-                    fopimage.getHeight()
-                );
-                if (colorImages) {
-                    io.setImageIDESize((byte)24);
-                    io.setImageData(SVGConverter.convertToTIFF((XMLImage)fopimage));
-                } else {
-                    convertToGrayScaleImage(io, SVGConverter.convertToTIFF((XMLImage)fopimage));
-                }
             } else if (MimeConstants.MIME_EPS.equals(mime)) {
                 log.warn("EPS images are not supported by this renderer");
             /*
@@ -1199,6 +1191,29 @@
     }
 
     /**
+     * Writes a BufferedImage to an OutputStream as raw sRGB bitmaps.
+     * @param img the BufferedImage
+     * @param out the OutputStream
+     * @throws IOException In case of an I/O error.
+     */
+    public static void writeImage(BufferedImage img, OutputStream out) throws IOException {
+        int w  = img.getWidth();
+        int h  = img.getHeight();
+        int[] tmpMap = img.getRGB(0, 0, w, h, null, 0, w);
+        for (int i = 0; i < h; i++) {
+            for (int j = 0; j < w; j++) {
+                int p = tmpMap[i * w + j];
+                int r = (p >> 16) & 0xFF;
+                int g = (p >> 8) & 0xFF;
+                int b = (p) & 0xFF;
+                out.write((byte)(r & 0xFF));
+                out.write((byte)(g & 0xFF));
+                out.write((byte)(b & 0xFF));
+            }
+        }
+    }
+    
+    /**
      * Draws a BufferedImage to AFP.
      * @param bi the BufferedImage
      * @param resolution the resolution of the BufferedImage
@@ -1215,7 +1230,7 @@
         ByteArrayOutputStream baout = new ByteArrayOutputStream();
         try {
             //Serialize image
-            SVGConverter.writeImage(bi, baout);
+            writeImage(bi, baout);
             byte[] buf = baout.toByteArray();
             
             //Generate image

Added: xmlgraphics/fop/trunk/src/sandbox/org/apache/fop/render/afp/AFPRendererContextConstants.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/sandbox/org/apache/fop/render/afp/AFPRendererContextConstants.java?rev=417984&view=auto
==============================================================================
--- xmlgraphics/fop/trunk/src/sandbox/org/apache/fop/render/afp/AFPRendererContextConstants.java (added)
+++ xmlgraphics/fop/trunk/src/sandbox/org/apache/fop/render/afp/AFPRendererContextConstants.java Thu Jun 29 03:13:08 2006
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Id$ */
+
+package org.apache.fop.render.afp;
+
+import org.apache.fop.render.RendererContextConstants;
+
+/**
+ * Defines a number of standard constants (keys) for use by the RendererContext class.
+ */
+public interface AFPRendererContextConstants extends RendererContextConstants {
+
+    /**
+     * Key for a Boolean value that enables grayscale processing instead of color 
+     * processing.
+     */
+    String AFP_GRAYSCALE = "afpGrayscale";
+
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: fop-commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-commits-help@xmlgraphics.apache.org