view scripts/image/private/__imwrite__.m @ 17184:abf384f5d243

maint: Remove unneeded input validation from internal fcns in private/ directories. * scripts/general/private/__isequal__.m, scripts/general/private/__splinen__.m, scripts/image/private/__imwrite__.m, scripts/image/private/ind2x.m, scripts/miscellaneous/private/__xzip__.m, scripts/miscellaneous/private/display_info_file.m, scripts/pkg/private/describe.m, scripts/pkg/private/get_forge_pkg.m, scripts/pkg/private/unload_packages.m, scripts/plot/private/__actual_axis_position__.m, scripts/plot/private/__add_datasource__.m, scripts/plot/private/__clabel__.m, scripts/plot/private/__errcomm__.m, scripts/plot/private/__errplot__.m, scripts/plot/private/__fltk_print__.m, scripts/plot/private/__gnuplot_get_var__.m, scripts/plot/private/__go_draw_axes__.m, scripts/plot/private/__go_draw_figure__.m, scripts/plot/private/__interp_cube__.m, scripts/plot/private/__line__.m, scripts/plot/private/__next_line_color__.m, scripts/plot/private/__next_line_style__.m, scripts/plot/private/__plt__.m, scripts/plot/private/__pltopt__.m, scripts/signal/private/rectangle_lw.m, scripts/signal/private/rectangle_sw.m, scripts/signal/private/triangle_lw.m, scripts/signal/private/triangle_sw.m, scripts/sparse/private/__sprand_impl__.m, scripts/statistics/models/private/logistic_regression_derivatives.m, scripts/statistics/models/private/logistic_regression_likelihood.m: Remove unneeded input validation from internal fcns in private/ directories.
author Rik <rik@octave.org>
date Sun, 04 Aug 2013 18:13:08 -0700
parents 3db796f89695
children 46805642048f
line wrap: on
line source

## 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 (odd 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 (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 an 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