[gs-cvs] rev 8233 - trunk/gs/src

alexcher at ghostscript.com alexcher at ghostscript.com
Sat Sep 8 17:53:13 PDT 2007


Author: alexcher
Date: 2007-09-08 17:53:12 -0700 (Sat, 08 Sep 2007)
New Revision: 8233

Modified:
   trunk/gs/src/gdevps.c
Log:
Make pswrite and epswrite devices generate proper line-interleaved image
stream even when they receive several scan lines at once. This happens when
the source image operator takes large strings as multiple data sources.
Bug 688200, customer 632.

DIFFERENCES:
Not covered by regression testing.


Modified: trunk/gs/src/gdevps.c
===================================================================
--- trunk/gs/src/gdevps.c	2007-09-08 22:31:20 UTC (rev 8232)
+++ trunk/gs/src/gdevps.c	2007-09-09 00:53:12 UTC (rev 8233)
@@ -1614,17 +1614,21 @@
     gdev_vector_image_enum_t *pie = (gdev_vector_image_enum_t *) info;
     int code =
 	gx_image_plane_data_rows(pie->bbox_info, planes, height, rows_used);
-    int pi;
+    int pi, j;
 
-    for (pi = 0; pi < pie->num_planes; ++pi) {
-	if (pie->bits_per_row != pie->width * info->plane_depths[pi])
-	    return_error(gs_error_rangecheck);
-	psw_put_bits(pdev->image_stream, planes[pi].data,
-		     planes[pi].data_x * info->plane_depths[pi],
-		     planes[pi].raster, pie->bits_per_row,
-		     *rows_used);
-        if (pdev->image_stream->end_status == ERRC)
-            return_error(gs_error_ioerror);
+    for (j = 0; j < *rows_used; j++) {
+        for (pi = 0; pi < pie->num_planes; ++pi) {
+	    if (pie->bits_per_row != pie->width * info->plane_depths[pi])
+	        return_error(gs_error_rangecheck);
+	    psw_put_bits(pdev->image_stream,
+                planes[pi].data,
+		planes[pi].data_x*info->plane_depths[pi] + pie->bits_per_row*j,
+		planes[pi].raster,
+                pie->bits_per_row,
+		1 );
+            if (pdev->image_stream->end_status == ERRC)
+                return_error(gs_error_ioerror);
+        }
     }
     pie->y += *rows_used;
     return code;



More information about the gs-cvs mailing list