[q-lang-cvs] q/modules/magick magick.c,1.14,1.15 magick.q,1.12,1.13
Brought to you by:
agraef
From: <ag...@us...> - 2003-12-28 20:20:37
|
Update of /cvsroot/q-lang/q/modules/magick In directory sc8-pr-cvs1:/tmp/cvs-serv31863 Modified Files: magick.c magick.q Log Message: added effect operations; todo: threshold ops Index: magick.c =================================================================== RCS file: /cvsroot/q-lang/q/modules/magick/magick.c,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** magick.c 28 Dec 2003 18:47:19 -0000 1.14 --- magick.c 28 Dec 2003 20:20:34 -0000 1.15 *************** *** 140,144 **** if (argc != 0) return __FAIL; return mktuplel ! (31, mkuint(OverCompositeOp), mkuint(InCompositeOp), --- 140,144 ---- if (argc != 0) return __FAIL; return mktuplel ! (37, mkuint(OverCompositeOp), mkuint(InCompositeOp), *************** *** 171,175 **** mkuint(LuminizeCompositeOp), mkuint(ScreenCompositeOp), ! mkuint(OverlayCompositeOp)); } --- 171,184 ---- mkuint(LuminizeCompositeOp), mkuint(ScreenCompositeOp), ! mkuint(OverlayCompositeOp), ! ! mkuint(UniformNoise), ! mkuint(GaussianNoise), ! mkuint(MultiplicativeGaussianNoise), ! mkuint(ImpulseNoise), ! mkuint(LaplacianNoise), ! mkuint(PoissonNoise) ! ! ); } *************** *** 1285,1289 **** expr *xv; if (argc == 4 && isobj(argv[0], type(Image), (void**)&img) && ! isuint(argv[1], &op) && op > 0 && op <= OverlayCompositeOp && isobj(argv[2], type(Image), (void**)&img2) && istuple(argv[3], &n, &xv) && --- 1294,1299 ---- expr *xv; if (argc == 4 && isobj(argv[0], type(Image), (void**)&img) && ! isuint(argv[1], &op) && ! op != UndefinedCompositeOp && op <= OverlayCompositeOp && isobj(argv[2], type(Image), (void**)&img2) && istuple(argv[3], &n, &xv) && *************** *** 1380,1383 **** --- 1390,1637 ---- else return mkvoid; + } else + return __FAIL; + } + + FUNCTION(magick,add_noise,argc,argv) + { + Image *img; + unsigned long noise; + if (argc == 2 && isobj(argv[0], type(Image), (void**)&img) && + isuint(argv[1], &noise) && noise <= PoissonNoise) { + img = AddNoiseImage(img, noise, &exception); + if (check_exception(&exception)) + return mkapp(mksym(sym(magick_error)), mkstr(strdup(msg))); + else if (!img) + return __FAIL; + else + return mkobj(type(Image), img); + } else + return __FAIL; + } + + FUNCTION(magick,blur,argc,argv) + { + Image *img; + double radius, sigma; + if (argc == 3 && isobj(argv[0], type(Image), (void**)&img) && + (isfloat(argv[1], &radius) || ismpz_float(argv[1], &radius)) && + (isfloat(argv[2], &sigma) || ismpz_float(argv[2], &sigma))) { + img = BlurImage(img, radius, sigma, &exception); + if (check_exception(&exception)) + return mkapp(mksym(sym(magick_error)), mkstr(strdup(msg))); + else if (!img) + return __FAIL; + else + return mkobj(type(Image), img); + } else + return __FAIL; + } + + FUNCTION(magick,despeckle,argc,argv) + { + Image *img; + if (argc == 1 && isobj(argv[0], type(Image), (void**)&img)) { + img = DespeckleImage(img, &exception); + if (check_exception(&exception)) + return mkapp(mksym(sym(magick_error)), mkstr(strdup(msg))); + else if (!img) + return __FAIL; + else + return mkobj(type(Image), img); + } else + return __FAIL; + } + + FUNCTION(magick,edge,argc,argv) + { + Image *img; + double radius; + if (argc == 2 && isobj(argv[0], type(Image), (void**)&img) && + (isfloat(argv[1], &radius) || ismpz_float(argv[1], &radius))) { + img = EdgeImage(img, radius, &exception); + if (check_exception(&exception)) + return mkapp(mksym(sym(magick_error)), mkstr(strdup(msg))); + else if (!img) + return __FAIL; + else + return mkobj(type(Image), img); + } else + return __FAIL; + } + + FUNCTION(magick,emboss,argc,argv) + { + Image *img; + double radius, sigma; + if (argc == 3 && isobj(argv[0], type(Image), (void**)&img) && + (isfloat(argv[1], &radius) || ismpz_float(argv[1], &radius)) && + (isfloat(argv[2], &sigma) || ismpz_float(argv[2], &sigma))) { + img = EmbossImage(img, radius, sigma, &exception); + if (check_exception(&exception)) + return mkapp(mksym(sym(magick_error)), mkstr(strdup(msg))); + else if (!img) + return __FAIL; + else + return mkobj(type(Image), img); + } else + return __FAIL; + } + + FUNCTION(magick,enhance,argc,argv) + { + Image *img; + if (argc == 1 && isobj(argv[0], type(Image), (void**)&img)) { + img = EnhanceImage(img, &exception); + if (check_exception(&exception)) + return mkapp(mksym(sym(magick_error)), mkstr(strdup(msg))); + else if (!img) + return __FAIL; + else + return mkobj(type(Image), img); + } else + return __FAIL; + } + + FUNCTION(magick,gaussian_blur,argc,argv) + { + Image *img; + double radius, sigma; + if (argc == 3 && isobj(argv[0], type(Image), (void**)&img) && + (isfloat(argv[1], &radius) || ismpz_float(argv[1], &radius)) && + (isfloat(argv[2], &sigma) || ismpz_float(argv[2], &sigma))) { + img = GaussianBlurImage(img, radius, sigma, &exception); + if (check_exception(&exception)) + return mkapp(mksym(sym(magick_error)), mkstr(strdup(msg))); + else if (!img) + return __FAIL; + else + return mkobj(type(Image), img); + } else + return __FAIL; + } + + FUNCTION(magick,median_filter,argc,argv) + { + Image *img; + double radius; + if (argc == 2 && isobj(argv[0], type(Image), (void**)&img) && + (isfloat(argv[1], &radius) || ismpz_float(argv[1], &radius))) { + img = MedianFilterImage(img, radius, &exception); + if (check_exception(&exception)) + return mkapp(mksym(sym(magick_error)), mkstr(strdup(msg))); + else if (!img) + return __FAIL; + else + return mkobj(type(Image), img); + } else + return __FAIL; + } + + FUNCTION(magick,motion_blur,argc,argv) + { + Image *img; + double radius, sigma, angle; + if (argc == 4 && isobj(argv[0], type(Image), (void**)&img) && + (isfloat(argv[1], &radius) || ismpz_float(argv[1], &radius)) && + (isfloat(argv[2], &sigma) || ismpz_float(argv[2], &sigma)) && + (isfloat(argv[3], &angle) || ismpz_float(argv[3], &angle))) { + img = MotionBlurImage(img, radius, sigma, angle, &exception); + if (check_exception(&exception)) + return mkapp(mksym(sym(magick_error)), mkstr(strdup(msg))); + else if (!img) + return __FAIL; + else + return mkobj(type(Image), img); + } else + return __FAIL; + } + + FUNCTION(magick,reduce_noise,argc,argv) + { + Image *img; + double radius; + if (argc == 2 && isobj(argv[0], type(Image), (void**)&img) && + (isfloat(argv[1], &radius) || ismpz_float(argv[1], &radius))) { + img = ReduceNoiseImage(img, radius, &exception); + if (check_exception(&exception)) + return mkapp(mksym(sym(magick_error)), mkstr(strdup(msg))); + else if (!img) + return __FAIL; + else + return mkobj(type(Image), img); + } else + return __FAIL; + } + + FUNCTION(magick,shade,argc,argv) + { + Image *img; + double azimuth, elevation; + if (argc == 3 && isobj(argv[0], type(Image), (void**)&img) && + (isfloat(argv[1], &azimuth) || ismpz_float(argv[1], &azimuth)) && + (isfloat(argv[2], &elevation) || ismpz_float(argv[2], &elevation))) { + img = ShadeImage(img, 0, azimuth, elevation, &exception); + if (check_exception(&exception)) + return mkapp(mksym(sym(magick_error)), mkstr(strdup(msg))); + else if (!img) + return __FAIL; + else + return mkobj(type(Image), img); + } else + return __FAIL; + } + + FUNCTION(magick,sharpen,argc,argv) + { + Image *img; + double radius, sigma; + if (argc == 3 && isobj(argv[0], type(Image), (void**)&img) && + (isfloat(argv[1], &radius) || ismpz_float(argv[1], &radius)) && + (isfloat(argv[2], &sigma) || ismpz_float(argv[2], &sigma))) { + img = SharpenImage(img, radius, sigma, &exception); + if (check_exception(&exception)) + return mkapp(mksym(sym(magick_error)), mkstr(strdup(msg))); + else if (!img) + return __FAIL; + else + return mkobj(type(Image), img); + } else + return __FAIL; + } + + FUNCTION(magick,spread,argc,argv) + { + Image *img; + double radius; + if (argc == 2 && isobj(argv[0], type(Image), (void**)&img) && + (isfloat(argv[1], &radius) || ismpz_float(argv[1], &radius))) { + img = SpreadImage(img, radius, &exception); + if (check_exception(&exception)) + return mkapp(mksym(sym(magick_error)), mkstr(strdup(msg))); + else if (!img) + return __FAIL; + else + return mkobj(type(Image), img); + } else + return __FAIL; + } + + FUNCTION(magick,unsharp_mask,argc,argv) + { + Image *img; + double radius, sigma, amount, threshold; + if (argc == 5 && isobj(argv[0], type(Image), (void**)&img) && + (isfloat(argv[1], &radius) || ismpz_float(argv[1], &radius)) && + (isfloat(argv[2], &sigma) || ismpz_float(argv[2], &sigma)) && + (isfloat(argv[3], &amount) || ismpz_float(argv[3], &amount)) && + (isfloat(argv[3], &threshold) || ismpz_float(argv[3], &threshold))) { + img = UnsharpMaskImage(img, radius, sigma, amount, threshold, &exception); + if (check_exception(&exception)) + return mkapp(mksym(sym(magick_error)), mkstr(strdup(msg))); + else if (!img) + return __FAIL; + else + return mkobj(type(Image), img); } else return __FAIL; Index: magick.q =================================================================== RCS file: /cvsroot/q-lang/q/modules/magick/magick.q,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** magick.q 28 Dec 2003 18:47:19 -0000 1.12 --- magick.q 28 Dec 2003 20:20:34 -0000 1.13 *************** *** 40,51 **** COPYGREEN_OP, COPYBLUE_OP, COPYOPACITY_OP, CLEAR_OP, DISSOLVE_OP, DISPLACE_OP, MODULATE_OP, THRESHOLD_OP, NO_OP, DARKEN_OP, LIGHTEN_OP, ! HUE_OP, SATURATE_OP, COLORIZE_OP, LUMINIZE_OP, SCREEN_OP, OVERLAY_OP; private extern magick_vars; def (OVER_OP, IN_OP, OUT_OP, ATOP_OP, XOR_OP, PLUS_OP, MINUS_OP, ADD_OP, ! SUBTRACT_OP, DIFFERENCE_OP, MULTIPLY_OP, BUMPMAP_OP, COPY_OP, COPYRED_OP, ! COPYGREEN_OP, COPYBLUE_OP, COPYOPACITY_OP, CLEAR_OP, DISSOLVE_OP, ! DISPLACE_OP, MODULATE_OP, THRESHOLD_OP, NO_OP, DARKEN_OP, LIGHTEN_OP, ! HUE_OP, SATURATE_OP, COLORIZE_OP, LUMINIZE_OP, SCREEN_OP, OVERLAY_OP) = magick_vars; --- 40,57 ---- COPYGREEN_OP, COPYBLUE_OP, COPYOPACITY_OP, CLEAR_OP, DISSOLVE_OP, DISPLACE_OP, MODULATE_OP, THRESHOLD_OP, NO_OP, DARKEN_OP, LIGHTEN_OP, ! HUE_OP, SATURATE_OP, COLORIZE_OP, LUMINIZE_OP, SCREEN_OP, OVERLAY_OP, ! ! // noise types for add_noise function ! UNIFORM_NOISE, GAUSSIAN_NOISE, MULTIPLICATIVE_GAUSSIAN_NOISE, ! IMPULSE_NOISE, LAPLACIAN_NOISE, POISSON_NOISE; private extern magick_vars; def (OVER_OP, IN_OP, OUT_OP, ATOP_OP, XOR_OP, PLUS_OP, MINUS_OP, ADD_OP, ! SUBTRACT_OP, DIFFERENCE_OP, MULTIPLY_OP, BUMPMAP_OP, COPY_OP, COPYRED_OP, ! COPYGREEN_OP, COPYBLUE_OP, COPYOPACITY_OP, CLEAR_OP, DISSOLVE_OP, ! DISPLACE_OP, MODULATE_OP, THRESHOLD_OP, NO_OP, DARKEN_OP, LIGHTEN_OP, ! HUE_OP, SATURATE_OP, COLORIZE_OP, LUMINIZE_OP, SCREEN_OP, OVERLAY_OP, ! UNIFORM_NOISE, GAUSSIAN_NOISE, MULTIPLICATIVE_GAUSSIAN_NOISE, ! IMPULSE_NOISE, LAPLACIAN_NOISE, POISSON_NOISE) = magick_vars; *************** *** 276,279 **** --- 282,286 ---- public extern chop IMG P DIM, crop IMG P DIM, roll IMG P, shave IMG DIM; + // TODO: add filter type argument to resize operation public extern magnify IMG, minify IMG; public extern resize IMG DIM BLUR, sample IMG DIM, scale IMG DIM; *************** *** 314,339 **** // TODO - // public extern gaussian_noise IMG; - // public extern impulse_noise IMG; - // public extern laplacian_noise IMG; - // public extern multiplicative_noise IMG; - // public extern poisson_noise IMG; - // public extern uniform_noise IMG; - // public extern adaptive_threshold IMG DIM OFFS; ! // public extern blur IMG RADIUS SIGMA; ! // public extern despeckle IMG; ! // public extern edge IMG RADIUS; ! // public extern emboss IMG RADIUS SIGMA; ! // public extern enhance IMG; ! // public extern gaussian_blur IMG RADIUS SIGMA; ! // public extern median_filter IMG RADIUS; ! // public extern motion_blur IMG RADIUS SIGMA ANGLE; ! // public extern reduce_noise IMG RADIUS; ! // public extern shade IMG GRAY AZIMUTH ELEVATION; ! // public extern sharpen IMG RADIUS SIGMA; ! // public extern spread IMG RADIUS; // public extern threshold IMG THRESHOLD; ! // public extern unsharp_mask IMG RADIUS SIGMA AMOUNT THRESHOLD; /* Special effects. */ --- 321,340 ---- // TODO // public extern adaptive_threshold IMG DIM OFFS; ! public extern add_noise IMG NOISE; ! public extern blur IMG RADIUS SIGMA; ! public extern despeckle IMG; ! public extern edge IMG RADIUS; ! public extern emboss IMG RADIUS SIGMA; ! public extern enhance IMG; ! public extern gaussian_blur IMG RADIUS SIGMA; ! public extern median_filter IMG RADIUS; ! public extern motion_blur IMG RADIUS SIGMA ANGLE; ! public extern reduce_noise IMG RADIUS; ! public extern shade IMG AZIMUTH ELEVATION; ! public extern sharpen IMG RADIUS SIGMA; ! public extern spread IMG RADIUS; // public extern threshold IMG THRESHOLD; ! public extern unsharp_mask IMG RADIUS SIGMA AMOUNT THRESHOLD; /* Special effects. */ |