Commit 6bea49e026ce8a103de2b3c232042458b8f309eb

Alexei Podtelezhnikov 2017-10-14T22:45:11

[base] Netpbm image tracing. * src/base/ftobjs.c (FT_Load_Glyph): Trace bitmap size. (FT_Render_Glyph_Internal): Trace bitmap in Netpbm format. * src/smooth/ftgrays.c (gray_sweep): Sweep remnants of span tracing.

diff --git a/ChangeLog b/ChangeLog
index 1ee88ca..6b4eca8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
 2017-10-14  Alexei Podtelezhnikov  <apodtele@gmail.com>
 
+	[base] Netpbm image tracing.
+
+	* src/base/ftobjs.c (FT_Load_Glyph): Trace bitmap size.
+	(FT_Render_Glyph_Internal): Trace bitmap in Netpbm format.
+
+	* src/smooth/ftgrays.c (gray_sweep): Sweep remnants of span tracing.
+
+2017-10-14  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
 	* builds/windows/ftdebug.c (FT_Message): Print to stderr.
         * builds/wince/ftdebug.c (FT_Message): Ditto.
 
diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c
index 3569ca2..56277d6 100644
--- a/src/base/ftobjs.c
+++ b/src/base/ftobjs.c
@@ -1004,6 +1004,10 @@
         ft_glyphslot_preset_bitmap( slot, mode, NULL );
     }
 
+    FT_TRACE5(( "  bitmap pixel_mode: %d\n" ,    slot->bitmap.pixel_mode ));
+    FT_TRACE5(( "  bitmap dimensions: %dx%d\n" , slot->bitmap.width,
+                                                 slot->bitmap.rows  ));
+
   Exit:
     return error;
   }
@@ -4583,6 +4587,51 @@
       }
     }
 
+    /*
+     * Dump bitmap in Netpbm format (PBM or PGM).
+     */
+
+    /* we use FT_TRACE2 in this block */
+    if ( ft_trace_levels[trace_bitmap] >= 2 &&
+         !error                             &&
+         slot->bitmap.rows  < 128U          &&
+         slot->bitmap.width < 128U          )
+    {
+      int  rows  = (int)slot->bitmap.rows;
+      int  width = (int)slot->bitmap.width;
+      int  pitch =      slot->bitmap.pitch;
+      int  i, j, m;
+      unsigned char*  topleft = slot->bitmap.buffer;
+
+      if ( pitch < 0 )
+        topleft -= pitch * ( rows - 1 );
+
+      FT_TRACE2(( "Netpbm image: start\n" ));
+      switch ( slot->bitmap.pixel_mode )
+      {
+      case FT_PIXEL_MODE_MONO:
+        FT_TRACE2(( "P1 %d %d\n", width, rows ));
+        for ( i = 0; i < rows; i++ )
+        {
+          for ( j = 0; j < width; )
+            for ( m = 128; m > 0 && j < width; m >>= 1, j++ )
+              FT_TRACE2(( " %d", ( topleft[i * pitch + j / 8] & m ) != 0 ));
+          FT_TRACE2(( "\n" ));
+        }
+        break;
+
+      default:
+        FT_TRACE2(( "P2 %d %d 255\n", width, rows ));
+        for ( i = 0; i < rows; i++ )
+        {
+          for ( j = 0; j < width; j += 1 )
+            FT_TRACE2(( " %3u", topleft[i * pitch + j] ));
+          FT_TRACE2(( "\n" ));
+        }
+      }
+      FT_TRACE2(( "Netpbm image: end\n" ));
+    }
+
 #undef  FT_COMPONENT
 #define FT_COMPONENT  trace_objs
 
diff --git a/src/smooth/ftgrays.c b/src/smooth/ftgrays.c
index df645e6..e84e38d 100644
--- a/src/smooth/ftgrays.c
+++ b/src/smooth/ftgrays.c
@@ -1300,8 +1300,6 @@ typedef ptrdiff_t  FT_PtrDist;
     int  y;
 
 
-    FT_TRACE7(( "gray_sweep: start\n" ));
-
     for ( y = ras.min_ey; y < ras.max_ey; y++ )
     {
       PCell   cell  = ras.ycells[y - ras.min_ey];
@@ -1327,8 +1325,6 @@ typedef ptrdiff_t  FT_PtrDist;
       if ( cover != 0 )
         gray_hline( RAS_VAR_ x, y, cover, ras.max_ex - x );
     }
-
-    FT_TRACE7(( "gray_sweep: end\n" ));
   }