1 #define PERL_NO_GET_CONTEXT
13 DEFINE_IMAGER_CALLBACKS;
14 DEFINE_IMAGER_PERL_CALLBACKS;
16 MODULE = Imager::File::GIF PACKAGE = Imager::File::GIF
22 i_writegif_wiol(ig, opts,...)
32 croak("Usage: i_writegif_wiol(IO,hashref, images...)");
33 if (!SvROK(ST(1)) || ! SvTYPE(SvRV(ST(1))))
34 croak("i_writegif_callback: Second argument must be a hash ref");
35 hv = (HV *)SvRV(ST(1));
36 memset(&quant, 0, sizeof(quant));
39 quant.transp = tr_threshold;
40 quant.tr_threshold = 127;
41 ip_handle_quant_opts(aTHX_ &quant, hv);
42 img_count = items - 2;
48 imgs = mymalloc(sizeof(i_img *) * img_count);
49 for (i = 0; i < img_count; ++i) {
52 if (SvROK(sv) && sv_derived_from(sv, "Imager::ImgRaw")) {
53 imgs[i] = INT2PTR(i_img *, SvIV((SV*)SvRV(sv)));
61 RETVAL = i_writegif_wiol(ig, &quant, imgs, img_count);
65 ip_copy_colors_back(aTHX_ hv, &quant);
68 ST(0) = sv_newmortal();
69 if (RETVAL == 0) ST(0)=&PL_sv_undef;
70 else sv_setiv(ST(0), (IV)RETVAL);
71 ip_cleanup_quant_opts(aTHX_ &quant);
88 if(GIMME_V == G_ARRAY) {
89 rimg = i_readgif_wiol(ig,&colour_table,&colours);
91 /* don't waste time with colours if they aren't wanted */
92 rimg = i_readgif_wiol(ig,NULL,NULL);
95 if (colour_table == NULL) {
98 sv_setref_pv(r, "Imager::ImgRaw", (void*)rimg);
101 /* the following creates an [[r,g,b], [r, g, b], [r, g, b]...] */
102 /* I don't know if I have the reference counts right or not :( */
103 /* Neither do I :-) */
104 /* No Idea here either */
107 av_extend(ct, colours);
108 for(q=0; q<colours; q++) {
110 temp[w]=sv_2mortal(newSViv(colour_table[q*3 + w]));
111 av_store(ct, q, (SV*)newRV_noinc((SV*)av_make(3, temp)));
113 myfree(colour_table);
117 sv_setref_pv(r, "Imager::ImgRaw", (void*)rimg);
119 PUSHs(newRV_noinc((SV*)ct));
123 i_readgif_single_wiol(ig, page=0)
128 i_readgif_multi_wiol(ig)
135 imgs = i_readgif_multi_wiol(ig, &count);
138 for (i = 0; i < count; ++i) {
139 SV *sv = sv_newmortal();
140 sv_setref_pv(sv, "Imager::ImgRaw", (void *)imgs[i]);
148 PERL_INITIALIZE_IMAGER_CALLBACKS;
149 PERL_INITIALIZE_IMAGER_PERL_CALLBACKS;