From 008863daec1249d1f17bc69e1105e336db690d63 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Fri, 7 May 2010 15:18:04 +0000 Subject: Merge image related changes from the render branch. This includes the image tile cache code in imbuf, but it is not hooked up to the render engine. Imbuf module: some small refactoring and removing a lot of unused or old code (about 6.5k lines). * Added a ImFileType struct with callbacks to make adding an file format type, or making changes to the API easier. * Move imbuf init/exit code into IMB_init()/IMB_exit() functions. * Increased mipmap levels from 10 to 20, you run into this limit already with a 2k image. * Removed hamx, amiga, anim5 format support. * Removed colormap saving, only simple colormap code now for reading tga. * Removed gen_dynlibtiff.py, editing this is almost as much work as just editing the code directly. * Functions removed that were only used for sequencer plugin API: IMB_anim_nextpic, IMB_clever_double, IMB_antialias, IMB_gamwarp, IMB_scalefieldImBuf, IMB_scalefastfieldImBuf, IMB_onethird, IMB_halflace, IMB_dit0, IMB_dit2, IMB_cspace * Write metadata info into OpenEXR images. Can be viewed with the command line utility 'exrheader' For the image tile cache code, see this page: http://wiki.blender.org/index.php/Dev:2.5/Source/Imaging/ImageTileCache --- source/blender/imbuf/intern/writeimage.c | 172 +++---------------------------- 1 file changed, 12 insertions(+), 160 deletions(-) (limited to 'source/blender/imbuf/intern/writeimage.c') 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 -#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 -#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; } -- cgit v1.2.3