#include #ifdef HAVE_STAT #undef HAVE_STAT #endif //#include "/usr/include/python2.3/Imaging.h" #include "../../config.h" #ifdef HAVE_PYTHON_IMAGING #include #endif #include "pyutils.h" #undef HAVE_STAT #include "../rfxswf.h" /* redefine the ImagingObject struct defined in _imagingmodule.c */ /* there should be a better way to do this... */ typedef struct { PyObject_HEAD #ifdef HAVE_PYTHON_IMAGING Imaging image; #endif } ImagingObject; int image_getWidth(PyObject*_image) { #ifdef HAVE_PYTHON_IMAGING if(strcmp(_image->ob_type->tp_name, "ImagingCore")) { PyErr_SetString(PyExc_Exception, setError("not an image: %s", _image->ob_type->tp_name)); return 0; } ImagingObject*image = (ImagingObject*)_image; return image->image->xsize; #else PyErr_SetString(PyExc_Exception, "imaging not compiled in"); return 0; #endif } int image_getHeight(PyObject*_image) { #ifdef HAVE_PYTHON_IMAGING if(strcmp(_image->ob_type->tp_name, "ImagingCore")) { PyErr_SetString(PyExc_Exception, setError("not an image: %s", _image->ob_type->tp_name)); return 0; } ImagingObject*image = (ImagingObject*)_image; return image->image->ysize; #else PyErr_SetString(PyExc_Exception, "imaging not compiled in"); return 0; #endif } int image_getBPP(PyObject*_image) { #ifdef HAVE_PYTHON_IMAGING if(strcmp(_image->ob_type->tp_name, "ImagingCore")) { PyErr_SetString(PyExc_Exception, setError("not an image: %s", _image->ob_type->tp_name)); return 0; } ImagingObject*image = (ImagingObject*)_image; if(!strcmp(image->image->mode, "1") || !strcmp(image->image->mode, "L") || !strcmp(image->image->mode, "P")) { return 8; } if(!strcmp(image->image->mode, "I") || !strcmp(image->image->mode, "F")) { return 32; } if(!strcmp(image->image->mode, "RGB") || !strcmp(image->image->mode, "RGBA") || !strcmp(image->image->mode, "CMYK") || !strcmp(image->image->mode, "YCbCr")) { return 32; } PyErr_SetString(PyExc_Exception, setError("Unknown image format (%s).", image->image->mode)); return 0; #else PyErr_SetString(PyExc_Exception, "imaging not compiled in"); return 0; #endif } RGBA* image_toRGBA(PyObject*_image) { #ifdef HAVE_PYTHON_IMAGING if(strcmp(_image->ob_type->tp_name, "ImagingCore")) { PyErr_SetString(PyExc_Exception, setError("not an image: %s", _image->ob_type->tp_name)); return 0; } ImagingObject*image = (ImagingObject*)_image; printf("mode: %s\n", image->image->mode); printf("depth: %d\n", image->image->depth); printf("bands: %d\n", image->image->bands); printf("xsize: %d\n", image->image->xsize); printf("ysize: %d\n", image->image->ysize); int bpp = image_getBPP(_image); if(!bpp) return 0; RGBA*rgba = (RGBA*)malloc(image->image->xsize * image->image->ysize * sizeof(RGBA)); if(!strcmp(image->image->mode, "RGBA")) { int y,ymax=image->image->ysize; int width = image->image->xsize; RGBA*dest = rgba; for(y=0;yimage->image32[y]); int x; for(x=0;ximage->mode)); #else PyErr_SetString(PyExc_Exception, "imaging not compiled in"); #endif return 0; } #ifdef HAVE_PYTHON_IMAGING extern PyObject*PyImagingNew(Imaging imOut); #endif PyObject* rgba_to_image(RGBA*rgba, int width, int height) { #ifdef HAVE_PYTHON_IMAGING #ifndef WIN32 Imaging img = ImagingNew("RGBA", width, height); int y; if(!img->image32) { fprintf(stderr, "No array allocated!\n"); return 0; } for(y=0;yimage32[y]); RGBA* src = &rgba[width*y]; int x; for(x=0;x