fixed previous antializer fix
[swftools.git] / lib / pdf / GFXOutputDev.cc
index ca3abbd..c88a035 100644 (file)
@@ -1083,8 +1083,6 @@ void GFXOutputDev::strokeGfxline(GfxState *state, gfxline_t*line, int flags)
        this->transformXY(state, 1, 1, &tx2, &ty2);
         double f = sqrt(sqr(tx2-tx1)+sqr(ty2-ty1)) / SQRT2;
 
-       f = 1.0; //disable dash length transform for now
-
        msg("<trace> %d dashes", this->dashLength);
        msg("<trace> |  phase: %f", this->dashStart);
        for(t=0;t<this->dashLength;t++) {
@@ -1203,7 +1201,8 @@ void GFXOutputDev::clipToStrokePath(GfxState *state)
     gfxline_t*line= gfxPath_to_gfxline(state, path, 0, user_movex + clipmovex, user_movey + clipmovey);
 
     if(getLogLevel() >= LOGLEVEL_TRACE)  {
-        msg("<trace> cliptostrokepath");
+        double width = state->getTransformedLineWidth();
+        msg("<trace> cliptostrokepath width=%f", width);
         dump_outline(line);
     }
 
@@ -1964,8 +1963,8 @@ unsigned char* antialize(unsigned char*data, int width, int height, int newwidth
     unsigned char*newdata;
     int x,y;
     newdata= (unsigned char*)malloc(newwidth*newheight);
-    double fx = (double)(width)/newwidth;
-    double fy = (double)(height)/newheight;
+    double fx = ((double)width)/newwidth;
+    double fy = ((double)height)/newheight;
     double px = 0;
     int blocksize = (int)(8192/(fx*fy));
     int r = 8192*256/palettesize;
@@ -1973,17 +1972,21 @@ unsigned char* antialize(unsigned char*data, int width, int height, int newwidth
        double ex = px + fx;
        int fromx = (int)px;
        int tox = (int)ex;
-       int xweight1 = (int)(((fromx+1)-px)*256);
+       int xweight1 = (int)((1-(px-fromx))*256);
        int xweight2 = (int)((ex-tox)*256);
        double py =0;
        for(y=0;y<newheight;y++) {
            double ey = py + fy;
            int fromy = (int)py;
            int toy = (int)ey;
-           int yweight1 = (int)(((fromy+1)-py)*256);
+           int yweight1 = (int)((1-(py-fromy))*256);
            int yweight2 = (int)((ey-toy)*256);
            int a = 0;
            int xx,yy;
+            if(tox>=width) 
+                tox = width-1;
+            if(toy>=height) 
+                toy = height-1;
            for(xx=fromx;xx<=tox;xx++)
            for(yy=fromy;yy<=toy;yy++) {
                int b = 1-data[width*yy+xx];
@@ -2141,10 +2144,10 @@ void GFXOutputDev::drawGeneralImage(GfxState *state, Object *ref, Stream *str,
       return;
   }
 
-  this->transformXY(state, 0, 1, &x1, &y1);
-  this->transformXY(state, 0, 0, &x2, &y2);
-  this->transformXY(state, 1, 0, &x3, &y3);
-  this->transformXY(state, 1, 1, &x4, &y4);
+  this->transformXY(state, 0, 1, &x1, &y1); x1 = (int)(x1);y1 = (int)(y1);
+  this->transformXY(state, 0, 0, &x2, &y2); x2 = (int)(x2);y2 = (int)(y2);
+  this->transformXY(state, 1, 0, &x3, &y3); x3 = (int)(x3);y3 = (int)(y3);
+  this->transformXY(state, 1, 1, &x4, &y4); x4 = (int)(x4);y4 = (int)(y4);
 
   if(!pbminfo && !(str->getKind()==strDCT)) {
       if(!type3active) {
@@ -2200,7 +2203,7 @@ void GFXOutputDev::drawGeneralImage(GfxState *state, Object *ref, Stream *str,
            delete imgStr;
            return;
          }
-
+          
          width = realwidth;
          height = realheight;
          delete[] pic;
@@ -2216,6 +2219,7 @@ void GFXOutputDev::drawGeneralImage(GfxState *state, Object *ref, Stream *str,
              pal[t].b = colToByte(rgb.b);
              pal[t].a = (unsigned char)(t*r);
          }
+          
       }
 
       gfxcolor_t*pic2 = new gfxcolor_t[width*height];