This fixes bug #1990
authorKent Mein <mein@cs.umn.edu>
Thu, 9 Dec 2004 13:09:11 +0000 (13:09 +0000)
committerKent Mein <mein@cs.umn.edu>
Thu, 9 Dec 2004 13:09:11 +0000 (13:09 +0000)
It moves targa, bmp, iris and png loading so that were not opening
2 file handles for each file, and made them like the jpeg stuff.

Also cleaned up some minor other stuff.

Kent

source/blender/imbuf/intern/IMB_bmp.h
source/blender/imbuf/intern/IMB_iris.h
source/blender/imbuf/intern/IMB_png.h
source/blender/imbuf/intern/IMB_targa.h
source/blender/imbuf/intern/bmp.c
source/blender/imbuf/intern/iris.c
source/blender/imbuf/intern/png.c
source/blender/imbuf/intern/targa.c
source/blender/imbuf/intern/writeimage.c

index d220c5646523f41f05e4a6b7b51a312bd20e802b..7516c8b4add535bf8c710943c5bea9335399730c 100644 (file)
@@ -44,7 +44,7 @@ struct ImBuf;
 
 int imb_is_a_bmp(void *buf);
 struct ImBuf *imb_bmp_decode(unsigned char *mem, int size, int flags);
-short imb_savebmp(struct ImBuf *ibuf, int outfile, int flags);
+short imb_savebmp(struct ImBuf *ibuf, char *name, int flags);
 
 #endif
 
index 046cff62947cbcfb28fc15bef1bc65eea37c5551..74126a1a1667a199b177951e701bedc25174d75b 100644 (file)
@@ -43,7 +43,7 @@
 struct ImBuf;
 
 struct ImBuf *imb_loadiris(unsigned char *mem, int flags);
-short imb_saveiris(struct ImBuf * ibuf, int file, int flags);
+short imb_saveiris(struct ImBuf * ibuf, char *name, int flags);
 
 #endif
 
index 63638deff00904a8e1725a3f2c4b23e5b9b0eeaf..6557bfb13a0c1f1a733099c2983f95147b168d64 100644 (file)
@@ -45,7 +45,7 @@ struct ImBuf;
 int imb_is_a_png(void *buf);
 struct ImBuf *imb_loadpng(unsigned char *mem, int size, int flags);
 
-short imb_savepng(struct ImBuf *ibuf, int file, int flags);
+short imb_savepng(struct ImBuf *ibuf, char *name, int flags);
 
 #endif
 
index 6aa8f65dca5fdc8856875b174026db389969bd57..2d3b1ab32886ae75958e51787feb98b612c3a60b 100644 (file)
@@ -45,7 +45,7 @@ struct ImBuf;
 int imb_is_a_targa(void *buf);
 
 struct ImBuf *imb_loadtarga(unsigned char *mem, int flags);
-short imb_savetarga(struct ImBuf * ibuf, int file, int flags);
+short imb_savetarga(struct ImBuf * ibuf, char *name, int flags);
 
 #endif
 
index cc1040abdcc10c84310a7c588d2e34d005797e01..2cd9e35ba88b15443694bb92692be51ccc3d6f57 100644 (file)
 #include "IMB_cmap.h"
 #include "IMB_bmp.h"
 
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
 /* some code copied from article on microsoft.com, copied
   here for enhanced BMP support in the future
   http://www.microsoft.com/msj/defaultframe.asp?page=/msj/0197/mfcp1/mfcp1.htm&nav=/msj/0197/newnav.htm
@@ -199,7 +195,7 @@ int putShortLSB(unsigned short us,FILE *ofile) {
 } 
 
 /* Found write info at http://users.ece.gatech.edu/~slabaugh/personal/c/bitmapUnix.c */
