changeset 9275:86f475d5e7d1

imwrite.m: convert indexed images to RGB before calling __magick_write__
author John W. Eaton <jwe@octave.org>
date Wed, 27 May 2009 10:34:59 -0400
parents 6e519bd01615
children f5e4b5fd1f1e
files scripts/ChangeLog scripts/image/imwrite.m src/ChangeLog src/DLD-FUNCTIONS/__magick_read__.cc
diffstat 4 files changed, 31 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/ChangeLog	Wed May 27 15:28:50 2009 +0200
+++ b/scripts/ChangeLog	Wed May 27 10:34:59 2009 -0400
@@ -1,5 +1,8 @@
 2009-05-27  John W. Eaton  <jwe@octave.org>
 
+	* image/imwrite.m: Convert indexed images to RGB before calling
+	__magick_write__.
+
 	* image/imshow.m: In demo, convert image to rgb before scaling
 	components.  Use imread instead of loadimage.
 
--- a/scripts/image/imwrite.m	Wed May 27 15:28:50 2009 +0200
+++ b/scripts/image/imwrite.m	Wed May 27 10:34:59 2009 -0400
@@ -142,10 +142,19 @@
       error ("imwrite: %s invalid class for indexed image colormap",
              class (map));
     endif
+
+    ## FIXME -- we should really be writing indexed images here but
+    ## __magick_write__ needs to be fixed to handle them.
+
+    [r, g, b] = ind2rgb (img, map);
+    tmp = uint8 (cat (3, r, g, b) * 255);
+
     if (has_param_list)
-      __magick_write__ (filename, fmt, img, map, options);
+      __magick_write__ (filename, fmt, tmp, options);
+      ## __magick_write__ (filename, fmt, img, map, options);
     else
-      __magick_write__ (filename, fmt, img, map);
+      __magick_write__ (filename, fmt, tmp);
+      ## __magick_write__ (filename, fmt, img, map);
     endif
   endif
 
--- a/src/ChangeLog	Wed May 27 15:28:50 2009 +0200
+++ b/src/ChangeLog	Wed May 27 10:34:59 2009 -0400
@@ -1,3 +1,8 @@
+2009-05-27  John W. Eaton  <jwe@octave.org>
+
+	* DLD-FUNCTIONS/__magick_read__.cc (write_image):
+	Bail out if given indexed image.
+
 2009-05-27  Jaroslav Hajek  <highegg@gmail.com>
 
 	* DLD-FUNCTIONS/__magick_read__.cc (encode_map): Fix RGB color
--- a/src/DLD-FUNCTIONS/__magick_read__.cc	Wed May 27 15:28:50 2009 +0200
+++ b/src/DLD-FUNCTIONS/__magick_read__.cc	Wed May 27 10:34:59 2009 -0400
@@ -697,16 +697,24 @@
 {
   std::vector<Magick::Image> imvec;
 
+  bool has_map = map.is_defined ();
+
+  if (has_map)
+    {
+      error ("__magick_write__: direct saving of indexed images not currently supported; use ind2rgb and save converted image");
+      return;
+    }
+
   if (img.is_bool_type ())
     encode_bool_image (imvec, img);
   else if (img.is_uint8_type ())
-    encode_uint_image<uint8NDArray> (imvec, img, map.is_defined ());
+    encode_uint_image<uint8NDArray> (imvec, img, has_map);
   else if (img.is_uint16_type ())
-    encode_uint_image<uint16NDArray> (imvec, img, map.is_defined ());
+    encode_uint_image<uint16NDArray> (imvec, img, has_map);
   else
     error ("__magick_write__: image type not supported");
 
-  if (! error_state && map.is_defined ())
+  if (! error_state && has_map)
     {
       NDArray cmap = map.array_value ();
 
@@ -720,7 +728,7 @@
 
       // Insert calls here to handle parameters for various image formats
       if (fmt == "jpg" || fmt == "jpeg")
-        jpg_settings (imvec, options, map.is_defined ());
+        jpg_settings (imvec, options, has_map);
       else
         warning ("warning: your parameter(s) currently not supported");
     }