diff options
Diffstat (limited to 'source/blender/imbuf/intern/writeimage.c')
-rw-r--r-- | source/blender/imbuf/intern/writeimage.c | 172 |
1 files changed, 12 insertions, 160 deletions
diff --git a/source/blender/imbuf/intern/writeimage.c b/source/blender/imbuf/intern/writeimage.c index 808fbc25c24..b55ce4b1df4 100644 --- a/source/blender/imbuf/intern/writeimage.c +++ b/source/blender/imbuf/intern/writeimage.c @@ -31,180 +31,32 @@ #include <stdio.h> -#include "BKE_global.h" -#include "BLI_blenlib.h" - -#include "imbuf.h" -#include "imbuf_patch.h" - #include "IMB_imbuf_types.h" #include "IMB_imbuf.h" +#include "IMB_filetype.h" -#include "IMB_allocimbuf.h" - -#include "IMB_dpxcineon.h" -#include "IMB_targa.h" -#include "IMB_jpeg.h" -#include "IMB_iris.h" -#include "IMB_ham.h" -#include "IMB_hamx.h" -#include "IMB_amiga.h" -#include "IMB_png.h" -#include "IMB_bmp.h" -#include "IMB_radiance_hdr.h" - -#if defined(__APPLE__) && defined(IMBUF_COCOA) -#include "IMB_cocoa.h" -#else -#include "IMB_tiff.h" -#endif - -#ifdef WITH_OPENJPEG -#include "IMB_jp2.h" -#endif - -#ifdef WITH_OPENEXR -#include "openexr/openexr_api.h" -#endif - -#ifdef WITH_DDS -#include "dds/dds_api.h" -#endif - -#include "IMB_iff.h" -#include "IMB_bitplanes.h" -#include "IMB_divers.h" - -#ifdef WIN32 -#include <io.h> -#include "BLI_winstuff.h" -#endif -/* added facility to copy with saving non-float rects */ +#include "imbuf.h" short IMB_saveiff(struct ImBuf *ibuf, char *name, int flags) { - short ok=TRUE,delpl=FALSE; - int file = -1; + ImFileType *type; - if (ibuf==0) return (FALSE); + if(ibuf == NULL) return (FALSE); ibuf->flags = flags; - /* Put formats that take a filename here */ - if (IS_jpg(ibuf)) { - if(ibuf->rect==NULL && ibuf->rect_float) - IMB_rect_from_float(ibuf); - return imb_savejpeg(ibuf, name, flags); - } - if (IS_radhdr(ibuf)) { - return imb_savehdr(ibuf, name, flags); - } - if (IS_png(ibuf)) { - if(ibuf->rect==NULL && ibuf->rect_float) - IMB_rect_from_float(ibuf); - return imb_savepng(ibuf, name, flags); - } - if (IS_bmp(ibuf)) { - if(ibuf->rect==NULL && ibuf->rect_float) - IMB_rect_from_float(ibuf); - return imb_savebmp(ibuf, name, flags); - } - if (IS_tga(ibuf)) { - if(ibuf->rect==NULL && ibuf->rect_float) - IMB_rect_from_float(ibuf); - return imb_savetarga(ibuf, name, flags); - } - if (IS_iris(ibuf)) { - if(ibuf->rect==NULL && ibuf->rect_float) - IMB_rect_from_float(ibuf); - return imb_saveiris(ibuf, name, flags); - } - -#if defined(__APPLE__) && defined(IMBUF_COCOA) - if (IS_tiff(ibuf)) { - if(ibuf->rect==NULL && ibuf->rect_float) - IMB_rect_from_float(ibuf); - return imb_cocoaSaveImage(ibuf, name, flags); - } -#else - if (G.have_libtiff && IS_tiff(ibuf)) { - if(ibuf->rect==NULL && ibuf->rect_float) - IMB_rect_from_float(ibuf); - return imb_savetiff(ibuf, name, flags); - } -#endif - -#ifdef WITH_OPENEXR - if (IS_openexr(ibuf)) { - return imb_save_openexr(ibuf, name, flags); - } -#endif -/* not supported yet -#ifdef WITH_DDS - if (IS_dds(ibuf)) { - return imb_save_dds(ibuf, name, flags); - } -#endif -*/ - if (IS_cineon(ibuf)) { - return imb_savecineon(ibuf, name, flags); - - } - if (IS_dpx(ibuf)) { - return imb_save_dpx(ibuf, name, flags); - } -#ifdef WITH_OPENJPEG - if (IS_jp2(ibuf)) { - return imb_savejp2(ibuf, name, flags); - } -#endif - file = open(name, O_BINARY | O_RDWR | O_CREAT | O_TRUNC, 0666); - if (file < 0) return (FALSE); - - if (flags & IB_rect){ - if (ibuf->cmap){ - imb_checkncols(ibuf); - } - } - - /* Put formats that take a filehandle here */ - ok = imb_start_iff(ibuf,file); - if (IS_amiga(ibuf)){ - IMB_flipy(ibuf); - if (flags & IB_rect){ - if ((flags & IB_cmap) == 0) { - if (IS_ham(ibuf)){ - if (ok) ok = imb_converttoham(ibuf); - }else if (ibuf->cmap){ - if (ok) ok = IMB_converttocmap(ibuf); - } + for(type=IMB_FILE_TYPES; type->is_a; type++) { + if(type->save && type->ftype(type, ibuf)) { + if(!(type->flag & IM_FTYPE_FLOAT)) { + if(ibuf->rect==NULL && ibuf->rect_float) + IMB_rect_from_float(ibuf); } - if (ok){ - if (ibuf->planes==0){ - delpl=TRUE; - ok=imb_addplanesImBuf(ibuf); - } - imb_longtobp(ibuf); - } - } - if (flags & IB_vert){ - if (ok) ok = imb_encodebodyv(ibuf,file); - } - else{ - if (ok) ok = imb_encodebodyh(ibuf,file); + return type->save(ibuf, name, flags); } - if (ok) ok = imb_update_iff(file,BODY); - }else if (IS_anim(ibuf)) { - if (ok) ok = imb_enc_anim(ibuf, file); - if (ok) ok = imb_update_iff(file, BODY); } - close(file); - if (ok==FALSE) { - fprintf(stderr,"Couldn't save picture.\n"); - } - if (delpl) imb_freeplanesImBuf(ibuf); + fprintf(stderr, "Couldn't save picture.\n"); - return (ok); + return FALSE; } |