Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2010-05-07 19:18:04 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2010-05-07 19:18:04 +0400
commit008863daec1249d1f17bc69e1105e336db690d63 (patch)
tree78a4001857b26a287125a3f5fa31496052f6ebdd /source/blender/imbuf/intern/writeimage.c
parent1613829e8e821321da99cad4790b7e6a1d90cea8 (diff)
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
Diffstat (limited to 'source/blender/imbuf/intern/writeimage.c')
-rw-r--r--source/blender/imbuf/intern/writeimage.c172
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;
}