| time  | Calls  |  line | 
|---|
|  |  |    1  | function imwrite(varargin)
 | 
|  |  |    2  | %IMWRITE Write image to graphics file.
 | 
|  |  |    3  | %   IMWRITE(A,FILENAME,FMT) writes the image A to the file specified by
 | 
|  |  |    4  | %   FILENAME in the format specified by FMT.
 | 
|  |  |    5  | %
 | 
|  |  |    6  | %   A can be an M-by-N (grayscale image) or M-by-N-by-3 (color image)
 | 
|  |  |    7  | %   array.  A cannot be an empty array.  If the format specified is TIFF,
 | 
|  |  |    8  | %   IMWRITE can also accept an M-by-N-by-4 array containing color data
 | 
|  |  |    9  | %   that uses the CMYK color space.
 | 
|  |  |   10  | %
 | 
|  |  |   11  | %   FILENAME is a character vector or string scalar that specifies the name of the file.
 | 
|  |  |   12  | %
 | 
|  |  |   13  | %   FMT is a character vector or string scalar specifying the format of the file.  See the reference
 | 
|  |  |   14  | %   page, or the output of the IMFORMATS function, for a list of
 | 
|  |  |   15  | %   supported formats.
 | 
|  |  |   16  | %
 | 
|  |  |   17  | %   IMWRITE(X,MAP,FILENAME,FMT) writes the indexed image in X and its
 | 
|  |  |   18  | %   associated colormap MAP to FILENAME in the format specified by FMT.
 | 
|  |  |   19  | %   If X is of class uint8 or uint16, IMWRITE writes the actual values in 
 | 
|  |  |   20  | %   the array to the file.  If X is of class double, IMWRITE offsets the
 | 
|  |  |   21  | %   values in the array before writing, using uint8(X-1).  MAP must be a
 | 
|  |  |   22  | %   valid MATLAB colormap.  Note that most image file formats do not
 | 
|  |  |   23  | %   support colormaps with more than 256 entries.
 | 
|  |  |   24  | %
 | 
|  |  |   25  | %   When writing multiframe GIF images, X should be an 4-dimensional
 | 
|  |  |   26  | %   M-by-N-by-1-by-P array, where P is the number of frames to write.
 | 
|  |  |   27  | %
 | 
|  |  |   28  | %   IMWRITE(...,FILENAME) writes the image to FILENAME, inferring the
 | 
|  |  |   29  | %   format to use from the filename's extension. The extension must be
 | 
|  |  |   30  | %   one of the legal values for FMT. 
 | 
|  |  |   31  | %
 | 
|  |  |   32  | %   IMWRITE(...,PARAM1,VAL1,PARAM2,VAL2,...) specifies parameters that
 | 
|  |  |   33  | %   control various characteristics of the output file. Parameters are
 | 
|  |  |   34  | %   currently supported for GIF, HDF, JPEG, TIFF, PNG, PBM, PGM, and PPM
 | 
|  |  |   35  | %   files.
 | 
|  |  |   36  | %   
 | 
|  |  |   37  | %   IMWRITE(...,IRI) writes image at a remote location. When
 | 
|  |  |   38  | %   writing data to remote locations, you must specify the full path
 | 
|  |  |   39  | %   using an internationalized resource identifier (IRI). For example, to
 | 
|  |  |   40  | %   write an image from Amazon S3 cloud specify the full IRI for the image:
 | 
|  |  |   41  | %       s3://bucketname/path_to_file/my_image.jpg
 | 
|  |  |   42  | %
 | 
|  |  |   43  | %   IMWRITE(...,IRI,'WriteMode','append') appends a frame to a TIF or GIF file
 | 
|  |  |   44  | %   at a remote location. When writing data to remote locations, you must 
 | 
|  |  |   45  | %   specify the full path using an internationalized resource identifier (IRI).
 | 
|  |  |   46  | %   For example, to write an image from Amazon S3 cloud specify the full IRI
 | 
|  |  |   47  | %   for the image:
 | 
|  |  |   48  | %       s3://bucketname/path_to_file/my_image.jpg
 | 
|  |  |   49  | %   For more information on accessing remote data, see "Work With Remote Data"
 | 
|  |  |   50  | %   in the documentation.
 | 
|  |  |   51  | %
 | 
|  |  |   52  | %   Class Support
 | 
|  |  |   53  | %   -------------
 | 
|  |  |   54  | %   The input array A can be of class logical, uint8, uint16, single, or 
 | 
|  |  |   55  | %   double.  Indexed images (X) can be of class uint8, uint16, single, or 
 | 
|  |  |   56  | %   double; the associated colormap, MAP, must be double.  Input values 
 | 
|  |  |   57  | %   must be full (non-sparse).
 | 
|  |  |   58  | %
 | 
|  |  |   59  | %   The class of the image written to the file depends on the format
 | 
|  |  |   60  | %   specified.  For most formats, if the input array is of class uint8,
 | 
|  |  |   61  | %   IMWRITE outputs the data as 8-bit values.  If the input array is of
 | 
|  |  |   62  | %   class uint16 and the format supports 16-bit data (JPEG, PNG, and
 | 
|  |  |   63  | %   TIFF), IMWRITE outputs the data as 16-bit values.  If the format does
 | 
