www.pudn.com > imgproc.zip > IMGFIT.C
#include#include #include #include #define _SCREEN_VAR #ifndef JPEG_READY #define JPEG_READY #endif #include "e:\\wimg\\h\\image.h" #include "e:\\wimg\\h\\imgfile.h" #include "e:\\wimg\\h\\imgproc.h" #include "e:\\wimg\\h\\imgdraw.h" imagedes img; imagedes mid; imagedes des; void __busy(int percent) { if(percent > 100) printf("Busy \b\b\b\b\b"); else if(percent<= 0) printf("Idle \b\b\b\b\b"); else printf("%3d%% \b\b\b\b\b", percent); } int main(int argc, char **argv) { int tmp; char ifname[257]; char ofname[257]; char bfname[257]; int xdes, ydes; double xzoom, yzoom, zoom; int br=0, bg=0, bb=0; int xsize, ysize; int xstart, ystart; int desxs, desys; BOOL fit = FALSE, full = FALSE; int shadow=0; fputs("Image File Fit In Version 1.1a\n" "Released 05/25/1999, Yang YuDong.\n" " yangyd@yahoo.com\n" " http://pcvideo.yeah.net\n", stderr); ifname[0]=0; ofname[0]=0; bfname[0]=0; xdes = 704; ydes = 576; xsize = 0; ysize = 0; for(tmp=1; tmp 255 || bg > 255 || bb >255) { fputs("Error: invalid back ground color.\n", stderr); return 0; } mid.alloc = des.alloc = img.alloc = FALSE; if(!Loadfile_on_extension(ifname, &img, xsize, ysize)) { fprintf(stderr, "Error: unable to load image '%s'\n", ifname); return 0; } if(xdes == img.xsize && ydes == img.ysize) { if(!*ofname || !strcmp(ofname, ifname)) { // src == des printf("Not changed : %s\n", ifname); return 0; } else if(!Savefile_on_extension(ofname, img)) { FreePicture(&img); fprintf(stderr, "Error: unable to save image '%s'\n", ofname); return 0; } FreePicture(&img); printf("Done %s\n", ofname); return 1; } if(!AllocPicture(&des, xdes, ydes, img.imagetype)) { fprintf(stderr, "Error: failed to alloc destination buffer\n"); return 0; } if(!*ofname) strcpy(ofname, ifname); xsize = img.xsize; ysize = img.ysize; zoom = 1.0; if(fit) { xzoom = (double)xdes/(double)img.xsize; yzoom = (double)ydes/(double)img.ysize; if(xzoom > yzoom) { ysize = ydes; xsize = (int)(img.xsize*yzoom); zoom = yzoom; } else { xsize = xdes; ysize = (int)(img.ysize*xzoom); zoom = xzoom; } } if(full) { xzoom = (double)xdes/(double)img.xsize; yzoom = (double)ydes/(double)img.ysize; if(xzoom > yzoom) { xsize = xdes; ysize = (int)(img.ysize*xzoom); zoom = xzoom; } else { ysize = ydes; xsize = (int)(img.xsize*yzoom); zoom = yzoom; } } des.load = TRUE; if(img.imagetype == Color256) memcpy(des.pal, img.pal, 768); if(!full) { if(img.imagetype == TrueColor) img_draw_color(br, bg, bb); else img_draw_color(img_draw_fitcolor(img, br, bg, bb), 0, 0); img_draw_mode(IDRAW_OVERWRITE); img_draw_rect(des, 0, 0, xdes, ydes, TRUE); } if(bfname[0] && Loadfile_on_extension(bfname, &mid, 0, 0)) { // has backgnd pic if(mid.xsize >= xdes) { xstart = (mid.xsize-xdes)/2; desxs = 0; } else { xstart = 0; desxs = (xdes-mid.xsize)/2; } if(mid.ysize >= ydes) { ystart = (mid.ysize-ydes)/2; desys = 0; } else { ystart = 0; desys = (ydes-mid.ysize)/2; } img_bitbilt(des, mid, xstart, ystart, xdes, ydes, desxs, desys); } if(xsize >= xdes) { xstart = (xsize-xdes)/2; desxs = 0; } else { xstart = 0; desxs = (xdes-xsize)/2; } if(ysize >= ydes) { ystart = (ysize-ydes)/2; desys = 0; } else { ystart = 0; desys = (ydes-ysize)/2; } if(shadow) { img_draw_shadow(des, desxs+shadow, desys+shadow, xsize, ysize, abs(shadow)*2+1); } if(zoom == 1.0) { // no zoom is needed if(!img_bitbilt(des, img, xstart, ystart, xsize, ysize, desxs, desys)) { FreePicture(&des); FreePicture(&img); fprintf(stderr, "Error: failed to do fit\n"); return 0; } } else { if(!image_resample(&mid, img, xsize, ysize, Interp_fine)) { FreePicture(&des); FreePicture(&img); fprintf(stderr, "Error: failed to do fit\n"); return 0; } if(!img_bitbilt(des, mid, xstart, ystart, xsize, ysize, desxs, desys)) { FreePicture(&des); FreePicture(&img); fprintf(stderr, "Error: failed to do fit\n"); return 0; } FreePicture(&mid); } if(!Savefile_on_extension(ofname, des)) { FreePicture(&des); FreePicture(&img); fprintf(stderr, "Error: unable to save image '%s'\n", ofname); return 0; } FreePicture(&des); FreePicture(&img); printf("Done %s\n", ofname); return 1; }