fixed bug in poly2bitmap
[swftools.git] / lib / pdf / BitmapOutputDev.cc
index 282b7d7..7141e5a 100644 (file)
@@ -497,9 +497,9 @@ GBool BitmapOutputDev::checkNewText(int x1, int y1, int x2, int y2)
         char filename1[80];
         char filename2[80];
         char filename3[80];
-        sprintf(filename1, "state%dboolbitmap_afternewtext.png", dbg_btm_counter);
-        sprintf(filename2, "state%dbooltext_afternewtext.png", dbg_btm_counter);
-        sprintf(filename3, "state%dbitmap_afternewtext.png", dbg_btm_counter);
+        sprintf(filename1, "state%03dboolbitmap_afternewtext.png", dbg_btm_counter);
+        sprintf(filename2, "state%03dbooltext_afternewtext.png", dbg_btm_counter);
+        sprintf(filename3, "state%03dbitmap_afternewtext.png", dbg_btm_counter);
         msg("<verbose> %s %s %s", filename1, filename2, filename3);
        writeAlpha(stalepolybitmap, filename1);
        writeAlpha(booltextbitmap, filename2);
@@ -553,9 +553,9 @@ GBool BitmapOutputDev::checkNewBitmap(int x1, int y1, int x2, int y2)
         char filename1[80];
         char filename2[80];
         char filename3[80];
-        sprintf(filename1, "state%dboolbitmap_afternewgfx.png", dbg_btm_counter);
-        sprintf(filename2, "state%dbooltext_afternewgfx.png", dbg_btm_counter);
-        sprintf(filename3, "state%dbitmap_afternewgfx.png", dbg_btm_counter);
+        sprintf(filename1, "state%03dboolbitmap_afternewgfx.png", dbg_btm_counter);
+        sprintf(filename2, "state%03dbooltext_afternewgfx.png", dbg_btm_counter);
+        sprintf(filename3, "state%03dbitmap_afternewgfx.png", dbg_btm_counter);
         msg("<verbose> %s %s %s", filename1, filename2, filename3);
        writeAlpha(stalepolybitmap, filename1);
        writeAlpha(booltextbitmap, filename2);
@@ -1445,27 +1445,23 @@ void BitmapOutputDev::drawChar(GfxState *state, double x, double y,
        int x1 = (int)x, x2 = (int)x+1, y1 = (int)y, y2 = (int)y+1;
         SplashFont*font = clip0dev->getCurrentFont();
        SplashPath*path = font?font->getGlyphPath(code):NULL;
-
-        if(!path) {
-            if(code)
-                msg("<warning> couldn't create outline for char %d", code);
-            return;
-        }
         x-=originX;
         y-=originY;
-        path->offset((SplashCoord)x, (SplashCoord)y);
-       int t;
-       for(t=0;t<path->getLength();t++) {
-           double xx,yy;
-           Guchar f;
-           path->getPoint(t,&xx,&yy,&f);
-            state->transform(xx,yy,&xx,&yy);
-           if(xx<x1) x1=(int)xx;
-           if(yy<y1) y1=(int)yy;
-           if(xx>=x2) x2=(int)xx+1;
-           if(yy>=y2) y2=(int)yy+1;
+       if(path) {
+           path->offset((SplashCoord)x, (SplashCoord)y);
+           int t;
+           for(t=0;t<path->getLength();t++) {
+               double xx,yy;
+               Guchar f;
+               path->getPoint(t,&xx,&yy,&f);
+               state->transform(xx,yy,&xx,&yy);
+               if(xx<x1) x1=(int)xx;
+               if(yy<y1) y1=(int)yy;
+               if(xx>=x2) x2=(int)xx+1;
+               if(yy>=y2) y2=(int)yy+1;
+           }
+           delete(path);path=0;
        }
-       delete(path);path=0;
 
        /* if this character is affected somehow by the various clippings (i.e., it looks
           different on a device without clipping), then draw it on the bitmap, not as
@@ -1593,22 +1589,22 @@ gfxbbox_t BitmapOutputDev::getImageBBox(GfxState*state)
     double x,y;
     state->transform(0, 1, &x, &y);
     bbox.xmin=bbox.xmax = x;
-    bbox.ymin=bbox.ymax = x;
+    bbox.ymin=bbox.ymax = y;
     state->transform(0, 0, &x, &y);
     bbox.xmin=min(bbox.xmin,x);
     bbox.ymin=min(bbox.ymin,y);
-    bbox.xmax=max(bbox.xmin,x);
-    bbox.ymax=max(bbox.ymin,y);
+    bbox.xmax=max(bbox.xmax,x);
+    bbox.ymax=max(bbox.ymax,y);
     state->transform(1, 0, &x, &y);
     bbox.xmin=min(bbox.xmin,x);
     bbox.ymin=min(bbox.ymin,y);
-    bbox.xmax=max(bbox.xmin,x);
-    bbox.ymax=max(bbox.ymin,y);
+    bbox.xmax=max(bbox.xmax,x);
+    bbox.ymax=max(bbox.ymax,y);
     state->transform(1, 1, &x, &y);
     bbox.xmin=min(bbox.xmin,x);
     bbox.ymin=min(bbox.ymin,y);
-    bbox.xmax=max(bbox.xmin,x);
-    bbox.ymax=max(bbox.ymin,y);
+    bbox.xmax=max(bbox.xmax,x);
+    bbox.ymax=max(bbox.ymax,y);
     return bbox;
 }
 void BitmapOutputDev::drawImageMask(GfxState *state, Object *ref, Stream *str,