-undef_int
-i_writegif_gen(fd, ...)
- int fd
- PROTOTYPE: $$@
- PREINIT:
- i_quantize quant;
- i_img **imgs = NULL;
- int img_count;
- int i;
- HV *hv;
- CODE:
- if (items < 3)
- croak("Usage: i_writegif_gen(fd,hashref, images...)");
- if (!SvROK(ST(1)) || ! SvTYPE(SvRV(ST(1))))
- croak("i_writegif_gen: Second argument must be a hash ref");
- hv = (HV *)SvRV(ST(1));
- memset(&quant, 0, sizeof(quant));
- quant.mc_size = 256;
- handle_quant_opts(&quant, hv);
- img_count = items - 2;
- RETVAL = 1;
- if (img_count < 1) {
- RETVAL = 0;
- i_clear_error();
- i_push_error(0, "You need to specify images to save");
- }
- else {
- imgs = mymalloc(sizeof(i_img *) * img_count);
- for (i = 0; i < img_count; ++i) {
- SV *sv = ST(2+i);
- imgs[i] = NULL;
- if (SvROK(sv) && sv_derived_from(sv, "Imager::ImgRaw")) {
- imgs[i] = INT2PTR(i_img *, SvIV((SV*)SvRV(sv)));
- }
- else {
- i_clear_error();
- i_push_error(0, "Only images can be saved");
- RETVAL = 0;
- break;
- }
- }
- if (RETVAL) {
- RETVAL = i_writegif_gen(&quant, fd, imgs, img_count);
- }
- myfree(imgs);
- if (RETVAL) {
- copy_colors_back(hv, &quant);
- }
- }
- ST(0) = sv_newmortal();
- if (RETVAL == 0) ST(0)=&PL_sv_undef;
- else sv_setiv(ST(0), (IV)RETVAL);
- cleanup_quant_opts(&quant);
-
-
-undef_int
-i_writegif_callback(cb, maxbuffer,...)
- int maxbuffer;
- PREINIT:
- i_quantize quant;
- i_img **imgs = NULL;
- int img_count;
- int i;
- HV *hv;
- i_writer_data wd;
- CODE:
- if (items < 4)
- croak("Usage: i_writegif_callback(\\&callback,maxbuffer,hashref, images...)");
- if (!SvROK(ST(2)) || ! SvTYPE(SvRV(ST(2))))
- croak("i_writegif_callback: Second argument must be a hash ref");
- hv = (HV *)SvRV(ST(2));
- memset(&quant, 0, sizeof(quant));
- quant.mc_size = 256;
- handle_quant_opts(&quant, hv);
- img_count = items - 3;
- RETVAL = 1;
- if (img_count < 1) {
- RETVAL = 0;
- }
- else {
- imgs = mymalloc(sizeof(i_img *) * img_count);
- for (i = 0; i < img_count; ++i) {
- SV *sv = ST(3+i);
- imgs[i] = NULL;
- if (SvROK(sv) && sv_derived_from(sv, "Imager::ImgRaw")) {
- imgs[i] = INT2PTR(i_img *, SvIV((SV*)SvRV(sv)));
- }
- else {
- RETVAL = 0;
- break;
- }
- }
- if (RETVAL) {
- wd.sv = ST(0);
- RETVAL = i_writegif_callback(&quant, write_callback, (char *)&wd, maxbuffer, imgs, img_count);
- }
- myfree(imgs);
- if (RETVAL) {
- copy_colors_back(hv, &quant);
- }
- }
- ST(0) = sv_newmortal();
- if (RETVAL == 0) ST(0)=&PL_sv_undef;
- else sv_setiv(ST(0), (IV)RETVAL);
- cleanup_quant_opts(&quant);
-
-undef_int
-i_writegif_wiol(ig, opts,...)
- Imager::IO ig
- PREINIT:
- i_quantize quant;
- i_img **imgs = NULL;
- int img_count;
- int i;
- HV *hv;
- CODE:
- if (items < 3)
- croak("Usage: i_writegif_wiol(IO,hashref, images...)");
- if (!SvROK(ST(1)) || ! SvTYPE(SvRV(ST(1))))
- croak("i_writegif_callback: Second argument must be a hash ref");
- hv = (HV *)SvRV(ST(1));
- memset(&quant, 0, sizeof(quant));
- quant.mc_size = 256;
- handle_quant_opts(&quant, hv);
- img_count = items - 2;
- RETVAL = 1;
- if (img_count < 1) {
- RETVAL = 0;
- }
- else {
- imgs = mymalloc(sizeof(i_img *) * img_count);
- for (i = 0; i < img_count; ++i) {
- SV *sv = ST(2+i);
- imgs[i] = NULL;
- if (SvROK(sv) && sv_derived_from(sv, "Imager::ImgRaw")) {
- imgs[i] = INT2PTR(i_img *, SvIV((SV*)SvRV(sv)));
- }
- else {
- RETVAL = 0;
- break;
- }
- }
- if (RETVAL) {
- RETVAL = i_writegif_wiol(ig, &quant, imgs, img_count);
- }
- myfree(imgs);
- if (RETVAL) {
- copy_colors_back(hv, &quant);
- }
- }
- ST(0) = sv_newmortal();
- if (RETVAL == 0) ST(0)=&PL_sv_undef;
- else sv_setiv(ST(0), (IV)RETVAL);
- cleanup_quant_opts(&quant);
-
-void
-i_readgif(fd)
- int fd
- PREINIT:
- int* colour_table;
- int colours, q, w;
- i_img* rimg;
- SV* temp[3];
- AV* ct;
- SV* r;
- PPCODE:
- colour_table = NULL;
- colours = 0;
-
- if(GIMME_V == G_ARRAY) {
- rimg = i_readgif(fd,&colour_table,&colours);
- } else {
- /* don't waste time with colours if they aren't wanted */
- rimg = i_readgif(fd,NULL,NULL);
- }
-
- if (colour_table == NULL) {
- EXTEND(SP,1);
- r=sv_newmortal();
- sv_setref_pv(r, "Imager::ImgRaw", (void*)rimg);
- PUSHs(r);
- } else {
- /* the following creates an [[r,g,b], [r, g, b], [r, g, b]...] */
- /* I don't know if I have the reference counts right or not :( */
- /* Neither do I :-) */
- /* No Idea here either */
-
- ct=newAV();
- av_extend(ct, colours);
- for(q=0; q<colours; q++) {
- for(w=0; w<3; w++)
- temp[w]=sv_2mortal(newSViv(colour_table[q*3 + w]));
- av_store(ct, q, (SV*)newRV_noinc((SV*)av_make(3, temp)));
- }
- myfree(colour_table);
-
- EXTEND(SP,2);
- r = sv_newmortal();
- sv_setref_pv(r, "Imager::ImgRaw", (void*)rimg);
- PUSHs(r);
- PUSHs(newRV_noinc((SV*)ct));
- }
-
-void
-i_readgif_wiol(ig)
- Imager::IO ig
- PREINIT:
- int* colour_table;
- int colours, q, w;
- i_img* rimg;
- SV* temp[3];
- AV* ct;
- SV* r;
- PPCODE:
- colour_table = NULL;
- colours = 0;
-
- if(GIMME_V == G_ARRAY) {
- rimg = i_readgif_wiol(ig,&colour_table,&colours);
- } else {
- /* don't waste time with colours if they aren't wanted */
- rimg = i_readgif_wiol(ig,NULL,NULL);
- }
-
- if (colour_table == NULL) {
- EXTEND(SP,1);
- r=sv_newmortal();
- sv_setref_pv(r, "Imager::ImgRaw", (void*)rimg);
- PUSHs(r);
- } else {
- /* the following creates an [[r,g,b], [r, g, b], [r, g, b]...] */
- /* I don't know if I have the reference counts right or not :( */
- /* Neither do I :-) */
- /* No Idea here either */
-
- ct=newAV();
- av_extend(ct, colours);
- for(q=0; q<colours; q++) {
- for(w=0; w<3; w++)
- temp[w]=sv_2mortal(newSViv(colour_table[q*3 + w]));
- av_store(ct, q, (SV*)newRV_noinc((SV*)av_make(3, temp)));
- }
- myfree(colour_table);
-
- EXTEND(SP,2);
- r = sv_newmortal();
- sv_setref_pv(r, "Imager::ImgRaw", (void*)rimg);
- PUSHs(r);
- PUSHs(newRV_noinc((SV*)ct));
- }
-
-Imager::ImgRaw
-i_readgif_single_wiol(ig, page=0)
- Imager::IO ig
- int page
-
-void
-i_readgif_scalar(...)
- PROTOTYPE: $
- PREINIT:
- char* data;
- STRLEN length;
- int* colour_table;
- int colours, q, w;
- i_img* rimg;
- SV* temp[3];
- AV* ct;
- SV* r;
- PPCODE:
- data = (char *)SvPV(ST(0), length);
- colour_table=NULL;
- colours=0;
-
- if(GIMME_V == G_ARRAY) {
- rimg=i_readgif_scalar(data,length,&colour_table,&colours);
- } else {
- /* don't waste time with colours if they aren't wanted */
- rimg=i_readgif_scalar(data,length,NULL,NULL);
- }
-
- if (colour_table == NULL) {
- EXTEND(SP,1);
- r=sv_newmortal();
- sv_setref_pv(r, "Imager::ImgRaw", (void*)rimg);
- PUSHs(r);
- } else {
- /* the following creates an [[r,g,b], [r, g, b], [r, g, b]...] */
- /* I don't know if I have the reference counts right or not :( */
- /* Neither do I :-) */
- ct=newAV();
- av_extend(ct, colours);
- for(q=0; q<colours; q++) {
- for(w=0; w<3; w++)
- temp[w]=sv_2mortal(newSViv(colour_table[q*3 + w]));
- av_store(ct, q, (SV*)newRV_noinc((SV*)av_make(3, temp)));
- }
- myfree(colour_table);
-
- EXTEND(SP,2);
- r=sv_newmortal();
- sv_setref_pv(r, "Imager::ImgRaw", (void*)rimg);
- PUSHs(r);
- PUSHs(newRV_noinc((SV*)ct));
- }
-
-void
-i_readgif_callback(...)
- PROTOTYPE: &
- PREINIT:
- int* colour_table;
- int colours, q, w;
- i_img* rimg;
- SV* temp[3];
- AV* ct;
- SV* r;
- i_reader_data rd;
- PPCODE:
- rd.sv = ST(0);
- colour_table=NULL;
- colours=0;
-
- if(GIMME_V == G_ARRAY) {
- rimg=i_readgif_callback(read_callback, (char *)&rd,&colour_table,&colours);
- } else {
- /* don't waste time with colours if they aren't wanted */
- rimg=i_readgif_callback(read_callback, (char *)&rd,NULL,NULL);
- }
-
- if (colour_table == NULL) {
- EXTEND(SP,1);
- r=sv_newmortal();
- sv_setref_pv(r, "Imager::ImgRaw", (void*)rimg);
- PUSHs(r);
- } else {
- /* the following creates an [[r,g,b], [r, g, b], [r, g, b]...] */
- /* I don't know if I have the reference counts right or not :( */
- /* Neither do I :-) */
- /* Neither do I - maybe I'll move this somewhere */
- ct=newAV();
- av_extend(ct, colours);
- for(q=0; q<colours; q++) {
- for(w=0; w<3; w++)
- temp[w]=sv_2mortal(newSViv(colour_table[q*3 + w]));
- av_store(ct, q, (SV*)newRV_noinc((SV*)av_make(3, temp)));
- }
- myfree(colour_table);
-
- EXTEND(SP,2);
- r=sv_newmortal();
- sv_setref_pv(r, "Imager::ImgRaw", (void*)rimg);
- PUSHs(r);
- PUSHs(newRV_noinc((SV*)ct));
- }
-
-void
-i_readgif_multi(fd)
- int fd
- PREINIT:
- i_img **imgs;
- int count;
- int i;
- PPCODE:
- imgs = i_readgif_multi(fd, &count);
- if (imgs) {
- EXTEND(SP, count);
- for (i = 0; i < count; ++i) {
- SV *sv = sv_newmortal();
- sv_setref_pv(sv, "Imager::ImgRaw", (void *)imgs[i]);
- PUSHs(sv);
- }
- myfree(imgs);
- }
-
-void
-i_readgif_multi_scalar(data)
- PREINIT:
- i_img **imgs;
- int count;
- char *data;
- STRLEN length;
- int i;
- PPCODE:
- data = (char *)SvPV(ST(0), length);
- imgs = i_readgif_multi_scalar(data, length, &count);
- if (imgs) {
- EXTEND(SP, count);
- for (i = 0; i < count; ++i) {
- SV *sv = sv_newmortal();
- sv_setref_pv(sv, "Imager::ImgRaw", (void *)imgs[i]);
- PUSHs(sv);
- }
- myfree(imgs);
- }
-
-void
-i_readgif_multi_callback(cb)
- PREINIT:
- i_reader_data rd;
- i_img **imgs;
- int count;
- int i;
- PPCODE:
- rd.sv = ST(0);
- imgs = i_readgif_multi_callback(read_callback, (char *)&rd, &count);
- if (imgs) {
- EXTEND(SP, count);
- for (i = 0; i < count; ++i) {
- SV *sv = sv_newmortal();
- sv_setref_pv(sv, "Imager::ImgRaw", (void *)imgs[i]);
- PUSHs(sv);
- }
- myfree(imgs);
- }
-
-void
-i_readgif_multi_wiol(ig)
- Imager::IO ig
- PREINIT:
- i_img **imgs;
- int count;
- int i;
- PPCODE:
- imgs = i_readgif_multi_wiol(ig, &count);
- if (imgs) {
- EXTEND(SP, count);
- for (i = 0; i < count; ++i) {
- SV *sv = sv_newmortal();
- sv_setref_pv(sv, "Imager::ImgRaw", (void *)imgs[i]);
- PUSHs(sv);
- }
- myfree(imgs);
- }
-
-
-#endif
-
-
-
-Imager::ImgRaw
-i_readpnm_wiol(ig, length)
- Imager::IO ig
- int length
-
-
-undef_int
-i_writeppm_wiol(im, ig)
- Imager::ImgRaw im
- Imager::IO ig
-
-
-Imager::ImgRaw
-i_readraw_wiol(ig,x,y,datachannels,storechannels,intrl)
- Imager::IO ig
- int x
- int y
- int datachannels
- int storechannels
- int intrl
-
-undef_int
-i_writeraw_wiol(im,ig)
- Imager::ImgRaw im
- Imager::IO ig
-
-undef_int
-i_writebmp_wiol(im,ig)
- Imager::ImgRaw im
- Imager::IO ig
-
-Imager::ImgRaw
-i_readbmp_wiol(ig)
- Imager::IO ig
-
-
-undef_int
-i_writetga_wiol(im,ig, wierdpack, compress, idstring)
- Imager::ImgRaw im
- Imager::IO ig
- int wierdpack
- int compress
- char* idstring
- PREINIT:
- int idlen;
- CODE:
- idlen = SvCUR(ST(4));
- RETVAL = i_writetga_wiol(im, ig, wierdpack, compress, idstring, idlen);
- OUTPUT:
- RETVAL
-
-
-Imager::ImgRaw
-i_readtga_wiol(ig, length)
- Imager::IO ig
- int length
-
-
-undef_int
-i_writergb_wiol(im,ig, wierdpack, compress, idstring)
- Imager::ImgRaw im
- Imager::IO ig
- int wierdpack
- int compress
- char* idstring
- PREINIT:
- int idlen;
- CODE:
- idlen = SvCUR(ST(4));
- RETVAL = i_writergb_wiol(im, ig, wierdpack, compress, idstring, idlen);
- OUTPUT:
- RETVAL
-
-
-Imager::ImgRaw
-i_readrgb_wiol(ig, length)
- Imager::IO ig
- int length
-
-
-
-Imager::ImgRaw
-i_scaleaxis(im,Value,Axis)
- Imager::ImgRaw im
- float Value
- int Axis
-
-Imager::ImgRaw
-i_scale_nn(im,scx,scy)
- Imager::ImgRaw im
- float scx
- float scy
-
-Imager::ImgRaw
-i_scale_mixing(im, width, height)
- Imager::ImgRaw im
- int width
- int height
-
-Imager::ImgRaw
-i_haar(im)
- Imager::ImgRaw im
-
-int
-i_count_colors(im,maxc)
- Imager::ImgRaw im
- int maxc