Mercurial > octave-antonio
changeset 17086:3db796f89695
Rename private core_imfnc functions to follow the __fnc__ convention style.
author | Carnë Draug <carandraug@octave.org> |
---|---|
date | Fri, 26 Jul 2013 00:47:23 +0100 |
parents | d3ebc3f9bdbf |
children | bb3a1ec7cc4b |
files | scripts/image/imfinfo.m scripts/image/imformats.m scripts/image/imread.m scripts/image/imwrite.m scripts/image/module.mk scripts/image/private/__imfinfo__.m scripts/image/private/__imread__.m scripts/image/private/__imwrite__.m scripts/image/private/core_imfinfo.m scripts/image/private/core_imread.m scripts/image/private/core_imwrite.m scripts/image/private/imwrite_filename.m |
diffstat | 12 files changed, 373 insertions(+), 373 deletions(-) [+] |
line wrap: on
line diff
--- a/scripts/image/imfinfo.m Thu Jul 25 18:18:32 2013 -0400 +++ b/scripts/image/imfinfo.m Fri Jul 26 00:47:23 2013 +0100 @@ -120,5 +120,5 @@ elseif (nargin > 1 && ! ischar (varargin{2})) error ("imfinfo: EXT must be a string"); endif - info = imageIO (@core_imfinfo, "info", varargin, varargin{:}); + info = imageIO (@__imfinfo__, "info", varargin, varargin{:}); endfunction
--- a/scripts/image/imformats.m Thu Jul 25 18:18:32 2013 -0400 +++ b/scripts/image/imformats.m Fri Jul 26 00:47:23 2013 +0100 @@ -241,9 +241,9 @@ endfor ## the default info, read, and write functions - [formats.info ] = deal (@core_imfinfo); - [formats.read ] = deal (@core_imread); - [formats.write] = deal (@core_imwrite); + [formats.info ] = deal (@__imfinfo__); + [formats.read ] = deal (@__imread__); + [formats.write] = deal (@__imwrite__); ## fills rest of format information by checking with GraphicsMagick formats = __magick_formats__ (formats); @@ -270,7 +270,7 @@ function bool = isa_magick (coder, filename) bool = false; try - info = core_imfinfo (filename); + info = __imfinfo__ (filename); bool = strcmp (coder, info.Format); end_try_catch endfunction
--- a/scripts/image/imread.m Thu Jul 25 18:18:32 2013 -0400 +++ b/scripts/image/imread.m Fri Jul 26 00:47:23 2013 +0100 @@ -93,7 +93,7 @@ filename{2} = varargin{2}; endif - [varargout{1:nargout}] = imageIO (@core_imread, "read", filename, varargin{:}); + [varargout{1:nargout}] = imageIO (@__imread__, "read", filename, varargin{:}); endfunction %!testif HAVE_MAGICK
--- a/scripts/image/imwrite.m Thu Jul 25 18:18:32 2013 -0400 +++ b/scripts/image/imwrite.m Fri Jul 26 00:47:23 2013 +0100 @@ -78,7 +78,7 @@ endif warning ("imwrite: unlisted image format %s (see imformats). Trying to save anyway.", ext); - core_imwrite (varargin{:}); + __imwrite__ (varargin{:}); else fmt.write (varargin{:}); endif
--- a/scripts/image/module.mk Thu Jul 25 18:18:32 2013 -0400 +++ b/scripts/image/module.mk Fri Jul 26 00:47:23 2013 +0100 @@ -1,9 +1,9 @@ FCN_FILE_DIRS += image image_PRIVATE_FCN_FILES = \ - image/private/core_imfinfo.m \ - image/private/core_imread.m \ - image/private/core_imwrite.m \ + image/private/__imfinfo__.m \ + image/private/__imread__.m \ + image/private/__imwrite__.m \ image/private/imageIO.m \ image/private/imwrite_filename.m \ image/private/ind2x.m
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scripts/image/private/__imfinfo__.m Fri Jul 26 00:47:23 2013 +0100 @@ -0,0 +1,71 @@ +## Copyright (C) 2008-2012 Soren Hauberg +## Copyright (C) 2013 Carnë Draug +## +## This file is part of Octave. +## +## Octave is free software; you can redistribute it and/or modify it +## under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 3 of the License, or (at +## your option) any later version. +## +## Octave is distributed in the hope that it will be useful, but +## WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with Octave; see the file COPYING. If not, see +## <http://www.gnu.org/licenses/>. + +## This function does al the work of imfinfo. It exists here as private +## function so that imfinfo can use other functions if imformats is +## configured to. It is also needed so that imformats can create a +## function handle for it. + +## Author: Soren Hauberg <hauberg@gmail.com> + +function info = __imfinfo__ (filename, ext) + + if (nargin < 1 || nargin > 2) + print_usage ("imfinfo"); + endif + + if (! ischar (filename)) + error ("imfinfo: FILENAME must be a string"); + elseif (nargin >= 2 && ! ischar (ext)) + error ("imfinfo: EXT must be a string"); + endif + filename = tilde_expand (filename); + + delete_file = false; + unwind_protect + + fn = file_in_path (IMAGE_PATH, filename); + if (isempty (fn)) + ## We couldn't find the file so... + if (nargin >= 2) + ## try adding a possible file extesion + filename = [filename "." ext]; + fn = file_in_path (IMAGE_PATH, filename); + if (isempty (fn)) + error ("imfinfo: cannot find file %s", filename); + endif + else + ## try filename as an URL + [fn, status, msg] = urlwrite (filename, tmpnam ()); + if (! status) + error ("imfinfo: cannot find or download %s: %s", filename, msg); + endif + delete_file = true; + endif + endif + + info = __magick_finfo__ (fn); + + unwind_protect_cleanup + if (delete_file) + unlink (fn); + endif + end_unwind_protect + +endfunction
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scripts/image/private/__imread__.m Fri Jul 26 00:47:23 2013 +0100 @@ -0,0 +1,185 @@ +## Copyright (C) 2013 Carnë Draug +## Copyright (C) 2008-2012 Thomas L. Scofield +## Copyright (C) 2008 Kristian Rumberg +## Copyright (C) 2006 Thomas Weber +## Copyright (C) 2005 Stefan van der Walt +## Copyright (C) 2002 Andy Adler +## +## This file is part of Octave. +## +## Octave is free software; you can redistribute it and/or modify it +## under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 3 of the License, or (at +## your option) any later version. +## +## Octave is distributed in the hope that it will be useful, but +## WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with Octave; see the file COPYING. If not, see +## <http://www.gnu.org/licenses/>. + +## This function does all the work of imread. It exists here as private +## function so that imread can use other functions if imformats is +## configured to. It is also needed so that imformats can create a +## function handle for it. + +## Author: Carnë Draug <carandraug@octave.org> +## Author: Thomas L. Scofield <scofield@calvin.edu> +## Author: Kristian Rumberg <kristianrumberg@gmail.com> +## Author: Thomas Weber <thomas.weber.mail@gmail.com> +## Author: Stefan van der Walt <stefan@sun.ac.za> +## Author: Andy Adler + +function varargout = __imread__ (filename, varargin) + + if (nargin < 1) + print_usage ("imread"); + elseif (! ischar (filename)) + error ("imread: FILENAME must be a string"); + endif + + ## keep track of the varargin offset we're looking at each moment + offset = 1; + + filename = tilde_expand (filename); + fn = file_in_path (IMAGE_PATH, filename); + if (isempty (fn) && nargin >= offset + 1 && ischar (varargin{offset})) + ## if we can't find the file, check if the next input is the file extension + filename = [filename "." varargin{offset}]; + fn = file_in_path (IMAGE_PATH, filename); + offset++; + endif + if (isempty (fn)) + error ("imread: cannot find %s", filename); + endif + + ## set default for options + options = struct ("index", 1); + + ## Index is the only option that can be defined without the parameter/value + ## pair style. When defining it here, the string "all" is invalid though. + if (nargin >= offset + 1 && ! ischar (varargin{offset})) + if (! is_valid_index_option (options.index)) + error ("imread: IDX must be a numeric vector"); + endif + options.index = varargin{offset}; + offset++; + endif + + if (rem (numel (varargin) - offset + 1, 2) != 0) + error ("imread: no pair for all arguments (even number left)"); + endif + + for idx = offset:2:(numel (varargin) - offset + 1) + + switch (tolower (varargin{idx})) + + case {"frames", "index"}, + options.index = varargin{idx+1}; + if (! (is_valid_index_option (options.index)) && + ! (ischar (options.index) && strcmpi (options.index, "all"))) + error ("imread: value for %s must be a vector or the string `all'"); + endif + +## FIXME: commented until it's implemented in __magick_read__ +## case "pixelregion", +## options.region = varargin{idx+1}; +## if (! iscell (options.region) || numel (options.region) != 2) +## error ("imread: value for %s must be a 2 element cell array", +## varargin{idx}); +## endif +## for reg_idx = 1:2 +## if (numel (options.region{reg_idx}) == 3) +## ## do nothing +## elseif (numel (options.region{reg_idx}) == 2) +## options.region{reg_idx}(3) = options.region{reg_idx}(2); +## options.region{reg_idx}(2) = 1; +## else +## error ("imread: range for %s must be a 2 or 3 element vector", +## varargin{idx}); +## endif +## options.region{reg_idx} = floor (options.region{reg_idx}(1)): ... +## floor (options.region{reg_idx}(2)): ... +## floor (options.region{reg_idx}(3)); +## endfor + + case "info", + ## We ignore this option. This parameter exists in Matlab to + ## speed up the reading of multipage TIFF. It makes no difference + ## for us since we're already quite efficient. + + otherwise + error ("imread: invalid PARAMETER `%s'", varargin{idx}); + + endswitch + endfor + + try + [varargout{1:nargout}] = __magick_read__ (fn, options); + + catch + ## If we can't read it with Magick, maybe the image is in Octave's + ## native image format. This is from back before Octave had 'imread' + ## and 'imwrite'. Then we had the functions 'loadimage' and 'saveimage'. + ## + ## This "image format" seems to be any file that can be read with + ## load() and contains 2 variables. The variable named "map" is a + ## colormap and must exist whether the image is indexed or not. The + ## other variable must be named "img" or "X" for a "normal" or + ## indexed image. + ## + ## FIXME: this has been deprecated for the next major release (3.8 or 4.0). + ## If someone wants to revive this as yet another image format, a + ## separate Octave package can be written for it, that register the + ## format through imformats. + + magick_error = lasterr (); + + img_field = false; + x_field = false; + map_field = false; + + try + vars = load (fn); + if (isstruct (vars)) + img_field = isfield (vars, "img"); + x_field = isfield (vars, "X"); + map_field = isfield (vars, "map"); + endif + catch + error ("imread: invalid image file: %s", magick_error); + end_try_catch + + if (map_field && (img_field || x_field)) + varargout{2} = vars.map; + if (img_field) + varargout{1} = vars.img; + else + varargout{1} = vars.X; + endif + persistent warned = false; + if (! warned) + warning ("Octave's native image format has been deprecated."); + warned = true; + endif + else + error ("imread: invalid Octave image file format"); + endif + + end_try_catch + +endfunction + +## Tests if the value passed to the Index or Frames is valid. This option +## can be defined in two places, but only in one place can it also be the +## string "all" +function bool = is_valid_index_option (arg) + ## is the index option + bool = false; + if (isvector (arg) && isnumeric (arg) && isreal (arg)) + bool = true; + endif +endfunction
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scripts/image/private/__imwrite__.m Fri Jul 26 00:47:23 2013 +0100 @@ -0,0 +1,105 @@ +## Copyright (C) 2008-2012 John W. Eaton +## Copyright (C) 2013 Carnë Draug +## +## This file is part of Octave. +## +## Octave is free software; you can redistribute it and/or modify it +## under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 3 of the License, or (at +## your option) any later version. +## +## Octave is distributed in the hope that it will be useful, but +## WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with Octave; see the file COPYING. If not, see +## <http://www.gnu.org/licenses/>. + +## This function does all the work of imwrite. It exists here as private +## function so that imwrite can use other functions if imformats is +## configured to. It is also needed so that imformats can create a +## function handle for it. + +function __imwrite__ (img, varargin) + + if (nargin < 2 || ! (isnumeric (img) || islogical (img))) + print_usage ("imwrite"); + endif + + [filename, ext, map, param_list] = imwrite_filename (varargin{:}); + + if (rem (numel (param_list), 2) != 0) + error ("imwrite: no pair for all arguments (even number left)"); + endif + + ## set default for options + options = struct ("writemode", "overwrite", + "quality", 75); + + for idx = 1:2:numel (param_list) + + switch (tolower (param_list{idx})) + + case "writemode", + options.writemode = param_list{idx+1}; + if (! ischar (options.writemode) || + ! any (strcmpi (options.writemode, {"append", "overwrite"}))) + error ("imwrite: value for %s option must be \"append\" or \"overwrite\"", + param_list{idx}); + endif + options.writemode = tolower (options.writemode); + + case "quality", + options.quality = param_list{idx+1}; + if (! isnumeric (options.quality) || ! isscalar (options.quality) || + options.quality < 0 || options.quality > 100) + error ("imwrite: value for %s option must be a scalar between 0 and 100", + param_list{idx}); + endif + options.quality = round (options.quality); + + otherwise + error ("imwrite: invalid PARAMETER `%s'", varargin{idx}); + + endswitch + endfor + + if (isempty (img)) + error ("imwrite: invalid empty image"); + elseif (issparse (img) || issparse (map)) + error ("imwrite: sparse images not supported"); + endif + + if (! isempty (map)) + if (! iscolormap (map)) + error ("imwrite: invalid MAP for indexed image"); + elseif (ndims (img) != 2 && ndims (img) != 4) + error ("imwrite: indexed image must have 2 or 4 dimensions (found %i)", ndims (img)); + endif + ## FIXME: we should really be writing indexed images but that needs + ## to be implemented in __magick_write__(). So we convert + ## them to RGB and write them "normally". + warned = false; + if (! warned) + warning ("imwrite: saving of indexed images is not yet implemented. Will save a RGB image."); + warned = true; + endif + img = ind2rgb (img, map); + map = []; + endif + + if (ndims (img) > 4) + error ("imwrite: invalid %d-dimensional image data", ndims (img)); + elseif (all (size (img, 3) != [1 3])) + ## This test needs to be adjusted if one day we implement alternative + ## colorspaces. In the mean time, we only have grayscale and RGB images, + ## but CMYK means length 4 in the 3rd dimension. + error ("imwrite: IMG 3rd dimension must be 1 or 3"); + endif + + ## FIXME: do we need to convert the image class? + __magick_write__ (filename, ext, img, map, options); + +endfunction
--- a/scripts/image/private/core_imfinfo.m Thu Jul 25 18:18:32 2013 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,71 +0,0 @@ -## Copyright (C) 2008-2012 Soren Hauberg -## Copyright (C) 2013 Carnë Draug -## -## This file is part of Octave. -## -## Octave is free software; you can redistribute it and/or modify it -## under the terms of the GNU General Public License as published by -## the Free Software Foundation; either version 3 of the License, or (at -## your option) any later version. -## -## Octave is distributed in the hope that it will be useful, but -## WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -## General Public License for more details. -## -## You should have received a copy of the GNU General Public License -## along with Octave; see the file COPYING. If not, see -## <http://www.gnu.org/licenses/>. - -## This function does al the work of imfinfo. It exists here as private -## function so that imfinfo can use other functions if imformats is -## configured to. It is also needed so that imformats can create a -## function handle for it. - -## Author: Soren Hauberg <hauberg@gmail.com> - -function info = core_imfinfo (filename, ext) - - if (nargin < 1 || nargin > 2) - print_usage ("imfinfo"); - endif - - if (! ischar (filename)) - error ("imfinfo: FILENAME must be a string"); - elseif (nargin >= 2 && ! ischar (ext)) - error ("imfinfo: EXT must be a string"); - endif - filename = tilde_expand (filename); - - delete_file = false; - unwind_protect - - fn = file_in_path (IMAGE_PATH, filename); - if (isempty (fn)) - ## We couldn't find the file so... - if (nargin >= 2) - ## try adding a possible file extesion - filename = [filename "." ext]; - fn = file_in_path (IMAGE_PATH, filename); - if (isempty (fn)) - error ("imfinfo: cannot find file %s", filename); - endif - else - ## try filename as an URL - [fn, status, msg] = urlwrite (filename, tmpnam ()); - if (! status) - error ("imfinfo: cannot find or download %s: %s", filename, msg); - endif - delete_file = true; - endif - endif - - info = __magick_finfo__ (fn); - - unwind_protect_cleanup - if (delete_file) - unlink (fn); - endif - end_unwind_protect - -endfunction
--- a/scripts/image/private/core_imread.m Thu Jul 25 18:18:32 2013 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,185 +0,0 @@ -## Copyright (C) 2013 Carnë Draug -## Copyright (C) 2008-2012 Thomas L. Scofield -## Copyright (C) 2008 Kristian Rumberg -## Copyright (C) 2006 Thomas Weber -## Copyright (C) 2005 Stefan van der Walt -## Copyright (C) 2002 Andy Adler -## -## This file is part of Octave. -## -## Octave is free software; you can redistribute it and/or modify it -## under the terms of the GNU General Public License as published by -## the Free Software Foundation; either version 3 of the License, or (at -## your option) any later version. -## -## Octave is distributed in the hope that it will be useful, but -## WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -## General Public License for more details. -## -## You should have received a copy of the GNU General Public License -## along with Octave; see the file COPYING. If not, see -## <http://www.gnu.org/licenses/>. - -## This function does all the work of imread. It exists here as private -## function so that imread can use other functions if imformats is -## configured to. It is also needed so that imformats can create a -## function handle for it. - -## Author: Carnë Draug <carandraug@octave.org> -## Author: Thomas L. Scofield <scofield@calvin.edu> -## Author: Kristian Rumberg <kristianrumberg@gmail.com> -## Author: Thomas Weber <thomas.weber.mail@gmail.com> -## Author: Stefan van der Walt <stefan@sun.ac.za> -## Author: Andy Adler - -function varargout = core_imread (filename, varargin) - - if (nargin < 1) - print_usage ("imread"); - elseif (! ischar (filename)) - error ("imread: FILENAME must be a string"); - endif - - ## keep track of the varargin offset we're looking at each moment - offset = 1; - - filename = tilde_expand (filename); - fn = file_in_path (IMAGE_PATH, filename); - if (isempty (fn) && nargin >= offset + 1 && ischar (varargin{offset})) - ## if we can't find the file, check if the next input is the file extension - filename = [filename "." varargin{offset}]; - fn = file_in_path (IMAGE_PATH, filename); - offset++; - endif - if (isempty (fn)) - error ("imread: cannot find %s", filename); - endif - - ## set default for options - options = struct ("index", 1); - - ## Index is the only option that can be defined without the parameter/value - ## pair style. When defining it here, the string "all" is invalid though. - if (nargin >= offset + 1 && ! ischar (varargin{offset})) - if (! is_valid_index_option (options.index)) - error ("imread: IDX must be a numeric vector"); - endif - options.index = varargin{offset}; - offset++; - endif - - if (rem (numel (varargin) - offset + 1, 2) != 0) - error ("imread: no pair for all arguments (even number left)"); - endif - - for idx = offset:2:(numel (varargin) - offset + 1) - - switch (tolower (varargin{idx})) - - case {"frames", "index"}, - options.index = varargin{idx+1}; - if (! (is_valid_index_option (options.index)) && - ! (ischar (options.index) && strcmpi (options.index, "all"))) - error ("imread: value for %s must be a vector or the string `all'"); - endif - -## FIXME: commented until it's implemented in __magick_read__ -## case "pixelregion", -## options.region = varargin{idx+1}; -## if (! iscell (options.region) || numel (options.region) != 2) -## error ("imread: value for %s must be a 2 element cell array", -## varargin{idx}); -## endif -## for reg_idx = 1:2 -## if (numel (options.region{reg_idx}) == 3) -## ## do nothing -## elseif (numel (options.region{reg_idx}) == 2) -## options.region{reg_idx}(3) = options.region{reg_idx}(2); -## options.region{reg_idx}(2) = 1; -## else -## error ("imread: range for %s must be a 2 or 3 element vector", -## varargin{idx}); -## endif -## options.region{reg_idx} = floor (options.region{reg_idx}(1)): ... -## floor (options.region{reg_idx}(2)): ... -## floor (options.region{reg_idx}(3)); -## endfor - - case "info", - ## We ignore this option. This parameter exists in Matlab to - ## speed up the reading of multipage TIFF. It makes no difference - ## for us since we're already quite efficient. - - otherwise - error ("imread: invalid PARAMETER `%s'", varargin{idx}); - - endswitch - endfor - - try - [varargout{1:nargout}] = __magick_read__ (fn, options); - - catch - ## If we can't read it with Magick, maybe the image is in Octave's - ## native image format. This is from back before Octave had 'imread' - ## and 'imwrite'. Then we had the functions 'loadimage' and 'saveimage'. - ## - ## This "image format" seems to be any file that can be read with - ## load() and contains 2 variables. The variable named "map" is a - ## colormap and must exist whether the image is indexed or not. The - ## other variable must be named "img" or "X" for a "normal" or - ## indexed image. - ## - ## FIXME: this has been deprecated for the next major release (3.8 or 4.0). - ## If someone wants to revive this as yet another image format, a - ## separate Octave package can be written for it, that register the - ## format through imformats. - - magick_error = lasterr (); - - img_field = false; - x_field = false; - map_field = false; - - try - vars = load (fn); - if (isstruct (vars)) - img_field = isfield (vars, "img"); - x_field = isfield (vars, "X"); - map_field = isfield (vars, "map"); - endif - catch - error ("imread: invalid image file: %s", magick_error); - end_try_catch - - if (map_field && (img_field || x_field)) - varargout{2} = vars.map; - if (img_field) - varargout{1} = vars.img; - else - varargout{1} = vars.X; - endif - persistent warned = false; - if (! warned) - warning ("Octave's native image format has been deprecated."); - warned = true; - endif - else - error ("imread: invalid Octave image file format"); - endif - - end_try_catch - -endfunction - -## Tests if the value passed to the Index or Frames is valid. This option -## can be defined in two places, but only in one place can it also be the -## string "all" -function bool = is_valid_index_option (arg) - ## is the index option - bool = false; - if (isvector (arg) && isnumeric (arg) && isreal (arg)) - bool = true; - endif -endfunction
--- a/scripts/image/private/core_imwrite.m Thu Jul 25 18:18:32 2013 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,105 +0,0 @@ -## Copyright (C) 2008-2012 John W. Eaton -## Copyright (C) 2013 Carnë Draug -## -## This file is part of Octave. -## -## Octave is free software; you can redistribute it and/or modify it -## under the terms of the GNU General Public License as published by -## the Free Software Foundation; either version 3 of the License, or (at -## your option) any later version. -## -## Octave is distributed in the hope that it will be useful, but -## WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -## General Public License for more details. -## -## You should have received a copy of the GNU General Public License -## along with Octave; see the file COPYING. If not, see -## <http://www.gnu.org/licenses/>. - -## This function does all the work of imwrite. It exists here as private -## function so that imwrite can use other functions if imformats is -## configured to. It is also needed so that imformats can create a -## function handle for it. - -function core_imwrite (img, varargin) - - if (nargin < 2 || ! (isnumeric (img) || islogical (img))) - print_usage ("imwrite"); - endif - - [filename, ext, map, param_list] = imwrite_filename (varargin{:}); - - if (rem (numel (param_list), 2) != 0) - error ("imwrite: no pair for all arguments (even number left)"); - endif - - ## set default for options - options = struct ("writemode", "overwrite", - "quality", 75); - - for idx = 1:2:numel (param_list) - - switch (tolower (param_list{idx})) - - case "writemode", - options.writemode = param_list{idx+1}; - if (! ischar (options.writemode) || - ! any (strcmpi (options.writemode, {"append", "overwrite"}))) - error ("imwrite: value for %s option must be \"append\" or \"overwrite\"", - param_list{idx}); - endif - options.writemode = tolower (options.writemode); - - case "quality", - options.quality = param_list{idx+1}; - if (! isnumeric (options.quality) || ! isscalar (options.quality) || - options.quality < 0 || options.quality > 100) - error ("imwrite: value for %s option must be a scalar between 0 and 100", - param_list{idx}); - endif - options.quality = round (options.quality); - - otherwise - error ("imwrite: invalid PARAMETER `%s'", varargin{idx}); - - endswitch - endfor - - if (isempty (img)) - error ("imwrite: invalid empty image"); - elseif (issparse (img) || issparse (map)) - error ("imwrite: sparse images not supported"); - endif - - if (! isempty (map)) - if (! iscolormap (map)) - error ("imwrite: invalid MAP for indexed image"); - elseif (ndims (img) != 2 && ndims (img) != 4) - error ("imwrite: indexed image must have 2 or 4 dimensions (found %i)", ndims (img)); - endif - ## FIXME: we should really be writing indexed images but that needs - ## to be implemented in __magick_write__(). So we convert - ## them to RGB and write them "normally". - warned = false; - if (! warned) - warning ("imwrite: saving of indexed images is not yet implemented. Will save a RGB image."); - warned = true; - endif - img = ind2rgb (img, map); - map = []; - endif - - if (ndims (img) > 4) - error ("imwrite: invalid %d-dimensional image data", ndims (img)); - elseif (all (size (img, 3) != [1 3])) - ## This test needs to be adjusted if one day we implement alternative - ## colorspaces. In the mean time, we only have grayscale and RGB images, - ## but CMYK means length 4 in the 3rd dimension. - error ("imwrite: IMG 3rd dimension must be 1 or 3"); - endif - - ## FIXME: do we need to convert the image class? - __magick_write__ (filename, ext, img, map, options); - -endfunction
--- a/scripts/image/private/imwrite_filename.m Thu Jul 25 18:18:32 2013 -0400 +++ b/scripts/image/private/imwrite_filename.m Fri Jul 26 00:47:23 2013 +0100 @@ -18,9 +18,9 @@ ## The input check for imwrite needs to be done twice, once when imwrite ## is called the first time to find where the filename is, and a second -## time by core_imwrite after imformats decides what function to use. +## time by __imwrite__ after imformats decides what function to use. ## Because a user can, and is encouraged to, get a function handle to -## core_imwrite, the input check is also done there. +## __imwrite__, the input check is also done there. ## In addition, the input check for imwrite is not that straightforward ## in order to support the multiple ways the function can be called, ## and interpretations of Matlab documentation.