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 ip_cleanup_quant_opts(aTHX_ &quant);
87 if(GIMME_V == G_ARRAY) {
88 rimg = i_readgif_wiol(ig,&colour_table,&colours);
90 /* don't waste time with colours if they aren't wanted */
91 rimg = i_readgif_wiol(ig,NULL,NULL);
94 if (colour_table == NULL) {
97 sv_setref_pv(r, "Imager::ImgRaw", (void*)rimg);
100 /* the following creates an [[r,g,b], [r, g, b], [r, g, b]...] */
101 /* I don't know if I have the reference counts right or not :( */
102 /* Neither do I :-) */
103 /* No Idea here either */
106 av_extend(ct, colours);
107 for(q=0; q<colours; q++) {
109 temp[w]=sv_2mortal(newSViv(colour_table[q*3 + w]));
110 av_store(ct, q, (SV*)newRV_noinc((SV*)av_make(3, temp)));
112 myfree(colour_table);
116 sv_setref_pv(r, "Imager::ImgRaw", (void*)rimg);
118 PUSHs(newRV_noinc((SV*)ct));
122 i_readgif_single_wiol(ig, page=0)
127 i_readgif_multi_wiol(ig)
134 imgs = i_readgif_multi_wiol(ig, &count);
137 for (i = 0; i < count; ++i) {
138 SV *sv = sv_newmortal();
139 sv_setref_pv(sv, "Imager::ImgRaw", (void *)imgs[i]);
147 PERL_INITIALIZE_IMAGER_CALLBACKS;
148 PERL_INITIALIZE_IMAGER_PERL_CALLBACKS;