|  |  |   64  | %   not support 16-bit values, IMWRITE issues an error.  Several formats,
 | 
|  |  |   65  | %   such as JPEG and PNG, support a parameter that lets you specify the
 | 
|  |  |   66  | %   bit depth of the output data.
 | 
|  |  |   67  | %
 | 
|  |  |   68  | %   If the input array is of class double, and the image is a grayscale
 | 
|  |  |   69  | %   or RGB color image, IMWRITE assumes the dynamic range is [0,1] and
 | 
|  |  |   70  | %   automatically scales the data by 255 before writing it to the file as
 | 
|  |  |   71  | %   8-bit values.
 | 
|  |  |   72  | %
 | 
|  |  |   73  | %   If the input array is of class double, and the image is an indexed
 | 
|  |  |   74  | %   image, IMWRITE converts the indices to zero-based indices by
 | 
|  |  |   75  | %   subtracting 1 from each element, and then writes the data as uint8.
 | 
|  |  |   76  | %
 | 
|  |  |   77  | %   If the input array is of class logical, IMWRITE assumes the data is a
 | 
|  |  |   78  | %   binary image and writes it to the file with a bit depth of 1, if the
 | 
|  |  |   79  | %   format allows it.  BMP, PNG, or TIFF formats accept binary images as
 | 
|  |  |   80  | %   input arrays.
 | 
|  |  |   81  | %
 | 
|  |  |   82  | %   GIF-specific parameters
 | 
|  |  |   83  | %   -----------------------
 | 
|  |  |   84  | %
 | 
|  |  |   85  | %   'WriteMode'         One of these values: 'overwrite' (the default)
 | 
|  |  |   86  | %                       or 'append'.  In append mode, a single frame is
 | 
|  |  |   87  | %                       added to the existing file.
 | 
|  |  |   88  | %
 | 
|  |  |   89  | %   'Comment'           A character vector or cell array of character
 | 
|  |  |   90  | %                       vector or string scalar or string array,
 | 
|  |  |   91  | %                       containing a comment to be added to the image.  For
 | 
|  |  |   92  | %                       a cell array of character vector or string array,
 | 
|  |  |   93  | %                       a carriage return is added after each row.
 | 
|  |  |   94  | %
 | 
|  |  |   95  | %   'DisposalMethod'    One of the following values, which sets the 
 | 
|  |  |   96  | %                       disposal method of an animated GIF:
 | 
|  |  |   97  | %                       'leaveInPlace', 'restoreBG', 'restorePrevious',
 | 
|  |  |   98  | %                       or 'doNotSpecify'.
 | 
|  |  |   99  | %
 | 
|  |  |  100  | %   'DelayTime'         A scalar value between 0 and 655 inclusive, which
 | 
|  |  |  101  | %                       specifies the delay in seconds before displaying
 | 
|  |  |  102  | %                       the next image. 
 | 
|  |  |  103  | %   
 | 
|  |  |  104  | %   'TransparentColor'  A scalar integer.  This value specifies which
 | 
|  |  |  105  | %                       index in the colormap should be treated as the
 | 
|  |  |  106  | %                       transparent color for the image.  If X is uint8
 | 
|  |  |  107  | %                       or logical, then indexing starts at 0.  If X is
 | 
|  |  |  108  | %                       double, then indexing starts at 1.
 | 
|  |  |  109  | %
 | 
|  |  |  110  | %   'BackgroundColor'   A scalar integer.  This value specifies which
 | 
|  |  |  111  | %                       index in the colormap should be treated as the
 | 
|  |  |  112  | %                       background color for the image and is used for
 | 
|  |  |  113  | %                       certain disposal methods in animated GIFs.  If X
 | 
|  |  |  114  | %                       is uint8 or logical, then indexing starts at 0.
 | 
|  |  |  115  | %                       If X is double, then indexing starts at 1.
 | 
|  |  |  116  | %
 | 
|  |  |  117  | %   'LoopCount'         A finite integer between 0 and 65535 or the value
 | 
|  |  |  118  | %                       Inf (the default) which specifies the number of
 | 
|  |  |  119  | %                       times to repeat the animation.  By default, the
 | 
|  |  |  120  | %                       animation will continuously loop.  For a value of
 | 
|  |  |  121  | %                       0, the animation will be played once.  For a
 | 
|  |  |  122  | %                       value of 1, the animation will be played twice,
 | 
|  |  |  123  | %                       etc.
 | 
|  |  |  124  | %
 | 
|  |  |  125  | %   'ScreenSize'        A two element vector specifying the screen height
 | 
|  |  |  126  | %                       and width of the frame.  When used with
 | 
|  |  |  127  | %                       'Location', this provides a way to write frames
 | 
|  |  |  128  | %                       to the image which are smaller than the whole
 | 
|  |  |  129  | %                       frame.  The remaining values are filled in
 | 
|  |  |  130  | %                       according to the 'DisposalMethod'.
 | 
|  |  |  131  | %
 | 
|  |  |  132  | %   'Location'          A two element vector specifying the offset of the
 | 
|  |  |  133  | %                       top left corner of the screen relative to the top
 | 
|  |  |  134  | %                       left corner of the image.  The first element is
 | 
|  |  |  135  | %                       the offset from the top, and the second element
 | 
|  |  |  136  | %                       is the offset from the left.
 | 
