git-svn-id: file:///srv/caca.zoy.org/var/lib/svn/libpipi/trunk@2837 92316355-f0b4-4df1-b90c-862c8a59935fremotes/tiles
| @@ -28,21 +28,28 @@ | |||
| pipi_image_t *pipi_load(char const *name) | |||
| { | |||
| pipi_image_t *ret = NULL; | |||
| if(!strncmp(name, "random:", 7) || | |||
| !strncmp(name, "ediff:", 6) || | |||
| !strncmp(name, "halftone:", 6) || | |||
| !strncmp(name, "bayer:", 6)) | |||
| return pipi_load_stock(name); | |||
| ret = pipi_load_stock(name); | |||
| #if USE_IMLIB2 | |||
| return pipi_load_imlib2(name); | |||
| #elif USE_OPENCV | |||
| return pipi_load_opencv(name); | |||
| #elif USE_SDL | |||
| return pipi_load_sdl(name); | |||
| #else | |||
| # error "No imaging library" | |||
| if(!ret) | |||
| ret = pipi_load_imlib2(name); | |||
| #endif | |||
| #if USE_OPENCV | |||
| if(!ret) | |||
| ret = pipi_load_opencv(name); | |||
| #endif | |||
| #if USE_SDL | |||
| if(!ret) | |||
| ret = pipi_load_sdl(name); | |||
| #endif | |||
| return ret; | |||
| } | |||
| void pipi_free(pipi_image_t *img) | |||
| @@ -54,25 +61,28 @@ void pipi_free(pipi_image_t *img) | |||
| free(img->p[i].pixels); | |||
| if(img->codec_priv) | |||
| #if USE_IMLIB2 | |||
| pipi_free_imlib2(img); | |||
| #elif USE_OPENCV | |||
| pipi_free_opencv(img); | |||
| #elif USE_SDL | |||
| pipi_free_sdl(img); | |||
| #endif | |||
| img->codec_free(img); | |||
| free(img); | |||
| } | |||
| void pipi_save(pipi_image_t *img, const char *name) | |||
| int pipi_save(pipi_image_t *img, const char *name) | |||
| { | |||
| int ret = -1; | |||
| #if USE_IMLIB2 | |||
| return pipi_save_imlib2(img, name); | |||
| #elif USE_OPENCV | |||
| return pipi_save_opencv(img, name); | |||
| #elif USE_SDL | |||
| return pipi_save_sdl(img, name); | |||
| if(ret < 0) | |||
| ret = pipi_save_imlib2(img, name); | |||
| #endif | |||
| #if USE_OPENCV | |||
| if(ret < 0) | |||
| ret = pipi_save_opencv(img, name); | |||
| #endif | |||
| #if USE_SDL | |||
| if(ret < 0) | |||
| ret = pipi_save_sdl(img, name); | |||
| #endif | |||
| return ret; | |||
| } | |||
| @@ -28,6 +28,8 @@ | |||
| #include "pipi.h" | |||
| #include "pipi_internals.h" | |||
| static int pipi_free_imlib2(pipi_image_t *); | |||
| pipi_image_t *pipi_load_imlib2(const char *name) | |||
| { | |||
| pipi_image_t *img; | |||
| @@ -49,6 +51,7 @@ pipi_image_t *pipi_load_imlib2(const char *name) | |||
| img->codec_priv = (void *)priv; | |||
| img->codec_format = PIPI_PIXELS_RGBA_C; | |||
| img->codec_free = pipi_free_imlib2; | |||
| img->wrap = 0; | |||
| img->u8 = 1; | |||
| @@ -56,13 +59,7 @@ pipi_image_t *pipi_load_imlib2(const char *name) | |||
| return img; | |||
| } | |||
| void pipi_free_imlib2(pipi_image_t *img) | |||
| { | |||
| imlib_context_set_image(img->codec_priv); | |||
| imlib_free_image(); | |||
| } | |||
| void pipi_save_imlib2(pipi_image_t *img, const char *name) | |||
| int pipi_save_imlib2(pipi_image_t *img, const char *name) | |||
| { | |||
| if(!img->codec_priv) | |||
| { | |||
| @@ -97,5 +94,19 @@ void pipi_save_imlib2(pipi_image_t *img, const char *name) | |||
| pipi_getpixels(img, img->codec_format); | |||
| imlib_context_set_image(img->codec_priv); | |||
| imlib_save_image(name); | |||
| return 0; | |||
| } | |||
| /* | |||
| * XXX: The following functions are local. | |||
| */ | |||
| static int pipi_free_imlib2(pipi_image_t *img) | |||
| { | |||
| imlib_context_set_image(img->codec_priv); | |||
| imlib_free_image(); | |||
| return 0; | |||
| } | |||
| @@ -31,6 +31,8 @@ | |||
| /* FIXME: this whole file is broken until we support BGR24 images */ | |||
| static int pipi_free_opencv(pipi_image_t *); | |||
| pipi_image_t *pipi_load_opencv(const char *name) | |||
| { | |||
| pipi_image_t *img; | |||
| @@ -52,6 +54,7 @@ pipi_image_t *pipi_load_opencv(const char *name) | |||
| img->codec_priv = (void *)priv; | |||
| img->codec_format = PIPI_PIXELS_BGR_C; | |||
| img->codec_free = pipi_free_opencv; | |||
| img->wrap = 0; | |||
| img->u8 = 1; | |||
| @@ -59,14 +62,7 @@ pipi_image_t *pipi_load_opencv(const char *name) | |||
| return img; | |||
| } | |||
| void pipi_free_opencv(pipi_image_t *img) | |||
| { | |||
| IplImage *iplimg; | |||
| iplimg = (IplImage *)img->codec_priv; | |||
| cvReleaseImage(&iplimg); | |||
| } | |||
| void pipi_save_opencv(pipi_image_t *img, const char *name) | |||
| int pipi_save_opencv(pipi_image_t *img, const char *name) | |||
| { | |||
| if(!img->codec_priv) | |||
| { | |||
| @@ -97,5 +93,20 @@ void pipi_save_opencv(pipi_image_t *img, const char *name) | |||
| pipi_getpixels(img, img->codec_format); | |||
| cvSaveImage(name, img->codec_priv); | |||
| return 0; | |||
| } | |||
| /* | |||
| * XXX: The following functions are local. | |||
| */ | |||
| static int pipi_free_opencv(pipi_image_t *img) | |||
| { | |||
| IplImage *iplimg; | |||
| iplimg = (IplImage *)img->codec_priv; | |||
| cvReleaseImage(&iplimg); | |||
| return 0; | |||
| } | |||
| @@ -28,6 +28,7 @@ | |||
| #include "pipi.h" | |||
| #include "pipi_internals.h" | |||
| static int pipi_free_sdl(pipi_image_t *); | |||
| static SDL_Surface *create_32bpp_surface(int w, int h); | |||
| pipi_image_t *pipi_load_sdl(const char *name) | |||
| @@ -58,6 +59,7 @@ pipi_image_t *pipi_load_sdl(const char *name) | |||
| img->codec_priv = (void *)priv; | |||
| img->codec_format = PIPI_PIXELS_RGBA_C; | |||
| img->codec_free = pipi_free_sdl; | |||
| img->wrap = 0; | |||
| img->u8 = 1; | |||
| @@ -65,12 +67,7 @@ pipi_image_t *pipi_load_sdl(const char *name) | |||
| return img; | |||
| } | |||
| void pipi_free_sdl(pipi_image_t *img) | |||
| { | |||
| SDL_FreeSurface(img->codec_priv); | |||
| } | |||
| void pipi_save_sdl(pipi_image_t *img, const char *name) | |||
| int pipi_save_sdl(pipi_image_t *img, const char *name) | |||
| { | |||
| if(!img->codec_priv) | |||
| { | |||
| @@ -100,12 +97,21 @@ void pipi_save_sdl(pipi_image_t *img, const char *name) | |||
| pipi_getpixels(img, img->codec_format); | |||
| SDL_SaveBMP(img->codec_priv, name); | |||
| return 0; | |||
| } | |||
| /* | |||
| * The following functions are local. | |||
| * XXX: The following functions are local. | |||
| */ | |||
| static int pipi_free_sdl(pipi_image_t *img) | |||
| { | |||
| SDL_FreeSurface(img->codec_priv); | |||
| return 0; | |||
| } | |||
| static SDL_Surface *create_32bpp_surface(int w, int h) | |||
| { | |||
| Uint32 rmask, gmask, bmask, amask; | |||
| @@ -116,7 +116,7 @@ extern pipi_image_t *pipi_load_stock(char const *); | |||
| extern pipi_image_t *pipi_new(int, int); | |||
| extern pipi_image_t *pipi_copy(pipi_image_t *); | |||
| extern void pipi_free(pipi_image_t *); | |||
| extern void pipi_save(pipi_image_t *, const char *); | |||
| extern int pipi_save(pipi_image_t *, const char *); | |||
| extern pipi_pixels_t *pipi_getpixels(pipi_image_t *, pipi_format_t); | |||
| extern int pipi_get_image_width(pipi_image_t *img); | |||
| @@ -56,6 +56,7 @@ struct pipi_image | |||
| /* Private data used by the codec */ | |||
| pipi_format_t codec_format; | |||
| void *codec_priv; | |||
| int (*codec_free)(pipi_image_t *); | |||
| }; | |||
| struct pipi_context | |||
| @@ -66,23 +67,17 @@ struct pipi_context | |||
| #ifdef USE_IMLIB2 | |||
| pipi_image_t *pipi_load_imlib2(const char *name); | |||
| pipi_image_t *pipi_new_imlib2(int width, int height); | |||
| void pipi_free_imlib2(pipi_image_t *img); | |||
| void pipi_save_imlib2(pipi_image_t *img, const char *name); | |||
| int pipi_save_imlib2(pipi_image_t *img, const char *name); | |||
| #endif | |||
| #ifdef USE_OPENCV | |||
| pipi_image_t *pipi_load_opencv(const char *name); | |||
| pipi_image_t *pipi_new_opencv(int width, int height); | |||
| void pipi_free_opencv(pipi_image_t *img); | |||
| void pipi_save_opencv(pipi_image_t *img, const char *name); | |||
| int pipi_save_opencv(pipi_image_t *img, const char *name); | |||
| #endif | |||
| #ifdef USE_SDL | |||
| pipi_image_t *pipi_load_sdl(const char *name); | |||
| pipi_image_t *pipi_new_sdl(int width, int height); | |||
| void pipi_free_sdl(pipi_image_t *img); | |||
| void pipi_save_sdl(pipi_image_t *img, const char *name); | |||
| int pipi_save_sdl(pipi_image_t *img, const char *name); | |||
| #endif | |||
| #endif /* __PIPI_INTERNALS_H__ */ | |||