Revision: 42118
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42118
Author:   campbellbarton
Date:     2011-11-24 06:30:37 +0000 (Thu, 24 Nov 2011)
Log Message:
-----------
- saving as a jpeg image would set the image as not having an alpha channel 
even when saving a copy.
- setting the color channels on save as would ignore the channel - BW/RGB/RGBA 
setting.
  now its used when available but still need to hide BW for formats blender can 
only write as color.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_image.h
    trunk/blender/source/blender/blenkernel/intern/image.c
    trunk/blender/source/blender/editors/space_image/image_ops.c
    trunk/blender/source/blender/imbuf/intern/jpeg.c

Modified: trunk/blender/source/blender/blenkernel/BKE_image.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_image.h 2011-11-24 05:33:22 UTC 
(rev 42117)
+++ trunk/blender/source/blender/blenkernel/BKE_image.h 2011-11-24 06:30:37 UTC 
(rev 42118)
@@ -53,6 +53,7 @@
 int            BKE_alphatest_ibuf(struct ImBuf *ibuf);
 int            BKE_write_ibuf_stamp(struct Scene *scene, struct Object 
*camera, struct ImBuf *ibuf, const char *name, struct ImageFormatData *imf);
 int            BKE_write_ibuf(struct ImBuf *ibuf, const char *name, struct 
ImageFormatData *imf);
+int     BKE_write_ibuf_as(struct ImBuf *ibuf, const char *name, struct 
ImageFormatData *imf, const short is_copy);
 void   BKE_makepicstring(char *string, const char *base, const char *relbase, 
int frame, char imtype, const short use_ext, const short use_frames);
 int            BKE_add_image_extension(char *string, const char imtype);
 char   BKE_ftype_to_imtype(const int ftype);

Modified: trunk/blender/source/blender/blenkernel/intern/image.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/image.c      2011-11-24 
05:33:22 UTC (rev 42117)
+++ trunk/blender/source/blender/blenkernel/intern/image.c      2011-11-24 
06:30:37 UTC (rev 42118)
@@ -1483,6 +1483,8 @@
        return FALSE;
 }
 
+/* note: imf->planes is ignored here, its assumed the image channels
+ * are already set */
 int BKE_write_ibuf(ImBuf *ibuf, const char *name, ImageFormatData *imf)
 {
        char imtype= imf->imtype;
@@ -1577,7 +1579,6 @@
                /* R_IMF_IMTYPE_JPEG90, etc. default we save jpegs */
                if(quality < 10) quality= 90;
                ibuf->ftype= JPG|quality;
-               if(ibuf->planes==32) ibuf->planes= 24;  /* unsupported feature 
only confuses other s/w */
        }
        
        BLI_make_existing_file(name);
@@ -1590,6 +1591,29 @@
        return(ok);
 }
 
+/* same as BKE_write_ibuf_as but crappy workaround not to perminantly modify
+ * _some_, values in the imbuf */
+int BKE_write_ibuf_as(ImBuf *ibuf, const char *name, ImageFormatData *imf,
+                      const short save_copy)
+{
+       ImBuf ibuf_back= *ibuf;
+       int ok;
+
+       /* all data is rgba anyway,
+        * this just controls how to save for some formats */
+       ibuf->planes= imf->planes;
+
+       ok= BKE_write_ibuf(ibuf, name, imf);
+
+       if (save_copy) {
+               /* note that we are not restoring _all_ settings */
+               ibuf->planes= ibuf_back.planes;
+               ibuf->ftype=  ibuf_back.ftype;
+       }
+
+       return ok;
+}
+
 int BKE_write_ibuf_stamp(Scene *scene, struct Object *camera, ImBuf *ibuf, 
const char *name, struct ImageFormatData *imf)
 {
        if(scene && scene->r.stamp & R_STAMP_ALL)

Modified: trunk/blender/source/blender/editors/space_image/image_ops.c
===================================================================
--- trunk/blender/source/blender/editors/space_image/image_ops.c        
2011-11-24 05:33:22 UTC (rev 42117)
+++ trunk/blender/source/blender/editors/space_image/image_ops.c        
2011-11-24 06:30:37 UTC (rev 42118)
@@ -1075,7 +1075,7 @@
                        BKE_image_release_renderresult(scene, ima);
                }
                else {
-                       if (BKE_write_ibuf(ibuf, simopts->filepath, 
&simopts->im_format)) {
+                       if (BKE_write_ibuf_as(ibuf, simopts->filepath, 
&simopts->im_format, save_copy)) {
                                ok= TRUE;
                        }
                }

Modified: trunk/blender/source/blender/imbuf/intern/jpeg.c
===================================================================
--- trunk/blender/source/blender/imbuf/intern/jpeg.c    2011-11-24 05:33:22 UTC 
(rev 42117)
+++ trunk/blender/source/blender/imbuf/intern/jpeg.c    2011-11-24 06:30:37 UTC 
(rev 42118)
@@ -572,8 +572,12 @@
 
        cinfo->in_color_space = JCS_RGB;
        if (ibuf->planes == 8) cinfo->in_color_space = JCS_GRAYSCALE;
+#if 0
+       /* just write RGBA as RGB,
+        * unsupported feature only confuses other s/w */
+
        if (ibuf->planes == 32) cinfo->in_color_space = JCS_UNKNOWN;
-       
+#endif
        switch(cinfo->in_color_space){
        case JCS_RGB:
                cinfo->input_components = 3;

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to