void *_animateInImageMagickWindow (void * ptr) { SEXP x; Image * images; ImageInfo * image_info; x = (SEXP) ptr; THREAD_ON = 1; images = sexp2Magick (x); image_info = CloneImageInfo ( (ImageInfo *)NULL ); strcpy (image_info->filename, "\0"); AnimateImages (image_info, images); THREAD_ON = 0; images = DestroyImageList (images); image_info = DestroyImageInfo (image_info); return NULL; }
VALUE ImageList_animate(int argc, VALUE *argv, VALUE self) { Image *images; Info *info; VALUE info_obj; if (argc > 1) { rb_raise(rb_eArgError, "wrong number of arguments (%d for 0 or 1)", argc); } // Create a new Info object to use with this call info_obj = rm_info_new(); // Convert the images array to an images sequence. images = images_from_imagelist(self); if (argc == 1) { Image *img; unsigned int delay; delay = NUM2UINT(argv[0]); for (img = images; img; img = GetNextImageInList(img)) { img->delay = delay; } } Data_Get_Struct(info_obj, Info, info); (void) AnimateImages(info, images); rm_check_image_exception(images, RetainOnError); rm_split(images); RB_GC_GUARD(info_obj); return self; }