|  |  |  137  | %
 | 
|  |  |  138  | %   HDF-specific parameters
 | 
|  |  |  139  | %   -----------------------
 | 
|  |  |  140  | %   'Compression'  One of these values: 'none' (the default), 
 | 
|  |  |  141  | %                  'rle' (only valid for grayscale and indexed
 | 
|  |  |  142  | %                  images), 'jpeg' (only valid for grayscale
 | 
|  |  |  143  | %                  and RGB images)
 | 
|  |  |  144  | %
 | 
|  |  |  145  | %   'Quality'      A number between 0 and 100; parameter applies
 | 
|  |  |  146  | %                  only if 'Compression' is 'jpeg'; higher
 | 
|  |  |  147  | %                  numbers mean quality is better (less image
 | 
|  |  |  148  | %                  degradation due to compression), but the
 | 
|  |  |  149  | %                  resulting file size is larger 
 | 
|  |  |  150  | %
 | 
|  |  |  151  | %   'WriteMode'    One of these values: 'overwrite' (the
 | 
|  |  |  152  | %                  default) or 'append'
 | 
|  |  |  153  | %
 | 
|  |  |  154  | %   JPEG-specific parameters
 | 
|  |  |  155  | %   ------------------------
 | 
|  |  |  156  | %   'Quality'      A number between 0 and 100; higher numbers
 | 
|  |  |  157  | %                  mean quality is better (less image degradation
 | 
|  |  |  158  | %                  due to compression), but the resulting file
 | 
|  |  |  159  | %                  size is larger
 | 
|  |  |  160  | %
 | 
|  |  |  161  | %   'Comment'      Comment must be a column containing text specified as
 | 
|  |  |  162  | %                  chars, strings, cell array of character vectors, 
 | 
|  |  |  163  | %                  or string array.  Each row of input is written out
 | 
|  |  |  164  | %                  as a comment in the JPEG file.
 | 
|  |  |  165  | %
 | 
|  |  |  166  | %   'Mode'         Either 'lossy' (the default) or 'lossless'
 | 
|  |  |  167  | %
 | 
|  |  |  168  | %   'BitDepth'     A scalar value indicating desired bitdepth;
 | 
|  |  |  169  | %                  for grayscale images this can be 8, 12, or 16;
 | 
|  |  |  170  | %                  for truecolor images this can be 8 or 12.  Only
 | 
|  |  |  171  | %                  lossless mode is supported for 16-bit images.
 | 
|  |  |  172  | %
 | 
|  |  |  173  | %   JPEG2000-specific parameters
 | 
|  |  |  174  | %   ----------------------------
 | 
|  |  |  175  | %   'Mode'             Either 'lossy' (the default) or 'lossless'.
 | 
|  |  |  176  | %   
 | 
|  |  |  177  | %   'CompressionRatio' A real value greater than 1 specifying the target 
 | 
|  |  |  178  | %                      compression ratio which is defined as the ratio of 
 | 
|  |  |  179  | %                      input image size to the output compressed size. For
 | 
|  |  |  180  | %                      example, a value of 2.0 implies that the output
 | 
|  |  |  181  | %                      image size will be half of the input image size or
 | 
|  |  |  182  | %                      less. A higher value implies a smaller file size and
 | 
|  |  |  183  | %                      reduced image quality. This is valid only with
 | 
|  |  |  184  | %                      'lossy' mode. Note that the compression ratio
 | 
|  |  |  185  | %                      doesn't take into account the header size, and hence
 | 
|  |  |  186  | %                      in some cases the output file size can be larger
 | 
|  |  |  187  | %                      than expected.  
 | 
|  |  |  188  | %    
 | 
|  |  |  189  | %   'ProgressionOrder' A character vector or string scalar that is one of 'LRCP', 'RLCP', 'RPCL', 
 | 
|  |  |  190  | %                      'PCRL' or 'CPRL'. The four character identifiers are 
 | 
|  |  |  191  | %                      interpreted as L=layer, R=resolution, C=component
 | 
|  |  |  192  | %                      and P=position. The first character refers to the
 | 
|  |  |  193  | %                      index which progresses most slowly, while the last
 | 
|  |  |  194  | %                      refers to the index which progresses most quickly.
 | 
|  |  |  195  | %                      The default value is 'LRCP'. 
 | 
|  |  |  196  | %     
 | 
|  |  |  197  | %   'QualityLayers'    A positive integer (not exceeding 20) specifying the  
 | 
|  |  |  198  | %                      number of quality layers. The default value is 1.  
 | 
|  |  |  199  | %   
 | 
|  |  |  200  | %   'ReductionLevels'  A positive integer (not exceeding 8) specifying the
 | 
|  |  |  201  | %                      number of reduction levels or the wavelet
 | 
|  |  |  202  | %                      decomposition levels.  
 | 
|  |  |  203  | %  
 | 
|  |  |  204  | %   'TileSize'         A 2-element vector specifying tile height and tile 
 | 
|  |  |  205  | %                      width. The minimum tile size that can be specified
 | 
|  |  |  206  | %                      is [128 128]. The default tile size is same as the
 | 
|  |  |  207  | %                      image size. 
 | 
|  |  |  208  | % 
 | 
|  |  |  209  | %   'Comment'          Comment must be a column containing text specified as
 | 
