% IMAGE IMAGE Image Display Function
% 
% Usage
% 
% The image command has the following general syntax
% 
%   handle = image(x,y,C,properties...)
% 
% where x is a two vector containing the x coordinates
% of the first and last pixels along a column, and y is a
% two vector containing the y coordinates of the first and
% last pixels along a row.  The matrix C constitutes the
% image data.  It must either be a scalar matrix, in which case
% the image is colormapped using the  colormap for the current
% figure.  If the matrix is M x N x 3, then C is intepreted
% as RGB data, and the image is not colormapped.  The properties
% argument is a set of property/value pairs that affect the
% final image.  You can also omit the x and y, 
% 
%   handle = image(C, properties...)
% 
% in which case they default to x = [1,size(C,2)] and 
% y = [1,size(C,1)].  Finally, you can use the image function
% with only formal arguments
% 
%   handle = image(properties...)
% 
% 
% To support legacy FreeMat code, you can also use the following
% form of image
% 
%   image(C, zoomfactor)
% 
% which is equivalent to image(C) with the axes removed so that
% the image takes up the full figure window, and the size of the
% figure window adjusted to achieve the desired zoom factor using the
% zoom command.

% Copyright (c) 2002-2006 Samit Basu

function ohandle = image(varargin)
  ax = newplot;
  if (length(varargin) == 0), return; end
  % check for formal syntax
  if (isstr(varargin{1}))
    handle = himage(varargin{:});
  elseif ((length(varargin) == 1) | ((length(varargin) > 1) & (isstr(varargin{2}))))
    C = varargin{1}; varargin(1) = [];
    cols = max(2,size(C,2));
    rows = max(2,size(C,1));
    handle = himage('cdata',C,'xdata',[1,cols],'ydata',[1,rows],varargin{:});
    axis(ax,'image');
  elseif (numel(varargin) == 2)
    C = varargin{1};
    cols = max(2,size(C,2));
    rows = max(2,size(C,1));
    handle = himage('cdata',C,'xdata',[1,cols],'ydata',[1,rows]);
    axis maximal;
    axis tight;
    zoom(varargin{2});
  elseif (length(varargin) >= 3)
    x = varargin{1};
    y = varargin{2};
    C = varargin{3};
    varargin(1:3) = [];
    handle = himage('xdata',x,'ydata',y,'cdata',C,varargin{:});
    axis(ax,'image');
  else
    error('Unrecognized form of image command');
  end
  if (nargout > 0)
      ohandle = handle;
  end
