X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fpdf%2FBitmapOutputDev.cc;h=e550b1b1b3c618ca2cded94e0709dda589710fbd;hb=6a913f2a58d4eb0aa6b05dbd3f662474b942a5ff;hp=3b10a2f36cc21f00d714fcb1552b5225e660305b;hpb=9227569986ba464b81ca42ab213fb87a2dd3b55f;p=swftools.git diff --git a/lib/pdf/BitmapOutputDev.cc b/lib/pdf/BitmapOutputDev.cc index 3b10a2f..e550b1b 100644 --- a/lib/pdf/BitmapOutputDev.cc +++ b/lib/pdf/BitmapOutputDev.cc @@ -294,6 +294,30 @@ void BitmapOutputDev::flushText() this->emptypage = 0; } +void writeMonoBitmap(SplashBitmap*btm, char*filename) +{ + int width8 = (btm->getWidth()+7)/8; + int width = btm->getWidth(); + int height = btm->getHeight(); + gfxcolor_t*b = (gfxcolor_t*)malloc(sizeof(gfxcolor_t)*width*height); + unsigned char*data = btm->getDataPtr(); + int x,y; + for(y=0;y>3]&(128>>(x&7))) { + d[x].r = d[x].g = d[x].b = 255; + } else { + d[x].r = d[x].g = d[x].b = 0; + } + d[x].a = 255; + } + } + writePNG(filename, (unsigned char*)b, width, height); + free(b); +} + void writeBitmap(SplashBitmap*bitmap, char*filename) { int y,x; @@ -303,9 +327,10 @@ void writeBitmap(SplashBitmap*bitmap, char*filename) gfxcolor_t*data = (gfxcolor_t*)malloc(sizeof(gfxcolor_t)*width*height); - unsigned char aa=0; - if(bitmap->getMode()==splashModeMono1) - aa=255; + if(bitmap->getMode()==splashModeMono1) { + writeMonoBitmap(bitmap, filename); + return; + } for(y=0;ygetAlpha(x,y); - line[x].a = a; - } + line[x].a = bitmap->getAlpha(x,y); } } writePNG(filename, (unsigned char*)data, width, height); @@ -335,7 +355,7 @@ void writeAlpha(SplashBitmap*bitmap, char*filename) int height = bitmap->getHeight(); if(bitmap->getMode()==splashModeMono1) { - writeBitmap(bitmap, filename); + writeMonoBitmap(bitmap, filename); return; } @@ -463,7 +483,7 @@ GBool BitmapOutputDev::checkNewBitmap(int x1, int y1, int x2, int y2) sprintf(filename2, "state%dbooltext_afternewgfx.png", dbg_btm_counter); sprintf(filename3, "state%dbitmap_afternewgfx.png", dbg_btm_counter); - if(dbg_btm_counter==12) { + if(0) { msg(" %s %s %s", filename1, filename2, filename3); writeAlpha(boolpolybitmap, filename1); writeAlpha(booltextbitmap, filename2); @@ -543,7 +563,7 @@ GBool BitmapOutputDev::clip0and1differ(int x1,int y1,int x2,int y2) int width8 = (width+7)/8; int height = clip0bitmap->getHeight(); - if(fixBBox(&x1,&y1,&x2,&y2,width,height)) { + if(!fixBBox(&x1,&y1,&x2,&y2,width,height)) { /* area is outside or null */ return gFalse; } @@ -696,11 +716,8 @@ GBool BitmapOutputDev::intersection(int x1, int y1, int x2, int y2) unsigned char*data2 = (unsigned char*)textpixels; msg(" Testing area (%d,%d,%d,%d), runx=%d,runy=%d", x1,y1,x2,y2, runx, runy); for(y=0;ygetCurrentFont()->getGlyphPath(code); + SplashFont*font = clip0dev->getCurrentFont(); + SplashPath*path = font?font->getGlyphPath(code):NULL; + if(!path) { if(code) msg(" couldn't create outline for char %d", code);