|  |  |  210  | %                      chars, strings, cell array of character vectors, 
 | 
|  |  |  211  | %                      or string array.  Each row of input is written out
 | 
|  |  |  212  | %                      as a comment in the JPEG2000 file. 
 | 
|  |  |  213  | %
 | 
|  |  |  214  | %   TIFF-specific parameters
 | 
|  |  |  215  | %   ------------------------
 | 
|  |  |  216  | %   'Colorspace'   One of these values: 'rgb', 'cielab', or 
 | 
|  |  |  217  | %                  'icclab'.  The default value is 'rgb'.  This 
 | 
|  |  |  218  | %                  parameter is used only when the input array, 
 | 
|  |  |  219  | %                  A, is M-by-N-by-3.  See the reference page
 | 
|  |  |  220  | %                  for more details about creating L*a*b* TIFF 
 | 
|  |  |  221  | %                  files.
 | 
|  |  |  222  | %
 | 
|  |  |  223  | %                  In order to create a CMYK TIFF, the colorspace
 | 
|  |  |  224  | %                  parameter should not be used.  It is sufficient
 | 
|  |  |  225  | %                  to specify the input array A as M-by-N-by-4.
 | 
|  |  |  226  | %
 | 
|  |  |  227  | %   'Compression'  One of these values: 'none', 'packbits'
 | 
|  |  |  228  | %                  (default for nonbinary images), 'lzw', 'deflate', 
 | 
|  |  |  229  | %                  'jpeg', 'ccitt' (default for binary images), 
 | 
|  |  |  230  | %                  'fax3', 'fax4'; 'ccitt', 'fax3', and 
 | 
|  |  |  231  | %                  'fax4' are valid for binary images only.
 | 
|  |  |  232  | %
 | 
|  |  |  233  | %                  'jpeg' is a lossy compression scheme; other 
 | 
|  |  |  234  | %                  compression modes are lossless.
 | 
|  |  |  235  | % 
 | 
|  |  |  236  | %                  When using JPEG compression, the 'RowsPerStrip' 
 | 
|  |  |  237  | %                  parameter must be specified and must be a multiple 
 | 
|  |  |  238  | %                  of 8.
 | 
|  |  |  239  | %
 | 
|  |  |  240  | %   'Description'  Any character vector or string scalar; fills in the ImageDescription
 | 
|  |  |  241  | %                  field returned by IMFINFO
 | 
|  |  |  242  | %
 | 
|  |  |  243  | %   'Resolution'   A two-element vector containing the
 | 
|  |  |  244  | %                  XResolution and YResolution, or a scalar
 | 
|  |  |  245  | %                  indicating both resolutions; the default value
 | 
|  |  |  246  | %                  is 72
 | 
|  |  |  247  | %
 | 
|  |  |  248  | %   'RowsPerStrip' A scalar value.  The default will be such that each 
 | 
|  |  |  249  | %                  strip is about 8K bytes.
 | 
|  |  |  250  | %
 | 
|  |  |  251  | %   'WriteMode'    One of these values: 'overwrite' (the
 | 
|  |  |  252  | %                  default) or 'append'
 | 
|  |  |  253  | %
 | 
|  |  |  254  | %   PNG-specific parameters
 | 
|  |  |  255  | %   -----------------------
 | 
|  |  |  256  | %   'Author'       A character vector or string scalar
 | 
|  |  |  257  | %
 | 
|  |  |  258  | %   'Description'  A character vector or string scalar
 | 
|  |  |  259  | %
 | 
|  |  |  260  | %   'Copyright'    A character vector or string scalar
 | 
|  |  |  261  | %
 | 
|  |  |  262  | %   'CreationTime' A character vector or string scalar
 | 
|  |  |  263  | %
 | 
|  |  |  264  | %   'ImageModTime' A MATLAB datenum or a character vector or string scalar convertible to a
 | 
|  |  |  265  | %                  date vector via the DATEVEC function.  Values
 | 
|  |  |  266  | %                  should be in UTC time.
 | 
|  |  |  267  | %
 | 
|  |  |  268  | %   'Software'     A character vector or string scalar
 | 
|  |  |  269  | %
 | 
|  |  |  270  | %   'Disclaimer'   A character vector or string scalar
 | 
|  |  |  271  | %
 | 
|  |  |  272  | %   'Warning'      A character vector or string scalar
 | 
|  |  |  273  | %
 | 
|  |  |  274  | %   'Source'       A character vector or string scalar
 | 
|  |  |  275  | %
 | 
|  |  |  276  | %   'Comment'      A character vector or string scalar
 | 
|  |  |  277  | %
 | 
|  |  |  278  | %   'InterlaceType' Either 'none' or 'adam7'
 | 
|  |  |  279  | %
 | 
|  |  |  280  | %   'BitDepth'     A scalar value indicating desired bitdepth;
 | 
|  |  |  281  | %                  for grayscale images this can be 1, 2, 4,
 | 
|  |  |  282  | %                  8, or 16; for grayscale images with an
 | 
|  |  |  283  | %                  alpha channel this can be 8 or 16; for
 | 
|  |  |  284  | %                  indexed images this can be 1, 2, 4, or 8;
 | 
|  |  |  285  | %                  for truecolor images with or without an
 | 
