X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fpdf%2FGFXOutputDev.cc;h=8377c5f6fe95389ff4cf7932361c81dd96324a27;hb=b8d4219b572bec7285469f34897dae57c0fc6141;hp=ae26f2b3c01617f05085bcb8d120757a1b250f31;hpb=d78c451f22439e9340d1345b001ef15a31861149;p=swftools.git diff --git a/lib/pdf/GFXOutputDev.cc b/lib/pdf/GFXOutputDev.cc index ae26f2b..8377c5f 100644 --- a/lib/pdf/GFXOutputDev.cc +++ b/lib/pdf/GFXOutputDev.cc @@ -1972,19 +1972,23 @@ 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=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]; int weight=256; if(xx==fromx) weight = (weight*xweight1)/256; @@ -2050,6 +2054,7 @@ static void drawimage(gfxdevice_t*dev, gfxcolor_t* data, int sizex,int sizey, /* TODO: pass image_dpi to device instead */ dev->setparameter(dev, "next_bitmap_is_jpeg", "1"); + dump_outline(&p1); dev->fillbitmap(dev, &p1, &img, &m, 0); } @@ -2140,10 +2145,20 @@ void GFXOutputDev::drawGeneralImage(GfxState *state, Object *ref, Stream *str, return; } - 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); + 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); + + if(type3active) { + /* as type 3 bitmaps are antialized, we need to place them + at integer coordinates, otherwise flash player's antializing + will kick in and make everything blurry */ + x1 = (int)(x1);y1 = (int)(y1); + x2 = (int)(x2);y2 = (int)(y2); + x3 = (int)(x3);y3 = (int)(y3); + x4 = (int)(x4);y4 = (int)(y4); + } if(!pbminfo && !(str->getKind()==strDCT)) { if(!type3active) {