/* ** Mark the region ** mark_flags & 1 : Mark top ** mark_flags & 2 : Mark bottom ** mark_flags & 4 : Mark left ** mark_flags & 8 : Mark right ** */ void mark_source_page(K2PDFOPT_SETTINGS *k2settings,BMPREGION *region0,int caller_id,int mark_flags) { static int display_order=0; int i,n,nn,r,g,b; #ifndef K2PDFOPT_KINDLEPDFVIEWER int shownum,nval,fontsize; char num[16]; #endif BMPREGION *region,_region; BMPREGION *clip,_clip; if (!k2settings->show_marked_source) return; /* Don't waste time marking this page if we're previewing and this isn't the preview page */ if (k2settings->preview_page!=0 && abs(k2settings->preview_page)!=k2mark_page_count) return; if (region0==NULL) { display_order=0; return; } region=&_region; (*region)=(*region0); /* Clip the region w/ignored margins */ clip=&_clip; clip->bmp=region0->bmp; clip->dpi=region0->dpi; bmpregion_trim_to_crop_margins(clip,k2settings); if (region->c1 < clip->c1) region->c1 = clip->c1; if (region->c2 > clip->c2) region->c2 = clip->c2; if (region->r1 < clip->r1) region->r1 = clip->r1; if (region->r2 > clip->r2) region->r2 = clip->r2; if (region->r2 <= region->r1 || region->c2 <= region->c1) return; /* k2printf("@mark_source_page(display_order=%d)\n",display_order); */ #ifndef K2PDFOPT_KINDLEPDFVIEWER shownum=0; nval=0; #endif if (caller_id==1) { display_order++; #ifndef K2PDFOPT_KINDLEPDFVIEWER shownum=1; nval=display_order; #endif n=(int)(region->dpi/60.+0.5); if (n<5) n=5; r=255; g=b=0; } else if (caller_id==2) { n=2; r=0; g=0; b=255; } else if (caller_id==3) { n=(int)(region->dpi/80.+0.5); if (n<4) n=4; r=0; g=255; b=0; } else if (caller_id==4) { n=2; r=255; g=0; b=255; } else if (caller_id>=100 && caller_id<=199) { #ifndef K2PDFOPT_KINDLEPDFVIEWER shownum=1; nval=caller_id-100; #endif n=3; r=255; g=90; b=40; } else { n=2; r=140; g=140; b=140; } if (n<2) n=2; nn=(region->c2+1-region->c1)/2; if (n>nn) n=nn; nn=(region->r2+1-region->r1)/2; if (n>nn) n=nn; if (n<1) n=1; for (i=0;i<n;i++) { int j; unsigned char *p; if (mark_flags & 1) { p=bmp_rowptr_from_top(region->marked,region->r1+i)+region->c1*3; for (j=region->c1;j<=region->c2;j++,p+=3) { p[0]=r; p[1]=g; p[2]=b; } } if (mark_flags & 2) { p=bmp_rowptr_from_top(region->marked,region->r2-i)+region->c1*3; for (j=region->c1;j<=region->c2;j++,p+=3) { p[0]=r; p[1]=g; p[2]=b; } } /* rowbase */ if ((mark_flags & 16) && region->bbox.type!=REGION_TYPE_FIGURE && region->bbox.rowbase>=region->r1 && region->bbox.rowbase<=region->r2) { p=bmp_rowptr_from_top(region->marked,region->bbox.rowbase-i)+region->c1*3; for (j=region->c1;j<=region->c2;j++,p+=3) { p[0]=r; p[1]=g; p[2]=b; } } if (mark_flags & 4) for (j=region->r1;j<=region->r2;j++) { p=bmp_rowptr_from_top(region->marked,j)+(region->c1+i)*3; p[0]=r; p[1]=g; p[2]=b; } if (mark_flags & 8) for (j=region->r1;j<=region->r2;j++) { p=bmp_rowptr_from_top(region->marked,j)+(region->c2-i)*3; p[0]=r; p[1]=g; p[2]=b; } } /* ** Compiling out the fontrender...() functions reduces the exe size ** considerably because it eliminates the font data from being compiled in. */ #ifndef K2PDFOPT_KINDLEPDFVIEWER if (!shownum) return; fontsize=region->c2-region->c1+1; if (fontsize > region->r2-region->r1+1) fontsize=region->r2-region->r1+1; fontsize /= 2; if (fontsize > region->dpi) fontsize = region->dpi; if (fontsize < 5) return; fontrender_set_typeface("helvetica-bold"); fontrender_set_fgcolor(r,g,b); fontrender_set_bgcolor(255,255,255); fontrender_set_pixel_size(fontsize); fontrender_set_justification(4); fontrender_set_or(1); sprintf(num,"%d",nval); fontrender_render(region->marked,(double)(region->c1+region->c2)/2., (double)(region->marked->height-((region->r1+region->r2)/2.)),num,0,NULL); #endif /* k2printf(" done mark_source_page.\n"); */ }
/* ** src is only allocated if dst_color != 0 */ void bmp_clear_outside_crop_border(MASTERINFO *masterinfo,WILLUSBITMAP *src, WILLUSBITMAP *srcgrey,K2PDFOPT_SETTINGS *k2settings) { int i,n; BMPREGION *region,_region; region=&_region; bmpregion_init(region); region->bmp = k2settings->dst_color ? src : srcgrey; region->bmp8 = srcgrey; region->dpi = k2settings->src_dpi; bmpregion_trim_to_crop_margins(region,masterinfo,k2settings); n=region->c1; for (i=0;i<srcgrey->height;i++) { unsigned char *p; if (k2settings->dst_color) { p=bmp_rowptr_from_top(src,i); memset(p,255,n*3); } p=bmp_rowptr_from_top(srcgrey,i); memset(p,255,n); } n=srcgrey->width-1-region->c2; for (i=0;i<srcgrey->height;i++) { unsigned char *p; if (k2settings->dst_color) { p=bmp_rowptr_from_top(src,i)+3*(src->width-n); memset(p,255,n*3); } p=bmp_rowptr_from_top(srcgrey,i)+srcgrey->width-n; memset(p,255,n); } n=region->r1; for (i=0;i<n;i++) { unsigned char *p; if (k2settings->dst_color) { p=bmp_rowptr_from_top(src,i); memset(p,255,src->width*3); } p=bmp_rowptr_from_top(srcgrey,i); memset(p,255,srcgrey->width); } n=srcgrey->height-1-region->r2; for (i=srcgrey->height-n;i<srcgrey->height;i++) { unsigned char *p; if (k2settings->dst_color) { p=bmp_rowptr_from_top(src,i); memset(p,255,src->width*3); } p=bmp_rowptr_from_top(srcgrey,i); memset(p,255,srcgrey->width); } /* Free region--v2.15 memory leak fix, 2-1-14 */ bmpregion_free(region); }