|  |  |  286  | %                  alpha channel this can be 8 or 16
 | 
|  |  |  287  | %
 | 
|  |  |  288  | %   'Transparency' This value is used to indicate transparency
 | 
|  |  |  289  | %                  information when no alpha channel is used.
 | 
|  |  |  290  | %                  
 | 
|  |  |  291  | %                  For indexed images: a Q-element vector in
 | 
|  |  |  292  | %                    the range [0,1]; Q is no larger than the
 | 
|  |  |  293  | %                    colormap length; each value indicates the
 | 
|  |  |  294  | %                    transparency associated with the
 | 
|  |  |  295  | %                    corresponding colormap entry
 | 
|  |  |  296  | %                  For grayscale images: a scalar in the range
 | 
|  |  |  297  | %                    [0,1]; the value indicates the grayscale
 | 
|  |  |  298  | %                    color to be considered transparent
 | 
|  |  |  299  | %                  For truecolor images: a 3-element vector in
 | 
|  |  |  300  | %                    the range [0,1]; the value indicates the
 | 
|  |  |  301  | %                    truecolor color to be considered
 | 
|  |  |  302  | %                    transparent
 | 
|  |  |  303  | %
 | 
|  |  |  304  | %                  You cannot specify 'Transparency' and
 | 
|  |  |  305  | %                  'Alpha' at the same time.
 | 
|  |  |  306  | %
 | 
|  |  |  307  | %   'Background'   The value specifies background color to be
 | 
|  |  |  308  | %                  used when compositing transparent pixels.
 | 
|  |  |  309  | %
 | 
|  |  |  310  | %                  For indexed images: an integer in the range
 | 
|  |  |  311  | %                    [1,P], where P is the colormap length
 | 
|  |  |  312  | %                  For grayscale images: a scalar in the range
 | 
|  |  |  313  | %                    [0,1]
 | 
|  |  |  314  | %                  For truecolor images: a 3-element vector in
 | 
|  |  |  315  | %                    the range [0,1]
 | 
|  |  |  316  | %
 | 
|  |  |  317  | %   'Gamma'        A nonnegative scalar indicating the file
 | 
|  |  |  318  | %                  gamma
 | 
|  |  |  319  | %
 | 
|  |  |  320  | %   'Chromaticities' An 8-element vector [wx wy rx ry gx gy bx
 | 
|  |  |  321  | %                  by] that specifies the reference white
 | 
|  |  |  322  | %                  point and the primary chromaticities 
 | 
|  |  |  323  | %
 | 
|  |  |  324  | %   'XResolution'  A scalar indicating the number of
 | 
|  |  |  325  | %                  pixels/unit in the horizontal direction
 | 
|  |  |  326  | %
 | 
|  |  |  327  | %   'YResolution'  A scalar indicating the number of
 | 
|  |  |  328  | %                  pixels/unit in the vertical direction
 | 
|  |  |  329  | %
 | 
|  |  |  330  | %   'ResolutionUnit' Either 'unknown' or 'meter'
 | 
|  |  |  331  | %
 | 
|  |  |  332  | %   'Alpha'        A matrix specifying the transparency of
 | 
|  |  |  333  | %                  each pixel individually; the row and column
 | 
|  |  |  334  | %                  dimensions must be the same as the data
 | 
|  |  |  335  | %                  array; may be uint8, uint16, or double, in
 | 
|  |  |  336  | %                  which case the values should be in the
 | 
|  |  |  337  | %                  range [0,1]
 | 
|  |  |  338  | %
 | 
|  |  |  339  | %   'SignificantBits' A scalar or vector indicating how many
 | 
|  |  |  340  | %                  bits in the data array should be regarded
 | 
|  |  |  341  | %                  as significant; values must be in the range
 | 
|  |  |  342  | %                  [1,bitdepth]
 | 
|  |  |  343  | %
 | 
|  |  |  344  | %                  For indexed images: a 3-element vector
 | 
|  |  |  345  | %                  For grayscale images: a scalar
 | 
|  |  |  346  | %                  For grayscale images with an alpha channel:
 | 
|  |  |  347  | %                    a 2-element vector
 | 
|  |  |  348  | %                  For truecolor images: a 3-element vector
 | 
|  |  |  349  | %                  For truecolor images with an alpha channel:
 | 
|  |  |  350  | %                    a 4-element vector
 | 
|  |  |  351  | %
 | 
|  |  |  352  | %   In addition to these PNG parameters, you can use any
 | 
|  |  |  353  | %   parameter name that satisfies the PNG specification for
 | 
|  |  |  354  | %   keywords: only printable characters, 80 characters or
 | 
|  |  |  355  | %   fewer, and no leading or trailing spaces.  The value
 | 
|  |  |  356  | %   corresponding to these user-specified parameters must be a
 | 
|  |  |  357  | %   character vector or string scalar that contains no control 
 | 
|  |  |  358  | %   characters except for linefeed.
 | 
|  |  |  359  | %
 | 
|  |  |  360  | %   RAS-specific parameters
 | 
|  |  |  361  | %   -----------------------
 | 
|  |  |  362  | %   'Type'         One of these values: 'standard'
 | 
