Ejemplo n.º 1
0
void k2pdfopt_crop_bmp(KOPTContext *kctx) {
	static char *funcname="k2pdfopt_crop_bmp";
	K2PDFOPT_SETTINGS _k2settings, *k2settings;
	MASTERINFO _masterinfo, *masterinfo;
	WILLUSBITMAP _srcgrey, *srcgrey;
	WILLUSBITMAP *src;
	BMPREGION _region, *region;
	int *colcount,*rowcount;
	int i,j;
	float margin;

	src = &kctx->src;
	srcgrey = &_srcgrey;
	bmp_init(srcgrey);

	k2settings = &_k2settings;
	masterinfo = &_masterinfo;
	/* Initialize settings */
	k2pdfopt_settings_init_from_koptcontext(k2settings, kctx);
	k2pdfopt_settings_sanity_check(k2settings);
	/* Init master output structure */
	masterinfo_init(masterinfo, k2settings);
	bmp_init(&masterinfo->bmp);
	masterinfo->bmp.width = 0;
	masterinfo->bmp.height = 0;
	//wrapbmp_free(&masterinfo->wrapbmp);
	//wrapbmp_init(&masterinfo->wrapbmp, k2settings->dst_color);
	/* Init new source bitmap */
	region = &_region;
	bmpregion_init(region);
	masterinfo_new_source_page_init(masterinfo, k2settings, src, srcgrey, NULL,
			region, k2settings->src_rot, NULL, NULL, 1, NULL);
	printf("source page (%d,%d) - (%d,%d)\n",region->c1,region->r1,region->c2,region->r2);
	printf("source page bgcolor %d\n", region->bgcolor);
	bmpregion_trim_margins(region,k2settings,0xf);
	margin = kctx->margin*k2settings->dst_dpi;
	/*
	 * Suppose when page is zoomed to k level at fit to content width zoom mode,
	 * the content width is a, the device screen width is w,
	 * and the request margin size is m, x pixels are added as page margin.
	 * Then the following equations should be satisified:
	 * 1. k*(a + 2x) = w
	 * 2. 2*x*k = m
	 * which should be solved to x = m*a/(w-m)/2
	*/
	margin = margin*(region->c2 - region->c1)/(kctx->dev_width - margin)/2;

	kctx->bbox.x0 = (float)region->c1 - margin;
	kctx->bbox.y0 = (float)region->r1 - margin;
	kctx->bbox.x1 = (float)region->c2 + margin;
	kctx->bbox.y1 = (float)region->r2 + margin;

	bmp_free(src);
	bmp_free(srcgrey);
	bmpregion_free(region);
	masterinfo_free(masterinfo,k2settings);
}
Ejemplo n.º 2
0
void k2pdfopt_crop_bmp(KOPTContext *kctx) {
	static char *funcname="k2pdfopt_crop_bmp";
	K2PDFOPT_SETTINGS _k2settings, *k2settings;
	MASTERINFO _masterinfo, *masterinfo;
	WILLUSBITMAP _srcgrey, *srcgrey;
	WILLUSBITMAP *src;
	BMPREGION _region, *region;
	int *colcount,*rowcount;
	int i,j;
	float margin;

	src = &kctx->src;
	srcgrey = &_srcgrey;
	bmp_init(srcgrey);

	k2settings = &_k2settings;
	masterinfo = &_masterinfo;
	/* Initialize settings */
	k2pdfopt_settings_init_from_koptcontext(k2settings, kctx);
	k2pdfopt_settings_sanity_check(k2settings);
	/* Init master output structure */
	masterinfo_init(masterinfo, k2settings);
	bmp_init(&masterinfo->bmp);
	masterinfo->bmp.width = 0;
	masterinfo->bmp.height = 0;
	//wrapbmp_free(&masterinfo->wrapbmp);
	//wrapbmp_init(&masterinfo->wrapbmp, k2settings->dst_color);
	/* Init new source bitmap */
	region = &_region;
	bmpregion_init(region);
	masterinfo_new_source_page_init(masterinfo, k2settings, src, srcgrey, NULL,
			region, k2settings->src_rot, NULL, NULL, 1, NULL);
	printf("source page (%d,%d) - (%d,%d)\n",region->c1,region->r1,region->c2,region->r2);
	printf("source page bgcolor %d\n", region->bgcolor);
	bmpregion_trim_margins(region,k2settings,0xf);
	margin = k2settings->dst_mar*k2settings->dst_dpi+.5;
	kctx->bbox.x0 = (float)region->c1 - margin;
	kctx->bbox.y0 = (float)region->r1 - margin;
	kctx->bbox.x1 = (float)region->c2 + margin;
	kctx->bbox.y1 = (float)region->r2 + margin;

	bmp_free(src);
	bmp_free(srcgrey);
	bmpregion_free(region);
	masterinfo_free(masterinfo,k2settings);
}