# HG changeset patch # User John W. Eaton # Date 1243434899 14400 # Node ID 86f475d5e7d11fd464e2ee6951637a5fdc650739 # Parent 6e519bd0161590b2fd61026d3facb2a2375d5a77 imwrite.m: convert indexed images to RGB before calling __magick_write__ diff -r 6e519bd01615 -r 86f475d5e7d1 scripts/ChangeLog --- 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 + * 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. diff -r 6e519bd01615 -r 86f475d5e7d1 scripts/image/imwrite.m --- 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 diff -r 6e519bd01615 -r 86f475d5e7d1 src/ChangeLog --- 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 + + * DLD-FUNCTIONS/__magick_read__.cc (write_image): + Bail out if given indexed image. + 2009-05-27 Jaroslav Hajek * DLD-FUNCTIONS/__magick_read__.cc (encode_map): Fix RGB color diff -r 6e519bd01615 -r 86f475d5e7d1 src/DLD-FUNCTIONS/__magick_read__.cc --- 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 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 (imvec, img, map.is_defined ()); + encode_uint_image (imvec, img, has_map); else if (img.is_uint16_type ()) - encode_uint_image (imvec, img, map.is_defined ()); + encode_uint_image (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"); }