|  |  |  363  | %                  (uncompressed, b-g-r color order with
 | 
|  |  |  364  | %                  truecolor images), 'rgb' (like 'standard',
 | 
|  |  |  365  | %                  but uses r-g-b color order for truecolor
 | 
|  |  |  366  | %                  images), 'rle' (run-length encoding of 1-bit
 | 
|  |  |  367  | %                  and 8-bit images)
 | 
|  |  |  368  | %
 | 
|  |  |  369  | %   'Alpha'        A matrix specifying the transparency of each
 | 
|  |  |  370  | %                  pixel individually; the row and column
 | 
|  |  |  371  | %                  dimensions must be the same as the data
 | 
|  |  |  372  | %                  array; may be uint8, uint16, or double. May
 | 
|  |  |  373  | %                  only be used with truecolor images.
 | 
|  |  |  374  | %
 | 
|  |  |  375  | %   PBM, PGM, and PPM-specific parameters
 | 
|  |  |  376  | %   ------------------------
 | 
|  |  |  377  | %   'Encoding'     One of these values: 'ASCII' for plain encoding
 | 
|  |  |  378  | %                  or 'rawbits' for binary encoding.  Default is 'rawbits'.
 | 
|  |  |  379  | %   'MaxValue'     A scalar indicating the maximum gray or color
 | 
|  |  |  380  | %                  value.  Available only for PGM and PPM files.
 | 
|  |  |  381  | %                  For PBM files, this value is always 1.  Default
 | 
|  |  |  382  | %                  is 65535 if image array is 'uint16' and 255 otherwise.
 | 
|  |  |  383  | %
 | 
|  |  |  384  | %   Table: summary of supported image types
 | 
|  |  |  385  | %   ---------------------------------------
 | 
|  |  |  386  | %   BMP       1-bit, 8-bit and 24-bit uncompressed images
 | 
|  |  |  387  | %
 | 
|  |  |  388  | %   GIF       8-bit images
 | 
|  |  |  389  | %
 | 
|  |  |  390  | %   HDF       8-bit raster image datasets, with or without associated
 | 
|  |  |  391  | %             colormap; 24-bit raster image datasets; uncompressed or
 | 
|  |  |  392  | %             with RLE or JPEG compression
 | 
|  |  |  393  | %
 | 
|  |  |  394  | %   JPEG      8-bit, 12-bit, and 16-bit Baseline JPEG images
 | 
|  |  |  395  | %
 | 
|  |  |  396  | %   JPEG2000  1-bit, 8-bit, and 16-bit JPEG2000 images 
 | 
|  |  |  397  | %
 | 
|  |  |  398  | %   PBM       Any 1-bit PBM image, ASCII (plain) or raw (binary) encoding.
 | 
|  |  |  399  | %
 | 
|  |  |  400  | %   PCX       8-bit images
 | 
|  |  |  401  | %
 | 
|  |  |  402  | %   PGM       Any standard PGM image. ASCII (plain) encoded with
 | 
|  |  |  403  | %             arbitrary color depth. Raw (binary) encoded with up
 | 
|  |  |  404  | %             to 16 bits per gray value.
 | 
|  |  |  405  | %
 | 
|  |  |  406  | %   PNG       1-bit, 2-bit, 4-bit, 8-bit, and 16-bit grayscale
 | 
|  |  |  407  | %             images; 8-bit and 16-bit grayscale images with alpha
 | 
|  |  |  408  | %             channels; 1-bit, 2-bit, 4-bit, and 8-bit indexed
 | 
|  |  |  409  | %             images; 24-bit and 48-bit truecolor images; 24-bit
 | 
|  |  |  410  | %             and 48-bit truecolor images with alpha channels
 | 
|  |  |  411  | %
 | 
|  |  |  412  | %   PNM       Any of PPM/PGM/PBM (see above) chosen automatically.
 | 
|  |  |  413  | %
 | 
|  |  |  414  | %   PPM       Any standard PPM image. ASCII (plain) encoded with
 | 
|  |  |  415  | %             arbitrary color depth. Raw (binary) encoded with up
 | 
|  |  |  416  | %             to 16 bits per color component.
 | 
|  |  |  417  | %
 | 
|  |  |  418  | %   RAS       Any RAS image, including 1-bit bitmap, 8-bit indexed,
 | 
|  |  |  419  | %             24-bit truecolor and 32-bit truecolor with alpha.
 | 
|  |  |  420  | %
 | 
|  |  |  421  | %   TIFF      Baseline TIFF images, including 1-bit, 8-bit, 16-bit,
 | 
|  |  |  422  | %             and 24-bit uncompressed images, images with packbits 
 | 
|  |  |  423  | %             compression, images with LZW compression, and images
 | 
|  |  |  424  | %             with Deflate compression; 8-bit and 24-bit images with 
 | 
|  |  |  425  | %             JPEG compression; 1-bit images with CCITT 1D, Group 3, 
 | 
|  |  |  426  | %             and Group 4 compression; CIELAB, ICCLAB, and CMYK images.
 | 
|  |  |  427  | %
 | 
|  |  |  428  | %   XWD       8-bit ZPixmaps
 | 
|  |  |  429  | %
 | 
|  |  |  430  | %   Please read the file libtiffcopyright.txt for more information.
 | 
|  |  |  431  | %
 | 
