Mercurial > octave
annotate scripts/image/imformats.m @ 27978:a4268efb7334
maint: Eliminate single "Author:" lines from code base.
* color-picker.cc, color-picker.h, octave-qscintilla.cc, octave-qscintilla.h,
octave-txt-lexer.cc, octave-txt-lexer.h, balance.cc, kron.cc, lookup.cc,
ls-hdf5.cc, ls-mat5.cc, ls-oct-text.cc, sylvester.cc, tsearch.cc, jit-ir.cc,
jit-ir.h, jit-typeinfo.cc, jit-typeinfo.h, jit-util.cc, jit-util.h, pt-jit.cc,
pt-jit.h, Array-jit.cc, bsxfun.h, url-transfer.cc, url-transfer.h, acosd.m,
acotd.m, acscd.m, asecd.m, asind.m, atand.m, cosd.m, cotd.m, cscd.m, secd.m,
sind.m, tand.m, cart2pol.m, cart2sph.m, curl.m, del2.m, divergence.m, flip.m,
pol2cart.m, randi.m, sortrows.m, sph2cart.m, griddata3.m, griddatan.m,
rectint.m, voronoi.m, dialog.m, guidata.m, guihandles.m, __file_filter__.m,
__fltk_file_filter__.m, __get_funcname__.m, __is_function__.m,
__uigetdir_fltk__.m, __uigetfile_fltk__.m, __uiobject_split_args__.m,
__uiputfile_fltk__.m, uibuttongroup.m, uicontextmenu.m, uicontrol.m,
uigetdir.m, uigetfile.m, uimenu.m, uipanel.m, uipushtool.m, uiputfile.m,
uiresume.m, uitoggletool.m, uitoolbar.m, uiwait.m, doc.m, autumn.m, bone.m,
cmpermute.m, cmunique.m, cool.m, copper.m, cubehelix.m, flag.m, frame2im.m,
hot.m, hsv.m, hsv2rgb.m, im2frame.m, imfinfo.m, imformats.m, iscolormap.m,
jet.m, pink.m, prism.m, __imfinfo__.m, rainbow.m, rgb2hsv.m, spinmap.m,
spring.m, viridis.m, white.m, winter.m, importdata.m, strmatch.m, bandwidth.m,
isbanded.m, isdiag.m, istril.m, istriu.m, krylov.m, linsolve.m, logm.m,
lscov.m, subspace.m, bunzip2.m, compare_versions.m, edit.m, fullfile.m,
getfield.m, gunzip.m, inputParser.m, license.m, nargchk.m, narginchk.m,
nthargout.m, python.m, setfield.m, tar.m, unpack.m, ver.m, zip.m, odeplot.m,
fminbnd.m, fminunc.m, fsolve.m, fzero.m, glpk.m, humps.m, pathdef.m,
savepath.m, diffuse.m, lighting.m, material.m, shading.m, specular.m,
contour.m, ellipsoid.m, isocaps.m, isocolors.m, isonormals.m, isosurface.m,
light.m, pcolor.m, __interp_cube__.m, __marching_cube__.m, __patch__.m,
__stem__.m, reducepatch.m, reducevolume.m, ribbon.m, shrinkfaces.m, slice.m,
stem.m, surf.m, surfl.m, tetramesh.m, waterfall.m, __actual_axis_position__.m,
__next_line_color__.m, allchild.m, figure.m, findall.m, findobj.m, gcf.m,
hggroup.m, isprop.m, ndgrid.m, __add_default_menu__.m, saveas.m,
__splinefit__.m, prefdir.m, preferences.m, profexplore.m, profexport.m,
profile.m, profshow.m, setdiff.m, freqz.m, freqz_plot.m, sinc.m, unwrap.m,
pcr.m, qmr.m, sprandn.m, betaincinv.m, cosint.m, ellipke.m, factor.m,
gammaincinv.m, legendre.m, nchoosek.m, primes.m, invhilb.m, toeplitz.m,
erase.m, mat2str.m, strtrim.m, validatestring.m, fail.m, compare_plot_demos.m,
dump_demos.m, html_compare_plot_demos.m, addtodate.m, datenum.m, jit.tst:
Eliminate single "Author:" lines from code base.
author | Rik <rik@octave.org> |
---|---|
date | Tue, 21 Jan 2020 12:53:13 -0800 |
parents | bd51beb6205e |
children | 5a07c798eb08 0a5b15007766 |
rev | line source |
---|---|
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
1 ######################################################################## |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
2 ## |
27919
1891570abac8
update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents:
27918
diff
changeset
|
3 ## Copyright (C) 2013-2020 The Octave Project Developers |
27918
b442ec6dda5c
use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents:
27216
diff
changeset
|
4 ## |
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
5 ## See the file COPYRIGHT.md in the top-level directory of this |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
6 ## distribution or <https://octave.org/copyright/>. |
16901 | 7 ## |
8 ## This file is part of Octave. | |
9 ## | |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
24458
diff
changeset
|
10 ## Octave is free software: you can redistribute it and/or modify it |
16901 | 11 ## under the terms of the GNU General Public License as published by |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
24458
diff
changeset
|
12 ## the Free Software Foundation, either version 3 of the License, or |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
13 ## (at your option) any later version. |
16901 | 14 ## |
15 ## Octave is distributed in the hope that it will be useful, but | |
16 ## WITHOUT ANY WARRANTY; without even the implied warranty of | |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
17 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
18 ## GNU General Public License for more details. |
16901 | 19 ## |
20 ## You should have received a copy of the GNU General Public License | |
21 ## along with Octave; see the file COPYING. If not, see | |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
24458
diff
changeset
|
22 ## <https://www.gnu.org/licenses/>. |
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
23 ## |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
24 ######################################################################## |
16901 | 25 |
26 ## -*- texinfo -*- | |
20852
516bb87ea72e
2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents:
20176
diff
changeset
|
27 ## @deftypefn {} {} imformats () |
516bb87ea72e
2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents:
20176
diff
changeset
|
28 ## @deftypefnx {} {@var{formats} =} imformats (@var{ext}) |
516bb87ea72e
2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents:
20176
diff
changeset
|
29 ## @deftypefnx {} {@var{formats} =} imformats (@var{format}) |
516bb87ea72e
2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents:
20176
diff
changeset
|
30 ## @deftypefnx {} {@var{formats} =} imformats ("add", @var{format}) |
516bb87ea72e
2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents:
20176
diff
changeset
|
31 ## @deftypefnx {} {@var{formats} =} imformats ("remove", @var{ext}) |
516bb87ea72e
2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents:
20176
diff
changeset
|
32 ## @deftypefnx {} {@var{formats} =} imformats ("update", @var{ext}, @var{format}) |
516bb87ea72e
2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents:
20176
diff
changeset
|
33 ## @deftypefnx {} {@var{formats} =} imformats ("factory") |
16901 | 34 ## Manage supported image formats. |
35 ## | |
36 ## @var{formats} is a structure with information about each supported file | |
37 ## format, or from a specific format @var{ext}, the value displayed on the | |
25472
9771111f04f4
doc: Use @var rather than @code to mark inputs to functions in docstrings.
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
38 ## field @var{ext}. It contains the following fields: |
16901 | 39 ## |
40 ## @table @asis | |
41 ## @item ext | |
42 ## The name of the file format. This may match the file extension but Octave | |
43 ## will automatically detect the file format. | |
17170
d6499c14021c
doc: Periodic grammarcheck of documentation.
Rik <rik@octave.org>
parents:
17086
diff
changeset
|
44 ## |
16901 | 45 ## @item description |
46 ## A long description of the file format. | |
17170
d6499c14021c
doc: Periodic grammarcheck of documentation.
Rik <rik@octave.org>
parents:
17086
diff
changeset
|
47 ## |
16922
bfd119642f6a
doc: Fix some spellings in image.texi.
Rik <rik@octave.org>
parents:
16916
diff
changeset
|
48 ## @item @nospell{isa} |
16901 | 49 ## A function handle to confirm if a file is of the specified format. |
17170
d6499c14021c
doc: Periodic grammarcheck of documentation.
Rik <rik@octave.org>
parents:
17086
diff
changeset
|
50 ## |
16901 | 51 ## @item write |
52 ## A function handle to write if a file is of the specified format. | |
17170
d6499c14021c
doc: Periodic grammarcheck of documentation.
Rik <rik@octave.org>
parents:
17086
diff
changeset
|
53 ## |
16901 | 54 ## @item read |
55 ## A function handle to open files the specified format. | |
17170
d6499c14021c
doc: Periodic grammarcheck of documentation.
Rik <rik@octave.org>
parents:
17086
diff
changeset
|
56 ## |
16901 | 57 ## @item info |
58 ## A function handle to obtain image information of the specified format. | |
17170
d6499c14021c
doc: Periodic grammarcheck of documentation.
Rik <rik@octave.org>
parents:
17086
diff
changeset
|
59 ## |
16901 | 60 ## @item alpha |
61 ## Logical value if format supports alpha channel (transparency or matte). | |
17170
d6499c14021c
doc: Periodic grammarcheck of documentation.
Rik <rik@octave.org>
parents:
17086
diff
changeset
|
62 ## |
16901 | 63 ## @item multipage |
64 ## Logical value if format supports multipage (multiple images per file). | |
65 ## @end table | |
66 ## | |
20158
7503499a252b
doc: Update docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19697
diff
changeset
|
67 ## It is possible to change the way Octave manages file formats with the |
7503499a252b
doc: Update docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19697
diff
changeset
|
68 ## options @qcode{"add"}, @qcode{"remove"}, and @qcode{"update"}, and supplying |
7503499a252b
doc: Update docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19697
diff
changeset
|
69 ## a structure @var{format} with the required fields. The option |
17281
bc924baa2c4e
doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents:
17170
diff
changeset
|
70 ## @qcode{"factory"} resets the configuration to the default. |
16901 | 71 ## |
72 ## This can be used by Octave packages to extend the image reading capabilities | |
73 ## Octave, through use of the PKG_ADD and PKG_DEL commands. | |
74 ## | |
75 ## @seealso{imfinfo, imread, imwrite} | |
76 ## @end deftypefn | |
77 | |
78 function varargout = imformats (arg1, arg2, arg3) | |
21758
ffad2baa90f7
maint: Use newlines to make code more readable.
Rik <rik@octave.org>
parents:
21751
diff
changeset
|
79 |
16901 | 80 if (nargin > 3) |
81 print_usage (); | |
82 endif | |
83 | |
19653
b95aab49b6be
imformats: memory lock function to prevent "registry" of imageIO to be cleared
Carnë Draug <carandraug@octave.org>
parents:
19278
diff
changeset
|
84 mlock (); # prevent formats to be removed by "clear all" |
16901 | 85 persistent formats = default_formats (); |
86 | |
87 if (nargin == 0 && nargout == 0) | |
20170
c0f64bc26eee
imformats.m: rewrite pretty print of format table.
Carnë Draug <carandraug@octave.org>
parents:
20169
diff
changeset
|
88 pretty_print_formats (formats); |
16901 | 89 elseif (nargin >= 1) |
90 if (isstruct (arg1)) | |
91 arrayfun (@is_valid_format, arg1); | |
92 ## FIXME: what is the return value in this situation? | |
93 formats = arg1; | |
94 | |
95 elseif (ischar (arg1)) | |
96 switch (tolower (arg1)) | |
97 case "add", | |
98 if (! isstruct (arg2)) | |
99 error ("imformats: FORMAT to %s must be a structure.", arg1); | |
100 endif | |
101 arrayfun (@is_valid_format, arg2); | |
16949
1eb5e5f0ee13
imformats.m: add tests and fix bug when adding new formats.
Carnë Draug <carandraug@octave.org>
parents:
16922
diff
changeset
|
102 formats(end + 1: end + numel (arg2)) = arg2; |
16907
04f4f067eb33
imformats: fix typos and silence some statements.
Carnë Draug <carandraug@octave.org>
parents:
16906
diff
changeset
|
103 varargout{1} = formats; |
16901 | 104 |
105 case {"remove", "update"}, | |
106 if (! ischar (arg2)) | |
107 error ("imformats: EXT to %s must be a string.", arg1); | |
108 endif | |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21634
diff
changeset
|
109 ## FIXME: suppose a format with multiple extensions. If one of |
16901 | 110 ## them is requested to be removed, should we remove the |
111 ## whole format, or just that extension from the format? | |
16907
04f4f067eb33
imformats: fix typos and silence some statements.
Carnë Draug <carandraug@octave.org>
parents:
16906
diff
changeset
|
112 match = find_ext_idx (formats, arg2); |
16901 | 113 if (! any (match)) |
27216
823b4bcf79fc
unless necessary for formatting or code, use ' instead of `
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
114 error ("imformats: no EXT '%s' found.", arg2); |
16901 | 115 endif |
116 if (strcmpi (arg1, "remove")) | |
117 formats(match) = []; | |
118 else | |
119 ## then it's update | |
120 if (! isstruct (arg3)) | |
121 error ("imformats: FORMAT to update must be a structure."); | |
122 endif | |
123 is_valid_format (arg3); | |
124 formats(match) = arg3; | |
125 endif | |
16907
04f4f067eb33
imformats: fix typos and silence some statements.
Carnë Draug <carandraug@octave.org>
parents:
16906
diff
changeset
|
126 varargout{1} = formats; |
16901 | 127 |
128 case "factory", | |
129 formats = default_formats (); | |
130 otherwise | |
131 ## then we look for a format with that extension. | |
16907
04f4f067eb33
imformats: fix typos and silence some statements.
Carnë Draug <carandraug@octave.org>
parents:
16906
diff
changeset
|
132 match = find_ext_idx (formats, arg1); |
16901 | 133 ## For matlab compatibility, if we don't find any format we must |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21634
diff
changeset
|
134 ## return an empty struct with NO fields. We can't use match as mask |
16901 | 135 if (any (match)) |
16907
04f4f067eb33
imformats: fix typos and silence some statements.
Carnë Draug <carandraug@octave.org>
parents:
16906
diff
changeset
|
136 varargout{1} = formats(match); |
16901 | 137 else |
16907
04f4f067eb33
imformats: fix typos and silence some statements.
Carnë Draug <carandraug@octave.org>
parents:
16906
diff
changeset
|
138 varargout{1} = struct (); |
16901 | 139 endif |
140 endswitch | |
141 else | |
142 error ("imformats: first argument must be either a structure or string."); | |
143 endif | |
144 else | |
145 varargout{1} = formats; | |
146 endif | |
21758
ffad2baa90f7
maint: Use newlines to make code more readable.
Rik <rik@octave.org>
parents:
21751
diff
changeset
|
147 |
16901 | 148 endfunction |
149 | |
24458
516437d2194d
don't allow function parameters (in or out) to be persistent
John W. Eaton <jwe@octave.org>
parents:
23220
diff
changeset
|
150 function rformats = default_formats () |
16901 | 151 |
152 ## The available formats are dependent on what the user has installed at | |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21634
diff
changeset
|
153 ## a given time, and how GraphicsMagick was built. Checking for |
16901 | 154 ## GraphicsMagick features when building Octave is not enough since it |
155 ## delegates some of them to external programs which can be removed or | |
156 ## installed at any time. | |
157 ## The recommended method would be to use CoderInfoList() to get a list of | |
158 ## all available coders and try to write and read back a small test image. | |
159 ## But this will not work since some coders are readable or writable only. | |
160 ## It will still fail if we test only the ones marked as readable and | |
161 ## writable because some RW coders are not of image formats (NULL, 8BIM, | |
162 ## or EXIF for example). | |
27216
823b4bcf79fc
unless necessary for formatting or code, use ' instead of `
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
163 ## So we'd need a blacklist (unacceptable because a 'bad' coder may be |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21634
diff
changeset
|
164 ## added later) or a whitelist. A whitelist means that even with a |
16901 | 165 ## super-fancy recent build of GraphicsMagick, some formats won't be listed |
166 ## by imformats but in truth, we will still be able to read and write them | |
167 ## since imread() and imwrite() will give it a try anyway. | |
168 ## | |
169 ## For more info and comments from the GraphicsMagick main developer, see | |
170 ## http://sourceforge.net/mailarchive/forum.php?thread_name=alpine.GSO.2.01.1304301916050.2267%40freddy.simplesystems.org&forum_name=graphicsmagick-help | |
171 | |
172 persistent formats = struct ( "coder", {}, | |
173 "ext", {}, | |
174 "isa", {}, | |
175 "info", {}, | |
176 "read", {}, | |
177 "write", {}, | |
178 "alpha", {}, | |
179 "description", {}, | |
180 "multipage", {}); | |
181 | |
182 ## Image IO abilities won't change during the same Octave session, | |
183 ## there's no need to go and calculate it all over again if we are | |
184 ## requested to reset back to factory. | |
185 if (! isempty (formats)) | |
24458
516437d2194d
don't allow function parameters (in or out) to be persistent
John W. Eaton <jwe@octave.org>
parents:
23220
diff
changeset
|
186 rformats = formats; |
17312
088d014a7fe2
Use semicolon after "return" statement in core m-files.
Rik <rik@octave.org>
parents:
17281
diff
changeset
|
187 return; |
16901 | 188 endif |
189 | |
190 ## Building the formats info | |
191 ## | |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21634
diff
changeset
|
192 ## As mentioned above we start with a whitelist of coders. Since the |
16901 | 193 ## GraphicsMagick build may be missing some coders, we will remove those |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21634
diff
changeset
|
194 ## from the list. Some info can be obtained directly from GraphicsMagick |
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21634
diff
changeset
|
195 ## through the CoderInfo object. However, some will need to be hardcoded. |
16901 | 196 ## |
197 ## The association between file extensions and coders needs to be done | |
198 ## with a manually coded list (file extensions do not define the image | |
199 ## format and GraphicsMagick will not be fooled by changing the extension). | |
200 ## | |
201 ## We can get the read, write, description and multipage fields from | |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21634
diff
changeset
|
202 ## CoderInfo in C++. We should do the same for alpha (GraphicsMagick |
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21634
diff
changeset
|
203 ## calls it matte) but it's not available from CoderInfo. The only way to |
16901 | 204 ## check it is to create a sample image with each coder, then try to read |
205 ## it back with GraphicsMagick and use the matte method on the Image class. | |
206 ## But making such test for each Octave session... meh! While technically | |
207 ## it may be possible that the same coder has different support for alpha | |
208 ## channel in different versions and builds, this doesn't seem to happen. | |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21634
diff
changeset
|
209 ## So we also hardcode those. In the future, maybe the CoderInfo class will |
16901 | 210 ## have a matte method like it does for multipage. |
211 ## | |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21634
diff
changeset
|
212 ## Other notes: some formats have more than one coder that do the same. For |
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21634
diff
changeset
|
213 ## example, for jpeg images there is both the JPG and JPEG coders. However, |
16901 | 214 ## it seems that when reading images, GraphicsMagick only uses one of them |
215 ## and that's the one we list (it's the one reported by imfinfo and that we | |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21634
diff
changeset
|
216 ## can use for isa). However, in some cases GraphicsMagick seems to rely |
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21634
diff
changeset
|
217 ## uniquely on the file extension (JBIG and JBG at least. Create an image |
16901 | 218 ## with each of those coders, swap their extension and it will report the |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21634
diff
changeset
|
219 ## other coder). We don't have such cases on the whitelist but if we did, we |
16901 | 220 ## would need two entries for such cases. |
221 | |
222 ## each row: 1st => Coder, 2nd=> file extensions, 3rd=> alpha | |
223 coders = {"BMP", {"bmp"}, true; | |
224 "CUR", {"cur"}, false; | |
225 "GIF", {"gif"}, true; | |
226 "ICO", {"ico"}, true; | |
227 "JBG", {"jbg"}, false; | |
228 "JBIG", {"jbig"}, false; | |
229 "JP2", {"jp2", "jpx"}, true; | |
230 "JPEG", {"jpg", "jpeg"}, false; # there is also a JPG coder | |
231 "PBM", {"pbm"}, false; | |
232 "PCX", {"pcx"}, true; | |
233 "PGM", {"pgm"}, false; | |
234 "PNG", {"png"}, true; | |
235 ## PNM is a family of formats supporting portable bitmaps (PBM), | |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21634
diff
changeset
|
236 ## graymaps (PGM), and pixmaps (PPM). There is no file format |
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21634
diff
changeset
|
237 ## associated with pnm itself. If PNM is used as the output format |
16901 | 238 ## specifier, then GraphicsMagick automatically selects the most |
239 ## appropriate format to represent the image. | |
240 "PNM", {"pnm"}, true; | |
241 "PPM", {"ppm"}, false; | |
242 "SUN", {"ras"}, true; # SUN Rasterfile | |
243 "TGA", {"tga", "tpic"}, true; | |
244 "TIFF", {"tif", "tiff"}, true; | |
245 "XBM", {"xbm"}, false; | |
246 "XPM", {"xpm"}, true; | |
247 "XWD", {"xwd"}, false; | |
248 }; | |
249 | |
250 for fidx = 1: rows(coders) | |
251 formats(fidx).coder = coders{fidx, 1}; | |
252 formats(fidx).ext = coders{fidx, 2}; | |
253 formats(fidx).alpha = coders{fidx, 3}; | |
254 ## default isa is to check if the format returned by imfinfo is the coder | |
255 formats(fidx).isa = @(x) isa_magick (coders{fidx,1}, x); | |
256 endfor | |
257 | |
258 ## the default info, read, and write functions | |
17086
3db796f89695
Rename private core_imfnc functions to follow the __fnc__ convention style.
Carnë Draug <carandraug@octave.org>
parents:
16949
diff
changeset
|
259 [formats.info ] = deal (@__imfinfo__); |
3db796f89695
Rename private core_imfnc functions to follow the __fnc__ convention style.
Carnë Draug <carandraug@octave.org>
parents:
16949
diff
changeset
|
260 [formats.read ] = deal (@__imread__); |
3db796f89695
Rename private core_imfnc functions to follow the __fnc__ convention style.
Carnë Draug <carandraug@octave.org>
parents:
16949
diff
changeset
|
261 [formats.write] = deal (@__imwrite__); |
16901 | 262 |
263 ## fills rest of format information by checking with GraphicsMagick | |
264 formats = __magick_formats__ (formats); | |
21758
ffad2baa90f7
maint: Use newlines to make code more readable.
Rik <rik@octave.org>
parents:
21751
diff
changeset
|
265 |
24458
516437d2194d
don't allow function parameters (in or out) to be persistent
John W. Eaton <jwe@octave.org>
parents:
23220
diff
changeset
|
266 rformats = formats; |
516437d2194d
don't allow function parameters (in or out) to be persistent
John W. Eaton <jwe@octave.org>
parents:
23220
diff
changeset
|
267 |
16901 | 268 endfunction |
269 | |
270 function is_valid_format (format) | |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21634
diff
changeset
|
271 ## the minimal list of fields required in the structure. We don't |
16901 | 272 ## require multipage because it doesn't exist in matlab |
273 min_fields = {"ext", "read", "isa", "write", "info", "alpha", "description"}; | |
17386
6dbc866379e2
Replace cellfun() occurrences with faster code where possible.
Rik <rik@octave.org>
parents:
17351
diff
changeset
|
274 fields_mask = isfield (format, min_fields); |
16901 | 275 if (! all (fields_mask)) |
27216
823b4bcf79fc
unless necessary for formatting or code, use ' instead of `
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
276 error ("imformats: structure has missing field '%s'.", min_fields(! fields_mask){1}); |
16901 | 277 endif |
21758
ffad2baa90f7
maint: Use newlines to make code more readable.
Rik <rik@octave.org>
parents:
21751
diff
changeset
|
278 |
16901 | 279 endfunction |
280 | |
281 function match = find_ext_idx (formats, ext) | |
21758
ffad2baa90f7
maint: Use newlines to make code more readable.
Rik <rik@octave.org>
parents:
21751
diff
changeset
|
282 ## FIXME: what should we do if there's more than one hit? |
ffad2baa90f7
maint: Use newlines to make code more readable.
Rik <rik@octave.org>
parents:
21751
diff
changeset
|
283 ## Should this function prevent the addition of |
ffad2baa90f7
maint: Use newlines to make code more readable.
Rik <rik@octave.org>
parents:
21751
diff
changeset
|
284 ## duplicated extensions? |
18292
4718af222d9d
image/imformats.m: be case insensitive about file extension.
Carnë Draug <carandraug@octave.org>
parents:
17580
diff
changeset
|
285 match = cellfun (@(x) any (strcmpi (x, ext)), {formats.ext}); |
16901 | 286 endfunction |
287 | |
288 function bool = isa_magick (coder, filename) | |
21758
ffad2baa90f7
maint: Use newlines to make code more readable.
Rik <rik@octave.org>
parents:
21751
diff
changeset
|
289 |
16901 | 290 bool = false; |
291 try | |
17351
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17338
diff
changeset
|
292 info = __magick_ping__ (filename, 1); |
16901 | 293 bool = strcmp (coder, info.Format); |
294 end_try_catch | |
21758
ffad2baa90f7
maint: Use newlines to make code more readable.
Rik <rik@octave.org>
parents:
21751
diff
changeset
|
295 |
16901 | 296 endfunction |
16949
1eb5e5f0ee13
imformats.m: add tests and fix bug when adding new formats.
Carnë Draug <carandraug@octave.org>
parents:
16922
diff
changeset
|
297 |
20170
c0f64bc26eee
imformats.m: rewrite pretty print of format table.
Carnë Draug <carandraug@octave.org>
parents:
20169
diff
changeset
|
298 function pretty_print_formats (formats) |
20169
cf96961effdb
imformats.m: implement pretty print when nargout is zero (bug #44119)
Hartmut Gimpel <hg_code@gmx.de>
parents:
19697
diff
changeset
|
299 ## define header names (none should be shorter than 3 characters) |
20170
c0f64bc26eee
imformats.m: rewrite pretty print of format table.
Carnë Draug <carandraug@octave.org>
parents:
20169
diff
changeset
|
300 headers = {"Extension", "isa", "Info", "Read", "Write", "Alpha", "Description"}; |
c0f64bc26eee
imformats.m: rewrite pretty print of format table.
Carnë Draug <carandraug@octave.org>
parents:
20169
diff
changeset
|
301 cols_length = cellfun (@numel, headers); |
c0f64bc26eee
imformats.m: rewrite pretty print of format table.
Carnë Draug <carandraug@octave.org>
parents:
20169
diff
changeset
|
302 |
c0f64bc26eee
imformats.m: rewrite pretty print of format table.
Carnë Draug <carandraug@octave.org>
parents:
20169
diff
changeset
|
303 ## Adjust the maximal length of the extensions column |
c0f64bc26eee
imformats.m: rewrite pretty print of format table.
Carnë Draug <carandraug@octave.org>
parents:
20169
diff
changeset
|
304 extensions = cellfun (@strjoin, {formats.ext}, {", "}, |
c0f64bc26eee
imformats.m: rewrite pretty print of format table.
Carnë Draug <carandraug@octave.org>
parents:
20169
diff
changeset
|
305 "UniformOutput", false); |
c0f64bc26eee
imformats.m: rewrite pretty print of format table.
Carnë Draug <carandraug@octave.org>
parents:
20169
diff
changeset
|
306 cols_length(1) = max (max (cellfun (@numel, extensions)), cols_length(1)); |
c0f64bc26eee
imformats.m: rewrite pretty print of format table.
Carnë Draug <carandraug@octave.org>
parents:
20169
diff
changeset
|
307 headers{1} = postpad (headers{1}, cols_length(1), " "); |
c0f64bc26eee
imformats.m: rewrite pretty print of format table.
Carnë Draug <carandraug@octave.org>
parents:
20169
diff
changeset
|
308 |
c0f64bc26eee
imformats.m: rewrite pretty print of format table.
Carnë Draug <carandraug@octave.org>
parents:
20169
diff
changeset
|
309 ## Print the headers |
c0f64bc26eee
imformats.m: rewrite pretty print of format table.
Carnë Draug <carandraug@octave.org>
parents:
20169
diff
changeset
|
310 disp (strjoin (headers, " | ")); |
c0f64bc26eee
imformats.m: rewrite pretty print of format table.
Carnë Draug <carandraug@octave.org>
parents:
20169
diff
changeset
|
311 under_headers = cellfun (@(x) repmat ("-", 1, numel (x)), headers, |
c0f64bc26eee
imformats.m: rewrite pretty print of format table.
Carnë Draug <carandraug@octave.org>
parents:
20169
diff
changeset
|
312 "UniformOutput", false); |
c0f64bc26eee
imformats.m: rewrite pretty print of format table.
Carnë Draug <carandraug@octave.org>
parents:
20169
diff
changeset
|
313 disp (strjoin (under_headers, "-+-")); |
c0f64bc26eee
imformats.m: rewrite pretty print of format table.
Carnë Draug <carandraug@octave.org>
parents:
20169
diff
changeset
|
314 |
c0f64bc26eee
imformats.m: rewrite pretty print of format table.
Carnë Draug <carandraug@octave.org>
parents:
20169
diff
changeset
|
315 template = strjoin (arrayfun (@(x) sprintf ("%%-%is", x), cols_length, |
c0f64bc26eee
imformats.m: rewrite pretty print of format table.
Carnë Draug <carandraug@octave.org>
parents:
20169
diff
changeset
|
316 "UniformOutput", false), " | "); |
c0f64bc26eee
imformats.m: rewrite pretty print of format table.
Carnë Draug <carandraug@octave.org>
parents:
20169
diff
changeset
|
317 |
c0f64bc26eee
imformats.m: rewrite pretty print of format table.
Carnë Draug <carandraug@octave.org>
parents:
20169
diff
changeset
|
318 ## Print the function handle for this things won't be a pretty table. So |
c0f64bc26eee
imformats.m: rewrite pretty print of format table.
Carnë Draug <carandraug@octave.org>
parents:
20169
diff
changeset
|
319 ## instead we replace them with "yes" or "no", based on the support it has. |
c0f64bc26eee
imformats.m: rewrite pretty print of format table.
Carnë Draug <carandraug@octave.org>
parents:
20169
diff
changeset
|
320 yes_no_cols = cat (2, {formats.isa}(:), {formats.info}(:), {formats.read}(:), |
c0f64bc26eee
imformats.m: rewrite pretty print of format table.
Carnë Draug <carandraug@octave.org>
parents:
20169
diff
changeset
|
321 {formats.write}(:), {formats.alpha}(:)); |
c0f64bc26eee
imformats.m: rewrite pretty print of format table.
Carnë Draug <carandraug@octave.org>
parents:
20169
diff
changeset
|
322 empty = cellfun (@isempty, yes_no_cols); |
c0f64bc26eee
imformats.m: rewrite pretty print of format table.
Carnë Draug <carandraug@octave.org>
parents:
20169
diff
changeset
|
323 yes_no_cols(empty) = "no"; |
c0f64bc26eee
imformats.m: rewrite pretty print of format table.
Carnë Draug <carandraug@octave.org>
parents:
20169
diff
changeset
|
324 yes_no_cols(! empty) = "yes"; |
c0f64bc26eee
imformats.m: rewrite pretty print of format table.
Carnë Draug <carandraug@octave.org>
parents:
20169
diff
changeset
|
325 |
c0f64bc26eee
imformats.m: rewrite pretty print of format table.
Carnë Draug <carandraug@octave.org>
parents:
20169
diff
changeset
|
326 descriptions = {formats.description}; |
c0f64bc26eee
imformats.m: rewrite pretty print of format table.
Carnë Draug <carandraug@octave.org>
parents:
20169
diff
changeset
|
327 table = cat (2, extensions(:), yes_no_cols, descriptions(:)); |
21634
96518f623c91
Backed out changeset dcf8922b724b
Mike Miller <mtmiller@octave.org>
parents:
21633
diff
changeset
|
328 printf ([template "\n"], table'{:}); |
20170
c0f64bc26eee
imformats.m: rewrite pretty print of format table.
Carnë Draug <carandraug@octave.org>
parents:
20169
diff
changeset
|
329 |
20169
cf96961effdb
imformats.m: implement pretty print when nargout is zero (bug #44119)
Hartmut Gimpel <hg_code@gmx.de>
parents:
19697
diff
changeset
|
330 endfunction |
cf96961effdb
imformats.m: implement pretty print when nargout is zero (bug #44119)
Hartmut Gimpel <hg_code@gmx.de>
parents:
19697
diff
changeset
|
331 |
21758
ffad2baa90f7
maint: Use newlines to make code more readable.
Rik <rik@octave.org>
parents:
21751
diff
changeset
|
332 |
21489
ea81c2fdd568
imformats: return empty instead of error if there's no support for image IO.
Carnë Draug <carandraug@octave.org>
parents:
20852
diff
changeset
|
333 ## This must work, even without support for image IO |
ea81c2fdd568
imformats: return empty instead of error if there's no support for image IO.
Carnë Draug <carandraug@octave.org>
parents:
20852
diff
changeset
|
334 %!test |
ea81c2fdd568
imformats: return empty instead of error if there's no support for image IO.
Carnë Draug <carandraug@octave.org>
parents:
20852
diff
changeset
|
335 %! formats = imformats (); |
21580
ecce63c99c3f
maint: Add semicolons to terminate code in %! blocks.
Rik <rik@octave.org>
parents:
21489
diff
changeset
|
336 %! assert (isstruct (formats)); |
21489
ea81c2fdd568
imformats: return empty instead of error if there's no support for image IO.
Carnë Draug <carandraug@octave.org>
parents:
20852
diff
changeset
|
337 %! |
ea81c2fdd568
imformats: return empty instead of error if there's no support for image IO.
Carnë Draug <carandraug@octave.org>
parents:
20852
diff
changeset
|
338 %! min_fields = {"ext", "read", "isa", "write", "info", "alpha", "description"}; |
21580
ecce63c99c3f
maint: Add semicolons to terminate code in %! blocks.
Rik <rik@octave.org>
parents:
21489
diff
changeset
|
339 %! assert (all (ismember (min_fields, fieldnames (formats)))); |
21489
ea81c2fdd568
imformats: return empty instead of error if there's no support for image IO.
Carnë Draug <carandraug@octave.org>
parents:
20852
diff
changeset
|
340 %! |
ea81c2fdd568
imformats: return empty instead of error if there's no support for image IO.
Carnë Draug <carandraug@octave.org>
parents:
20852
diff
changeset
|
341 %! if (__have_feature__ ("MAGICK")) |
21580
ecce63c99c3f
maint: Add semicolons to terminate code in %! blocks.
Rik <rik@octave.org>
parents:
21489
diff
changeset
|
342 %! assert (numel (formats) > 0); |
21489
ea81c2fdd568
imformats: return empty instead of error if there's no support for image IO.
Carnë Draug <carandraug@octave.org>
parents:
20852
diff
changeset
|
343 %! else |
21580
ecce63c99c3f
maint: Add semicolons to terminate code in %! blocks.
Rik <rik@octave.org>
parents:
21489
diff
changeset
|
344 %! assert (numel (formats), 0); |
21489
ea81c2fdd568
imformats: return empty instead of error if there's no support for image IO.
Carnë Draug <carandraug@octave.org>
parents:
20852
diff
changeset
|
345 %! endif |
ea81c2fdd568
imformats: return empty instead of error if there's no support for image IO.
Carnë Draug <carandraug@octave.org>
parents:
20852
diff
changeset
|
346 |
18298
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
347 ## When imread or imfinfo are called, the file must exist or the |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
348 ## function defined by imformats will never be called. Because |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
349 ## of this, we must create a file for the tests to work. |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
350 |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
351 ## changing the function that does the reading |
16949
1eb5e5f0ee13
imformats.m: add tests and fix bug when adding new formats.
Carnë Draug <carandraug@octave.org>
parents:
16922
diff
changeset
|
352 %!testif HAVE_MAGICK |
19278
6ca096827123
Use tempname() rather than tmpnam() in core Octave.
Rik <rik@octave.org>
parents:
18298
diff
changeset
|
353 %! fname = [tempname() ".jpg"]; |
18298
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
354 %! def_fmt = imformats (); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
355 %! fid = fopen (fname, "w"); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
356 %! unwind_protect |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
357 %! fmt = imformats ("jpg"); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
358 %! fmt.read = @numel; |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
359 %! imformats ("update", "jpg", fmt); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
360 %! assert (imread (fname), numel (fname)); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
361 %! unwind_protect_cleanup |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
362 %! fclose (fid); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
363 %! unlink (fname); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
364 %! imformats (def_fmt); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
365 %! end_unwind_protect |
16949
1eb5e5f0ee13
imformats.m: add tests and fix bug when adding new formats.
Carnë Draug <carandraug@octave.org>
parents:
16922
diff
changeset
|
366 |
1eb5e5f0ee13
imformats.m: add tests and fix bug when adding new formats.
Carnë Draug <carandraug@octave.org>
parents:
16922
diff
changeset
|
367 ## adding a new format |
1eb5e5f0ee13
imformats.m: add tests and fix bug when adding new formats.
Carnë Draug <carandraug@octave.org>
parents:
16922
diff
changeset
|
368 %!testif HAVE_MAGICK |
19278
6ca096827123
Use tempname() rather than tmpnam() in core Octave.
Rik <rik@octave.org>
parents:
18298
diff
changeset
|
369 %! fname = [tempname() ".new_fmt"]; |
18298
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
370 %! def_fmt = imformats (); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
371 %! fid = fopen (fname, "w"); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
372 %! unwind_protect |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
373 %! fmt = imformats ("jpg"); # take jpg as template |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
374 %! fmt.ext = "new_fmt"; |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
375 %! fmt.read = @() true (); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
376 %! imformats ("add", fmt); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
377 %! assert (imread (fname), true); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
378 %! unwind_protect_cleanup |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
379 %! fclose (fid); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
380 %! unlink (fname); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
381 %! imformats (def_fmt); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
382 %! end_unwind_protect |
16949
1eb5e5f0ee13
imformats.m: add tests and fix bug when adding new formats.
Carnë Draug <carandraug@octave.org>
parents:
16922
diff
changeset
|
383 |
18298
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
384 ## adding multiple formats at the same time |
16949
1eb5e5f0ee13
imformats.m: add tests and fix bug when adding new formats.
Carnë Draug <carandraug@octave.org>
parents:
16922
diff
changeset
|
385 %!testif HAVE_MAGICK |
19278
6ca096827123
Use tempname() rather than tmpnam() in core Octave.
Rik <rik@octave.org>
parents:
18298
diff
changeset
|
386 %! fname1 = [tempname() ".new_fmt1"]; |
18298
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
387 %! fid1 = fopen (fname1, "w"); |
19278
6ca096827123
Use tempname() rather than tmpnam() in core Octave.
Rik <rik@octave.org>
parents:
18298
diff
changeset
|
388 %! fname2 = [tempname() ".new_fmt2"]; |
18298
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
389 %! fid2 = fopen (fname2, "w"); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
390 %! def_fmt = imformats (); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
391 %! unwind_protect |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
392 %! fmt = imformats ("jpg"); # take jpg as template |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
393 %! fmt.ext = "new_fmt1"; |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
394 %! fmt.read = @() true(); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
395 %! fmt(2) = fmt(1); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
396 %! fmt(2).ext = "new_fmt2"; |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
397 %! imformats ("add", fmt); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
398 %! assert (imread (fname1), true); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
399 %! assert (imread (fname2), true); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
400 %! unwind_protect_cleanup |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
401 %! fclose (fid1); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
402 %! fclose (fid2); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
403 %! unlink (fname1); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
404 %! unlink (fname2); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
405 %! imformats (def_fmt); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
406 %! end_unwind_protect |
16949
1eb5e5f0ee13
imformats.m: add tests and fix bug when adding new formats.
Carnë Draug <carandraug@octave.org>
parents:
16922
diff
changeset
|
407 |
18298
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18297
diff
changeset
|
408 ## changing format and resetting back to default |
16949
1eb5e5f0ee13
imformats.m: add tests and fix bug when adding new formats.
Carnë Draug <carandraug@octave.org>
parents:
16922
diff
changeset
|
409 %!testif HAVE_MAGICK |
1eb5e5f0ee13
imformats.m: add tests and fix bug when adding new formats.
Carnë Draug <carandraug@octave.org>
parents:
16922
diff
changeset
|
410 %! ori_fmt = mod_fmt = imformats ("jpg"); |
1eb5e5f0ee13
imformats.m: add tests and fix bug when adding new formats.
Carnë Draug <carandraug@octave.org>
parents:
16922
diff
changeset
|
411 %! mod_fmt.description = "Another description"; |
1eb5e5f0ee13
imformats.m: add tests and fix bug when adding new formats.
Carnë Draug <carandraug@octave.org>
parents:
16922
diff
changeset
|
412 %! imformats ("update", "jpg", mod_fmt); |
1eb5e5f0ee13
imformats.m: add tests and fix bug when adding new formats.
Carnë Draug <carandraug@octave.org>
parents:
16922
diff
changeset
|
413 %! new_fmt = imformats ("jpg"); |
1eb5e5f0ee13
imformats.m: add tests and fix bug when adding new formats.
Carnë Draug <carandraug@octave.org>
parents:
16922
diff
changeset
|
414 %! assert (new_fmt.description, mod_fmt.description); |
1eb5e5f0ee13
imformats.m: add tests and fix bug when adding new formats.
Carnë Draug <carandraug@octave.org>
parents:
16922
diff
changeset
|
415 %! imformats ("factory"); |
1eb5e5f0ee13
imformats.m: add tests and fix bug when adding new formats.
Carnë Draug <carandraug@octave.org>
parents:
16922
diff
changeset
|
416 %! new_fmt = imformats ("jpg"); |
1eb5e5f0ee13
imformats.m: add tests and fix bug when adding new formats.
Carnë Draug <carandraug@octave.org>
parents:
16922
diff
changeset
|
417 %! assert (new_fmt.description, ori_fmt.description); |
1eb5e5f0ee13
imformats.m: add tests and fix bug when adding new formats.
Carnë Draug <carandraug@octave.org>
parents:
16922
diff
changeset
|
418 |
18297
1589b2fc74ae
imformats.m: add test for updating a format with invalid struct.
Carnë Draug <carandraug@octave.org>
parents:
18292
diff
changeset
|
419 ## updating to an invalid format should cause an error |
1589b2fc74ae
imformats.m: add test for updating a format with invalid struct.
Carnë Draug <carandraug@octave.org>
parents:
18292
diff
changeset
|
420 %!testif HAVE_MAGICK |
1589b2fc74ae
imformats.m: add test for updating a format with invalid struct.
Carnë Draug <carandraug@octave.org>
parents:
18292
diff
changeset
|
421 %! fmt = imformats ("jpg"); |
1589b2fc74ae
imformats.m: add test for updating a format with invalid struct.
Carnë Draug <carandraug@octave.org>
parents:
18292
diff
changeset
|
422 %! fmt = rmfield (fmt, "read"); |
1589b2fc74ae
imformats.m: add test for updating a format with invalid struct.
Carnë Draug <carandraug@octave.org>
parents:
18292
diff
changeset
|
423 %! error_thrown = false; |
1589b2fc74ae
imformats.m: add test for updating a format with invalid struct.
Carnë Draug <carandraug@octave.org>
parents:
18292
diff
changeset
|
424 %! try |
1589b2fc74ae
imformats.m: add test for updating a format with invalid struct.
Carnë Draug <carandraug@octave.org>
parents:
18292
diff
changeset
|
425 %! imformats ("update", "jpg", fmt); |
1589b2fc74ae
imformats.m: add test for updating a format with invalid struct.
Carnë Draug <carandraug@octave.org>
parents:
18292
diff
changeset
|
426 %! catch |
1589b2fc74ae
imformats.m: add test for updating a format with invalid struct.
Carnë Draug <carandraug@octave.org>
parents:
18292
diff
changeset
|
427 %! error_thrown = true; |
1589b2fc74ae
imformats.m: add test for updating a format with invalid struct.
Carnë Draug <carandraug@octave.org>
parents:
18292
diff
changeset
|
428 %! end_try_catch |
1589b2fc74ae
imformats.m: add test for updating a format with invalid struct.
Carnë Draug <carandraug@octave.org>
parents:
18292
diff
changeset
|
429 %! assert (error_thrown, true); |