[q-lang-cvs] q/modules/magick magick.c,1.27,1.28 magick.q,1.25,1.26
Brought to you by:
agraef
From: <ag...@us...> - 2003-12-30 20:30:02
|
Update of /cvsroot/q-lang/q/modules/magick In directory sc8-pr-cvs1:/tmp/cvs-serv16794 Modified Files: magick.c magick.q Log Message: added painting ops Index: magick.c =================================================================== RCS file: /cvsroot/q-lang/q/modules/magick/magick.c,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -d -r1.27 -r1.28 *** magick.c 30 Dec 2003 13:53:03 -0000 1.27 --- magick.c 30 Dec 2003 20:29:58 -0000 1.28 *************** *** 305,309 **** { Image *img = (Image*)ptr; ! if (img->client_data) free(img->client_data); DestroyImage(img); } --- 305,313 ---- { Image *img = (Image*)ptr; ! if (img->client_data) { ! ImageData *data = (ImageData*)img->client_data; ! if (data->draw_info) DestroyDrawInfo(data->draw_info); ! free(img->client_data); ! } DestroyImage(img); } *************** *** 2381,2384 **** --- 2385,2502 ---- else return __FAIL; + } else + return __FAIL; + } + + FUNCTION(magick,color_flood_fill,argc,argv) + { + Image *img; + int n; + expr *xv; + long x, y; + bstr_t *m1, *m2 = NULL; + if (argc == 4 && isobj(argv[0], type(Image), (void**)&img) && + istuple(argv[1], &n, &xv) && n == 2 && + isint(xv[0], &x) && isint(xv[1], &y) && + x >= 0 && x < img->columns && y >= 0 && y < img->rows && + isobj(argv[2], type(ByteStr), (void**)&m1) && m1->size == 8 && + (isvoid(argv[3]) || + isobj(argv[3], type(ByteStr), (void**)&m2) && m2->size == 8)) { + int res; + DrawInfo *draw_info = CloneDrawInfo(NULL, NULL); + PixelPacket fill, target; + if (!draw_info) return __ERROR; + set_pixels(&fill, m1->v, 1, 1); + draw_info->fill = fill; + if (m2) + set_pixels(&target, m2->v, 1, 1); + else { + target = AcquireOnePixel(img, x, y, &exception); + if (check_exception(&exception)) { + DestroyDrawInfo(draw_info); + return mkapp(mksym(sym(magick_error)), mkstr(strdup(msg))); + } + } + res = ColorFloodfillImage(img, draw_info, target, x, y, + m2?FillToBorderMethod:FloodfillMethod); + DestroyDrawInfo(draw_info); + if (!res) + return __FAIL; + else + return mkvoid; + } else + return __FAIL; + } + + FUNCTION(magick,matte_flood_fill,argc,argv) + { + Image *img; + int n; + expr *xv; + long x, y; + unsigned long opacity; + bstr_t *m2 = NULL; + if (argc == 4 && isobj(argv[0], type(Image), (void**)&img) && + istuple(argv[1], &n, &xv) && n == 2 && + isint(xv[0], &x) && isint(xv[1], &y) && + x >= 0 && x < img->columns && y >= 0 && y < img->rows && + isuint(argv[2], &opacity) && opacity <= 0xffff && + (isvoid(argv[3]) || + isobj(argv[3], type(ByteStr), (void**)&m2) && m2->size == 8)) { + int res; + PixelPacket target; + if (m2) + set_pixels(&target, m2->v, 1, 1); + else { + target = AcquireOnePixel(img, x, y, &exception); + if (check_exception(&exception)) + return mkapp(mksym(sym(magick_error)), mkstr(strdup(msg))); + } + res = MatteFloodfillImage(img, target, opacity, x, y, + m2?FillToBorderMethod:FloodfillMethod); + if (!res) + return __FAIL; + else + return mkvoid; + } else + return __FAIL; + } + + FUNCTION(magick,opaque,argc,argv) + { + Image *img; + bstr_t *m1, *m2; + if (argc == 3 && isobj(argv[0], type(Image), (void**)&img) && + isobj(argv[1], type(ByteStr), (void**)&m1) && m1->size == 8 && + isobj(argv[2], type(ByteStr), (void**)&m2) && m2->size == 8) { + int res; + PixelPacket target, fill; + set_pixels(&target, m1->v, 1, 1); + set_pixels(&fill, m2->v, 1, 1); + res = OpaqueImage(img, target, fill); + if (!res) + return __FAIL; + else + return mkvoid; + } else + return __FAIL; + } + + FUNCTION(magick,transparent,argc,argv) + { + Image *img; + bstr_t *m1; + unsigned long opacity; + if (argc == 3 && isobj(argv[0], type(Image), (void**)&img) && + isobj(argv[1], type(ByteStr), (void**)&m1) && m1->size == 8 && + isuint(argv[2], &opacity) && opacity <= 0xffff) { + int res; + PixelPacket target; + set_pixels(&target, m1->v, 1, 1); + res = TransparentImage(img, target, opacity); + if (!res) + return __FAIL; + else + return mkvoid; } else return __FAIL; Index: magick.q =================================================================== RCS file: /cvsroot/q-lang/q/modules/magick/magick.q,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -d -r1.25 -r1.26 *** magick.q 30 Dec 2003 12:00:22 -0000 1.25 --- magick.q 30 Dec 2003 20:29:58 -0000 1.26 *************** *** 484,492 **** public extern button IMG DIM RAISE; // BANG! ! /* Annotations. */ ! // TODO ! /* Drawing and painting. */ // TODO --- 484,496 ---- public extern button IMG DIM RAISE; // BANG! ! /* Painting. */ ! public extern color_flood_fill IMG P FILL BORDER; // BANG! ! public extern matte_flood_fill IMG P OPACITY BORDER; // BANG! ! public extern opaque IMG PIXEL FILL; // BANG! ! public extern transparent IMG PIXEL OPACITY; // BANG! ! ! /* Drawing. */ // TODO |