-short imb_savebmp(struct ImBuf *ibuf, int outfile, int flags) {
+short imb_savebmp(struct ImBuf *ibuf, char *name, int flags) {
 
    BMPINFOHEADER infoheader;
    int bytesize, extrabytes, x, y, t, ptr;
@@ -210,7 +206,7 @@ short imb_savebmp(struct ImBuf *ibuf, int outfile, int flags) {
    bytesize = (ibuf->x * 3 + extrabytes) * ibuf->y;
 
    data = (uchar *) ibuf->rect;
-   ofile = fdopen(outfile,"ab");
+   ofile = fopen(name,"ab");
 
    putShortLSB(19778,ofile); /* "BM" */
    putIntLSB(0,ofile); /* This can be 0 for BI_RGB bitmaps */
index 499154d565a88fb84fc111a81cdf30e417aa7d8c..48b6f9bcf15f581b962ca06f85f25788c4d4aded 100644 (file)
 #include "IMB_allocimbuf.h"
 #include "IMB_iris.h"
 
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
 typedef struct {
     unsigned short     imagic;         /* stuff saved on disk . . */
     unsigned short     type;
@@ -115,10 +111,6 @@ static void interleaverow(unsigned char *lptr, unsigned char *cptr, int z, int n
 static int compressrow(unsigned char *lbuf, unsigned char *rlebuf, int z, int cnt);
 static void lumrow(unsigned char *rgbptr, unsigned char *lumptr, int n);
 
-/* not used... */
-/*  static void copybw(int *lptr, int n); */
-/*  static void setalpha(unsigned char *lptr, int n); */
-
 /*
  *     byte order independent read/write of shorts and ints.
  *
@@ -423,53 +415,6 @@ static void interleaverow(unsigned char *lptr, unsigned char *cptr, int z, int n
        }
 }
 
-/* not used? */
-/*static void copybw(int *lptr, int n) */
-/*  int *lptr; */
-/*  int n; */
-/*{
-       while(n>=8) {
-               lptr[0] = 0xff000000+(0x010101*(lptr[0]&0xff));
-               lptr[1] = 0xff000000+(0x010101*(lptr[1]&0xff));
-               lptr[2] = 0xff000000+(0x010101*(lptr[2]&0xff));
-               lptr[3] = 0xff000000+(0x010101*(lptr[3]&0xff));
-               lptr[4] = 0xff000000+(0x010101*(lptr[4]&0xff));
-               lptr[5] = 0xff000000+(0x010101*(lptr[5]&0xff));
-               lptr[6] = 0xff000000+(0x010101*(lptr[6]&0xff));
-               lptr[7] = 0xff000000+(0x010101*(lptr[7]&0xff));
-               lptr += 8;
-               n-=8;
-       }
-       while(n--) {
-               *lptr = 0xff000000+(0x010101*(*lptr&0xff));
-               lptr++;
-       }
-}
-*/
-
-/* not used ? */
-/*static void setalpha(unsigned char *lptr, int n)*/
-/*  unsigned char *lptr; */
-/*{
-       while(n>=8) {
-               lptr[0*4] = 0xff;
-               lptr[1*4] = 0xff;
-               lptr[2*4] = 0xff;
-               lptr[3*4] = 0xff;
-               lptr[4*4] = 0xff;
-               lptr[5*4] = 0xff;
-               lptr[6*4] = 0xff;
-               lptr[7*4] = 0xff;
-               lptr += 4*8;
-               n -= 8;
-       }
-       while(n--) {
-               *lptr = 0xff;
-               lptr += 4;
-       }
-}
-*/
-
 static void expandrow(unsigned char *optr, unsigned char *iptr, int z)
 {
        unsigned char pixel, count;
@@ -532,7 +477,7 @@ static void expandrow(unsigned char *optr, unsigned char *iptr, int z)
  *  Added: zbuf write
  */
 
-static int output_iris(unsigned int *lptr, int xsize, int ysize, int zsize, int file, int *zptr)
+static int output_iris(unsigned int *lptr, int xsize, int ysize, int zsize, char *name, int *zptr)
 {
        FILE *outf;
        IMAGE *image;
@@ -543,10 +488,10 @@ static int output_iris(unsigned int *lptr, int xsize, int ysize, int zsize, int
        int rlebuflen, goodwrite;
 
        goodwrite = 1;
-       outf = fdopen(file, "wb");
+       outf = fopen(name, "wb");
 
        if(!outf) {
-               perror("fdopen");
+               perror("fopen");
                fprintf(stderr,"output_iris: can't open output file\n");
                return 0;
        }
@@ -690,7 +635,7 @@ static int compressrow(unsigned char *lbuf, unsigned char *rlebuf, int z, int cn
        return optr - (unsigned char *)rlebuf;
 }
 
-short imb_saveiris(struct ImBuf * ibuf, int file, int flags)
+short imb_saveiris(struct ImBuf * ibuf, char *name, int flags)
 {
        short zsize;
        int ret;
@@ -701,7 +646,7 @@ short imb_saveiris(struct ImBuf * ibuf, int file, int flags)
        IMB_convert_rgba_to_abgr(ibuf->x*ibuf->y, ibuf->rect);
        test_endian_zbuf(ibuf);
 
-       ret = output_iris(ibuf->rect, ibuf->x, ibuf->y, zsize, file, ibuf->zbuf);
+       ret = output_iris(ibuf->rect, ibuf->x, ibuf->y, zsize, name, ibuf->zbuf);
 
        /* restore! Quite clumsy, 2 times a switch... maybe better a malloc ? */
        IMB_convert_rgba_to_abgr(ibuf->x*ibuf->y, ibuf->rect);
index d8ec1a293dc5addc94b2f60bf423160f60ea6cc0..50b65befe4843214f779658de128a82727a59bb0 100644 (file)
 
 #include "png.h"
 
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
 #ifdef WIN32
 #include "BLI_winstuff.h"
 #endif
@@ -106,7 +102,7 @@ static void ReadData( png_structp png_ptr, png_bytep data, png_size_t length)
        longjmp(png_jmpbuf(png_ptr), 1);
 }
 
-short imb_savepng(struct ImBuf *ibuf, int file, int flags)
+short imb_savepng(struct ImBuf *ibuf, char *name, int flags)
 {
        png_structp png_ptr;
        png_infop info_ptr;
@@ -198,7 +194,7 @@ short imb_savepng(struct ImBuf *ibuf, int file, int flags)
                         WriteData,
                         Flush);
        } else {
-               fp = fdopen(file, "wb");
+               fp = fopen(name, "wb");
                png_init_io(png_ptr, fp);
        }
 
index 0ad4d0ae77da21ab4f2f46afa98870d486e20edf..a20c9917c0656710112d8216080d7287d1e429d2 100644 (file)
  * $Id$
  */
 
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
 #ifdef WIN32
 #include "BLI_winstuff.h"
 #include <io.h>
@@ -242,7 +238,7 @@ static int dumptarga(struct ImBuf * ibuf, FILE * file)
 }
 
 
-short imb_savetarga(struct ImBuf * ibuf, int file, int flags)
+short imb_savetarga(struct ImBuf * ibuf, char *name, int flags)
 {
        char buf[20];
        FILE *fildes;
@@ -294,14 +290,16 @@ short imb_savetarga(struct ImBuf * ibuf, int file, int flags)
         if (ibuf->depth==32) {
            buf[17] |= 0x08;
         }
+       fildes = fopen(name,"ab");
+       
+
+       if (fwrite(buf, 1, 18,fildes) != 18) return (0);
 
-       if (write(file, buf, 18) != 18) return (0);
        if (ibuf->cmap){
                for (i = 0 ; i<ibuf->maxcol ; i++){
-                       if (write(file,((uchar *)(ibuf->cmap + i)) + 1,3) != 3) return (0);
+                       if (fwrite(((uchar *)(ibuf->cmap + i)) + 1,1,3,fildes) != 3) return (0);
                }
        }
-       fildes = fdopen(file,"ab");
        
        if (ibuf->cmap && (flags & IB_cmap) == 0) IMB_converttocmap(ibuf);
        
index e8dabe8d2684d5eb7332e19a9a441a4f0b3b01fe..abbc8356aa4cb924731900ca979998d71c85a72c 100644 (file)
 #include "IMB_bitplanes.h"
 #include "IMB_divers.h"
 
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-
 short IMB_saveiff(struct ImBuf *ibuf,char *naam,int flags)
 {
        short ok=TRUE,delpl=FALSE;
@@ -73,6 +68,18 @@ short IMB_saveiff(struct ImBuf *ibuf,char *naam,int flags)
                if(imb_savejpeg(ibuf, naam, flags)) return (0);
                else return (TRUE);
        }
+       if (IS_png(ibuf)) {
+               return imb_savepng(ibuf,naam,flags);
+        }
+        if (IS_bmp(ibuf)) {
+                return imb_savebmp(ibuf,naam,flags);
+        }
+       if (IS_tga(ibuf)) {
+               return imb_savetarga(ibuf,naam,flags);
+        }
+       if (IS_iris(ibuf)) {
+               return imb_saveiris(ibuf,naam,flags);
+        }
 
        file = open(naam, O_BINARY | O_RDWR | O_CREAT | O_TRUNC, 0666);
        if (file < 0) return (FALSE);
@@ -84,40 +91,8 @@ short IMB_saveiff(struct ImBuf *ibuf,char *naam,int flags)
        }
 
        /* Put formats that take a filehandle here */
-       if (IS_png(ibuf)) {
-               ok = imb_savepng(ibuf,file,flags);
-               if (ok) {
-                       close (file);
-                       return (ok);
-               }
-       }
-
-        if (IS_bmp(ibuf)) {
-                ok = imb_savebmp(ibuf,file,flags);
-                if (ok) {
-                        close (file);
-                        return (ok);
-                }
-        }
-
-       if (IS_tga(ibuf)) {
-               ok = imb_savetarga(ibuf,file,flags);
-               if (ok) {
-                       close (file);
-                       return (ok);
-               }
-       }
-       
-       if (IS_iris(ibuf)) {
-               ok = imb_saveiris(ibuf,file,flags);
-               if (ok) {
-                       close (file);
-                       return (ok);
-               }
-       }
        
-       if (ok) ok = imb_start_iff(ibuf,file);
-
+       ok = imb_start_iff(ibuf,file);
        if (IS_amiga(ibuf)){
                IMB_flipy(ibuf);
                if (flags & IB_rect){