|  |  |  432  | %   See also IMFINFO, IMREAD, IMFORMATS, FWRITE, GETFRAME.
 | 
|  |  |  433  | 
 | 
|  |  |  434  | %   Copyright 1984-2019 The MathWorks, Inc.
 | 
|  |  |  435  | 
 | 
| < 0.001  |      10  |  436 | if nargin > 0 
 | 
| < 0.001  |      10  |  437 |     [varargin{:}] = convertStringsToChars(varargin{:}); 
 | 
| < 0.001  |      10  |  438 | end 
 | 
|  |  |  439  | 
 | 
|   0.014  |      10  |  440 | [data, map, filename, format, paramPairs] = parse_inputs(varargin{:}); 
 | 
|  |  |  441  | 
 | 
| < 0.001  |      10  |  442 | validateattributes(data,{'numeric','logical'},{'nonempty','nonsparse'},'','DATA'); 
 | 
|  |  |  443  | 
 | 
| < 0.001  |      10  |  444 | if (isempty(format)) 
 | 
|  |  |  445  | 
 | 
|  |  |  446  |     format = get_format_from_filename(filename);
 | 
|  |  |  447  |     if (isempty(format))
 | 
|  |  |  448  |         error(message('MATLAB:imagesci:imwrite:fileFormat'));
 | 
|  |  |  449  |     end
 | 
|  |  |  450  |     
 | 
| < 0.001  |      10  |  451 | end 
 | 
|  |  |  452  | 
 | 
|  |  |  453  | % Get the format details from the registry.
 | 
|   0.002  |      10  |  454 | fmt_s = imformats(format); 
 | 
|  |  |  455  | 
 | 
|  |  |  456  | % Signed data may cause unexpected results.
 | 
| < 0.001  |      10  |  457 | switch (class(data)) 
 | 
| < 0.001  |      10  |  458 |     case {'int8', 'int16', 'int32', 'int64'} 
 | 
|  |  |  459  |         
 | 
|  |  |  460  |         switch format
 | 
|  |  |  461  |             case {'j2c', 'j2k', 'jp2', 'jpf', 'jpx'}
 | 
|  |  |  462  |                 %OK. writejp2 handles int8 and int16, errors for rest
 | 
|  |  |  463  |             case {'jpg', 'jpeg'}
 | 
|  |  |  464  |                 error(message('MATLAB:imagesci:imwrite:signedJPEGNotSupported'));
 | 
|  |  |  465  |             case {'tif','tiff'}
 | 
|  |  |  466  |                 %writetif will take appropriate action.
 | 
|  |  |  467  |                 
 | 
|  |  |  468  |             otherwise
 | 
|  |  |  469  |                 warning(message('MATLAB:imagesci:imwrite:signedPixelData'))
 | 
|  |  |  470  |         end
 | 
| < 0.001  |      10  |  471 | end 
 | 
|  |  |  472  | 
 | 
|  |  |  473  | %Check if filename is regular file or not.
 | 
| < 0.001  |      10  |  474 | URL = matlab.virtualfileio.internal.validators.isIRI(filename); 
 | 
| < 0.001  |      10  |  475 | if URL 
 | 
|  |  |  476  |     try
 | 
|  |  |  477  |         remoteFileName = filename;
 | 
|  |  |  478  |         % check whether credentials are set
 | 
|  |  |  479  |         import matlab.virtualfileio.internal.validators.validateCloudEnvVariables;
 | 
|  |  |  480  |         validateCloudEnvVariables(filename);
 | 
|  |  |  481  |         
 | 
|  |  |  482  |         % Get the correct filename
 | 
|  |  |  483  |         filenameWithoutPath = matlab.virtualfileio.internal.validators.IRIFilename(filename);
 | 
|  |  |  484  |         remoteFolder = extractBefore(filename, filenameWithoutPath);
 | 
|  |  |  485  |         ext = strfind(filenameWithoutPath, ".");
 | 
|  |  |  486  |         if ~isempty(ext)
 | 
|  |  |  487  |             index = ext(end);
 | 
|  |  |  488  |             % Extract the extension along with '.' character
 | 
|  |  |  489  |             ext = extractAfter(filenameWithoutPath, index-1);
 | 
|  |  |  490  |             % Extract the full filename excluding the extension
 | 
|  |  |  491  |             filenameWithoutPath = extractBefore(filenameWithoutPath,index);
 | 
|  |  |  492  |         end
 | 
|  |  |  493  |         
 | 
|  |  |  494  |         localToRemote = matlab.virtualfileio.internal.stream.LocalToRemote(remoteFolder);
 | 
|  |  |  495  |         % Check if Writemode is 'append' and the file exists
 | 
|  |  |  496  |         index = find(ismember(lower(paramPairs(:)),lower('WriteMode')) == 1);
 | 
|  |  |  497  |         if ~isempty(index) %'WriteMode' name is used with imwrite
 | 
|  |  |  498  |             for i = 1 : numel(index)
 | 
|  |  |  499  |                 if  lower(paramPairs{index(i)+1}) == lower('append')
 | 
|  |  |  500  |                     remote2Local = matlab.virtualfileio.internal.stream.RemoteToLocal(filename);
 | 
|  |  |  501  |                     tempFile = remote2Local.LocalFileName;
 | 
|  |  |  502  |                     % Set the local and the remote filepath
 | 
