Image-PNG-Simple
view release on metacpan or search on metacpan
#endif
typedef struct {
IBMP* pBmp;
} ImagePNGSimple;
MODULE = Image::PNG::Simple PACKAGE = Image::PNG::Simple
SV
new(...)
PPCODE:
{
char* class_name = SvPV_nolen(ST(0));
ImagePNGSimple* ips = (ImagePNGSimple*)malloc(sizeof(ImagePNGSimple));
size_t ips_iv = PTR2IV(ips);
SV* ips_sv = sv_2mortal(newSViv(ips_iv));
SV* ips_svrv = sv_2mortal(newRV_inc(ips_sv));
SV* ips_obj = sv_bless(ips_svrv, gv_stashpv(class_name, 1));
XPUSHs(ips_obj);
XSRETURN(1);
}
SV
DESTORY(...)
PPCODE:
{
SV* ips_obj = ST(0);
SV* ips_sv = SvROK(ips_obj) ? SvRV(ips_obj) : ips_obj;
size_t ips_iv = SvIV(ips_sv);
ImagePNGSimple* ips = INT2PTR(ImagePNGSimple*, ips_iv);
if (ips->pBmp != NULL) {
free(ips->pBmp);
}
free(ips);
XSRETURN(0);
}
SV
read_bmp_file(...)
PPCODE :
{
SV* ips_obj = ST(0);
SV* ips_sv = SvROK(ips_obj) ? SvRV(ips_obj) : ips_obj;
size_t ips_iv = SvIV(ips_sv);
ImagePNGSimple* ips = INT2PTR(ImagePNGSimple*, ips_iv);
// Open bitmap file
SV* sv_file = ST(1);
char* file = SvPV_nolen(sv_file);
FILE* in_fh = fopen(file, "rb");
if (pBmp == NULL) {
croak("Can't parse bitmap file %s", file);
}
ips->pBmp = pBmp;
XSRETURN(0);
}
SV
write_bmp_file(...)
PPCODE:
{
SV* ips_obj = ST(0);
SV* ips_sv = SvROK(ips_obj) ? SvRV(ips_obj) : ips_obj;
size_t ips_iv = SvIV(ips_sv);
ImagePNGSimple* ips = INT2PTR(ImagePNGSimple*, ips_iv);
// Not exists bitmap data
if (ips->pBmp == NULL) {
croak("Can't write bitmap because bitmap data is not loaded");
}
croak("Can't open file %s for writing", file);
}
BmpIO_Save(out_fh, ips->pBmp);
fclose(out_fh);
XSRETURN(0);
}
SV
write_png_file(...)
PPCODE:
{
SV* ips_obj = ST(0);
SV* ips_sv = SvROK(ips_obj) ? SvRV(ips_obj) : ips_obj;
size_t ips_iv = SvIV(ips_sv);
ImagePNGSimple* ips = INT2PTR(ImagePNGSimple*, ips_iv);
// Bitmap information
IBMP* pBmp = ips->pBmp;
// Not exists bitmap data
( run in 0.582 second using v1.01-cache-2.11-cpan-5511b514fd6 )