|  |  |  503  |                     localToRemote.CurrentLocalFilePath = tempFile;
 | 
|  |  |  504  |                     localToRemote.setRemoteFileName(filenameWithoutPath, ext);                    
 | 
|  |  |  505  |                     break;
 | 
|  |  |  506  |                 end
 | 
|  |  |  507  |             end
 | 
|  |  |  508  |         end
 | 
|  |  |  509  |     catch ME
 | 
|  |  |  510  |         if ~strcmp(ME.identifier, 'MATLAB:virtualfileio:stream:fileNotFound')
 | 
|  |  |  511  |             error(message('MATLAB:imagesci:imwrite:writeFailed', remoteFileName, ME.message));
 | 
|  |  |  512  |         end
 | 
|  |  |  513  |     end  
 | 
|  |  |  514  |     % If currentLocalFilePath is empty, it means
 | 
|  |  |  515  |     % 1. 'WriteMode' is not provided. Default is 'overwrite'
 | 
|  |  |  516  |     % 2. 'WriteMode is provided but the value is not 'append'
 | 
|  |  |  517  |     % 3. 'WriteMode' is provided and value is 'append' but file does not
 | 
|  |  |  518  |     % exists in cloud
 | 
|  |  |  519  |     if isempty(localToRemote.CurrentLocalFilePath)
 | 
|  |  |  520  |         setfilename(localToRemote,filename);
 | 
|  |  |  521  |     end
 | 
|  |  |  522  |     filename = localToRemote.CurrentLocalFilePath;
 | 
| < 0.001  |      10  |  523 | end 
 | 
|  |  |  524  | 
 | 
|  |  |  525  | % Verify that the file can be written to. For TIFF files, sometimes, this
 | 
|  |  |  526  | % call to FOPEN fails sporadically. Retry for a few times to guard against
 | 
|  |  |  527  | % sporadic failures.
 | 
| < 0.001  |      10  |  528 | MAX_NUM_RETRIES = 4; 
 | 
| < 0.001  |      10  |  529 | fileOpenCnt = 1; 
 | 
|   0.001  |      10  |  530 | fid = fopen(filename, 'a'); 
 | 
| < 0.001  |      10  |  531 | while fid == -1 && fileOpenCnt < MAX_NUM_RETRIES 
 | 
|  |  |  532  |     fileOpenCnt = fileOpenCnt + 1;
 | 
|  |  |  533  |     
 | 
|  |  |  534  |     % This might delay processing but it is better than sporadically
 | 
|  |  |  535  |     % erroring out.
 | 
|  |  |  536  |     pause(0.1);
 | 
|  |  |  537  |     fid = fopen(filename, 'a');
 | 
|  |  |  538  | end
 | 
|  |  |  539  | 
 | 
| < 0.001  |      10  |  540 | if fid == -1 
 | 
|  |  |  541  |     error(message('MATLAB:imagesci:imwrite:fileOpen', filename));
 | 
| < 0.001  |      10  |  542 | else 
 | 
|  |  |  543  |     % File can be created.  Get full filename.
 | 
| < 0.001  |      10  |  544 |     filename = fopen(fid); 
 | 
|   0.004  |      10  |  545 |     fclose(fid); 
 | 
| < 0.001  |      10  |  546 | end 
 | 
|  |  |  547  | 
 | 
|  |  |  548  | % Currently all image formats use 32-bit offsets to data.
 | 
| < 0.001  |      10  |  549 | try 
 | 
|   0.002  |      10  |  550 |     validateSizes(data); 
 | 
|  |  |  551  | catch myException
 | 
|  |  |  552  |     cleanupEmptyFile(filename);
 | 
|  |  |  553  |     rethrow(myException);
 | 
| < 0.001  |      10  |  554 | end 
 | 
|  |  |  555  | 
 | 
|  |  |  556  | % Call the writing function if it exists.
 | 
| < 0.001  |      10  |  557 | if (~isempty(fmt_s.write)) 
 | 
| < 0.001  |      10  |  558 |     try 
 | 
|   0.738  |      10  |  559 |         feval(fmt_s.write, data, map, filename, paramPairs{:}); 
 | 
|  |  |  560  |     catch myException
 | 
|  |  |  561  |         cleanupEmptyFile(filename);
 | 
|  |  |  562  |         rethrow(myException);
 | 
| < 0.001  |      10  |  563 |     end 
 | 
| < 0.001  |      10  |  564 |     if URL 
 | 
|  |  |  565  |         % upload the file to the remote location
 | 
|  |  |  566  |         try
 | 
|  |  |  567  |             upload(localToRemote);
 | 
|  |  |  568  |         catch ME
 | 
|  |  |  569  |             error(message('MATLAB:imagesci:imwrite:writeFailed', remoteFileName, ME.message));
 | 
|  |  |  570  |         end
 | 
| < 0.001  |      10  |  571 |     end 
 | 
|  |  |  572  | else
 | 
|  |  |  573  |     cleanupEmptyFile(filename);
 | 
|  |  |  574  |     error(message('MATLAB:imagesci:imwrite:writeFunctionRegistration', format));
 | 
| < 0.001  |      10  |  575 | end 
 | 
| < 0.001  |      10  |  576 | end 
 | 
Other subfunctions in this file are not included in this listing.