Mercurial > hg > octave-nkf
annotate scripts/image/imformats.m @ 19470:6ca096827123
Use tempname() rather than tmpnam() in core Octave.
* scripts/miscellaneous/tempname.m: Removed m-file as function is now C++.
* scripts/miscellaneous/tmpnam.m: New m-file is an alias that calls tempname.
* scripts/miscellaneous/module.mk: Add tmpnam.m to build system.
* io.txi: Place tempname, tempdir, P_tmpdir docstrings in section on temporary
files.
* system.txi: Remove tempname, tempdir, P_tmpdir docstrings from generic
system functions section of manual.
* dirfns.cc, dlmread.cc, md5sum.cc, ov-fcn-handle.cc: Replace instances
of tmpnam with tempname in BIST code.
* file-io.cc (Ftempname): Change DEFUNX for tmpnam to DEFUN for tempname.
Remove seealso links to tmpnam.
* ftp.m, playaudio.m, wavwrite.m, imformats.m, imread.m, imwrite.m, imageIO.m,
csvwrite.m, dlmwrite.m, fileread.m, importdata.m, textread.m, textscan.m,
genvarname.m, unpack.m, install.m, legend.m, __gnuplot_drawnow__.m,
copyobj.m, hgsave.m, print.m, __ghostscript__.m, __gnuplot_get_var__.m,
__gnuplot_ginput__.m, __gnuplot_print__.m: Replace tmpnam with tempname in
core code.
* build-sparse-tests.sh, io.tst, prefer.tst, system.tst: Replace tmpnam with
tempname in test code.
author | Rik <rik@octave.org> |
---|---|
date | Wed, 22 Oct 2014 10:41:15 -0700 |
parents | 15db54c4a572 |
children | b95aab49b6be |
rev | line source |
---|---|
16901 | 1 ## Copyright (C) 2013 Carnë Draug |
2 ## | |
3 ## This file is part of Octave. | |
4 ## | |
5 ## Octave is free software; you can redistribute it and/or modify it | |
6 ## under the terms of the GNU General Public License as published by | |
7 ## the Free Software Foundation; either version 3 of the License, or (at | |
8 ## your option) any later version. | |
9 ## | |
10 ## Octave is distributed in the hope that it will be useful, but | |
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
13 ## General Public License for more details. | |
14 ## | |
15 ## You should have received a copy of the GNU General Public License | |
16 ## along with Octave; see the file COPYING. If not, see | |
17 ## <http://www.gnu.org/licenses/>. | |
18 | |
19 ## -*- texinfo -*- | |
20 ## @deftypefn {Function File} {} imformats () | |
21 ## @deftypefnx {Function File} {@var{formats} =} imformats (@var{ext}) | |
22 ## @deftypefnx {Function File} {@var{formats} =} imformats (@var{format}) | |
23 ## @deftypefnx {Function File} {@var{formats} =} imformats ("add", @var{format}) | |
24 ## @deftypefnx {Function File} {@var{formats} =} imformats ("remove", @var{ext}) | |
25 ## @deftypefnx {Function File} {@var{formats} =} imformats ("update", @var{ext}, @var{format}) | |
26 ## @deftypefnx {Function File} {@var{formats} =} imformats ("factory") | |
27 ## Manage supported image formats. | |
28 ## | |
29 ## @var{formats} is a structure with information about each supported file | |
30 ## format, or from a specific format @var{ext}, the value displayed on the | |
31 ## field @code{ext}. It contains the following fields: | |
32 ## | |
33 ## @table @asis | |
34 ## @item ext | |
35 ## The name of the file format. This may match the file extension but Octave | |
36 ## will automatically detect the file format. | |
17170
d6499c14021c
doc: Periodic grammarcheck of documentation.
Rik <rik@octave.org>
parents:
17086
diff
changeset
|
37 ## |
16901 | 38 ## @item description |
39 ## A long description of the file format. | |
17170
d6499c14021c
doc: Periodic grammarcheck of documentation.
Rik <rik@octave.org>
parents:
17086
diff
changeset
|
40 ## |
16922
bfd119642f6a
doc: Fix some spellings in image.texi.
Rik <rik@octave.org>
parents:
16916
diff
changeset
|
41 ## @item @nospell{isa} |
16901 | 42 ## 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
|
43 ## |
16901 | 44 ## @item write |
45 ## 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
|
46 ## |
16901 | 47 ## @item read |
48 ## A function handle to open files the specified format. | |
17170
d6499c14021c
doc: Periodic grammarcheck of documentation.
Rik <rik@octave.org>
parents:
17086
diff
changeset
|
49 ## |
16901 | 50 ## @item info |
51 ## 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
|
52 ## |
16901 | 53 ## @item alpha |
54 ## 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
|
55 ## |
16901 | 56 ## @item multipage |
57 ## Logical value if format supports multipage (multiple images per file). | |
58 ## @end table | |
59 ## | |
60 ## It is possible to change the way Octave manages file formats with the options | |
17281
bc924baa2c4e
doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents:
17170
diff
changeset
|
61 ## @qcode{"add"}, @qcode{"remove"}, and @qcode{"update"}, and supplying a |
16901 | 62 ## 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
|
63 ## @qcode{"factory"} resets the configuration to the default. |
16901 | 64 ## |
65 ## This can be used by Octave packages to extend the image reading capabilities | |
66 ## Octave, through use of the PKG_ADD and PKG_DEL commands. | |
67 ## | |
68 ## @seealso{imfinfo, imread, imwrite} | |
69 ## @end deftypefn | |
70 | |
71 ## Author: Carnë Draug <carandraug@octave.org> | |
72 | |
73 function varargout = imformats (arg1, arg2, arg3) | |
74 if (nargin > 3) | |
75 print_usage (); | |
76 endif | |
77 | |
78 persistent formats = default_formats (); | |
79 | |
80 if (nargin == 0 && nargout == 0) | |
81 error ("imformats: pretty print not yet implemented."); | |
82 elseif (nargin >= 1) | |
83 if (isstruct (arg1)) | |
84 arrayfun (@is_valid_format, arg1); | |
85 ## FIXME: what is the return value in this situation? | |
86 formats = arg1; | |
87 | |
88 elseif (ischar (arg1)) | |
89 switch (tolower (arg1)) | |
90 case "add", | |
91 if (! isstruct (arg2)) | |
92 error ("imformats: FORMAT to %s must be a structure.", arg1); | |
93 endif | |
94 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
|
95 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
|
96 varargout{1} = formats; |
16901 | 97 |
98 case {"remove", "update"}, | |
99 if (! ischar (arg2)) | |
100 error ("imformats: EXT to %s must be a string.", arg1); | |
101 endif | |
102 ## FIXME: suppose a format with multiple extensions. If one of | |
103 ## them is requested to be removed, should we remove the | |
104 ## 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
|
105 match = find_ext_idx (formats, arg2); |
16901 | 106 if (! any (match)) |
107 error ("imformats: no EXT `%s' found.", arg2); | |
108 endif | |
109 if (strcmpi (arg1, "remove")) | |
110 formats(match) = []; | |
111 else | |
112 ## then it's update | |
113 if (! isstruct (arg3)) | |
114 error ("imformats: FORMAT to update must be a structure."); | |
115 endif | |
116 is_valid_format (arg3); | |
117 formats(match) = arg3; | |
118 endif | |
16907
04f4f067eb33
imformats: fix typos and silence some statements.
Carnë Draug <carandraug@octave.org>
parents:
16906
diff
changeset
|
119 varargout{1} = formats; |
16901 | 120 |
121 case "factory", | |
122 formats = default_formats (); | |
123 otherwise | |
124 ## 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
|
125 match = find_ext_idx (formats, arg1); |
16901 | 126 ## For matlab compatibility, if we don't find any format we must |
127 ## return an empty struct with NO fields. We can't use match as mask | |
128 if (any (match)) | |
16907
04f4f067eb33
imformats: fix typos and silence some statements.
Carnë Draug <carandraug@octave.org>
parents:
16906
diff
changeset
|
129 varargout{1} = formats(match); |
16901 | 130 else |
16907
04f4f067eb33
imformats: fix typos and silence some statements.
Carnë Draug <carandraug@octave.org>
parents:
16906
diff
changeset
|
131 varargout{1} = struct (); |
16901 | 132 endif |
133 endswitch | |
134 else | |
135 error ("imformats: first argument must be either a structure or string."); | |
136 endif | |
137 else | |
138 varargout{1} = formats; | |
139 endif | |
140 endfunction | |
141 | |
142 function formats = default_formats () | |
143 | |
144 ## The available formats are dependent on what the user has installed at | |
145 ## a given time, and how GraphicsMagick was built. Checking for | |
146 ## GraphicsMagick features when building Octave is not enough since it | |
147 ## delegates some of them to external programs which can be removed or | |
148 ## installed at any time. | |
149 ## The recommended method would be to use CoderInfoList() to get a list of | |
150 ## all available coders and try to write and read back a small test image. | |
151 ## But this will not work since some coders are readable or writable only. | |
152 ## It will still fail if we test only the ones marked as readable and | |
153 ## writable because some RW coders are not of image formats (NULL, 8BIM, | |
154 ## or EXIF for example). | |
155 ## So we'd need a blacklist (unacceptable because a `bad' coder may be | |
156 ## added later) or a whitelist. A whitelist means that even with a | |
157 ## super-fancy recent build of GraphicsMagick, some formats won't be listed | |
158 ## by imformats but in truth, we will still be able to read and write them | |
159 ## since imread() and imwrite() will give it a try anyway. | |
160 ## | |
161 ## For more info and comments from the GraphicsMagick main developer, see | |
162 ## http://sourceforge.net/mailarchive/forum.php?thread_name=alpine.GSO.2.01.1304301916050.2267%40freddy.simplesystems.org&forum_name=graphicsmagick-help | |
163 | |
164 persistent formats = struct ( "coder", {}, | |
165 "ext", {}, | |
166 "isa", {}, | |
167 "info", {}, | |
168 "read", {}, | |
169 "write", {}, | |
170 "alpha", {}, | |
171 "description", {}, | |
172 "multipage", {}); | |
173 | |
174 ## Image IO abilities won't change during the same Octave session, | |
175 ## there's no need to go and calculate it all over again if we are | |
176 ## requested to reset back to factory. | |
177 if (! isempty (formats)) | |
17312
088d014a7fe2
Use semicolon after "return" statement in core m-files.
Rik <rik@octave.org>
parents:
17281
diff
changeset
|
178 return; |
16901 | 179 endif |
180 | |
181 ## Building the formats info | |
182 ## | |
183 ## As mentioned above we start with a whitelist of coders. Since the | |
184 ## GraphicsMagick build may be missing some coders, we will remove those | |
185 ## from the list. Some info can be obtained directly from GraphicsMagick | |
186 ## through the CoderInfo object. However, some will need to be hardcoded. | |
187 ## | |
188 ## The association between file extensions and coders needs to be done | |
189 ## with a manually coded list (file extensions do not define the image | |
190 ## format and GraphicsMagick will not be fooled by changing the extension). | |
191 ## | |
192 ## We can get the read, write, description and multipage fields from | |
193 ## CoderInfo in C++. We should do the same for alpha (GraphicsMagick | |
194 ## calls it matte) but it's not available from CoderInfo. The only way to | |
195 ## check it is to create a sample image with each coder, then try to read | |
196 ## it back with GraphicsMagick and use the matte method on the Image class. | |
197 ## But making such test for each Octave session... meh! While technically | |
198 ## it may be possible that the same coder has different support for alpha | |
199 ## channel in different versions and builds, this doesn't seem to happen. | |
200 ## So we also hardcode those. In the future, maybe the CoderInfo class will | |
201 ## have a matte method like it does for multipage. | |
202 ## | |
203 ## Other notes: some formats have more than one coder that do the same. For | |
204 ## example, for jpeg images there is both the JPG and JPEG coders. However, | |
205 ## it seems that when reading images, GraphicsMagick only uses one of them | |
206 ## and that's the one we list (it's the one reported by imfinfo and that we | |
207 ## can use for isa). However, in some cases GraphicsMagick seems to rely | |
208 ## uniquely on the file extension ((JBIG and JBG at least. Create an image | |
209 ## with each of those coders, swap their extension and it will report the | |
210 ## other coder). We don't have such cases on the whitelist but if we did, we | |
211 ## would need two entries for such cases. | |
212 | |
213 ## each row: 1st => Coder, 2nd=> file extensions, 3rd=> alpha | |
214 coders = {"BMP", {"bmp"}, true; | |
215 "CUR", {"cur"}, false; | |
216 "GIF", {"gif"}, true; | |
217 "ICO", {"ico"}, true; | |
218 "JBG", {"jbg"}, false; | |
219 "JBIG", {"jbig"}, false; | |
220 "JP2", {"jp2", "jpx"}, true; | |
221 "JPEG", {"jpg", "jpeg"}, false; # there is also a JPG coder | |
222 "PBM", {"pbm"}, false; | |
223 "PCX", {"pcx"}, true; | |
224 "PGM", {"pgm"}, false; | |
225 "PNG", {"png"}, true; | |
226 ## PNM is a family of formats supporting portable bitmaps (PBM), | |
227 ## graymaps (PGM), and pixmaps (PPM). There is no file format | |
228 ## associated with pnm itself. If PNM is used as the output format | |
229 ## specifier, then GraphicsMagick automatically selects the most | |
230 ## appropriate format to represent the image. | |
231 "PNM", {"pnm"}, true; | |
232 "PPM", {"ppm"}, false; | |
233 "SUN", {"ras"}, true; # SUN Rasterfile | |
234 "TGA", {"tga", "tpic"}, true; | |
235 "TIFF", {"tif", "tiff"}, true; | |
236 "XBM", {"xbm"}, false; | |
237 "XPM", {"xpm"}, true; | |
238 "XWD", {"xwd"}, false; | |
239 }; | |
240 | |
241 for fidx = 1: rows(coders) | |
242 formats(fidx).coder = coders{fidx, 1}; | |
243 formats(fidx).ext = coders{fidx, 2}; | |
244 formats(fidx).alpha = coders{fidx, 3}; | |
245 ## default isa is to check if the format returned by imfinfo is the coder | |
246 formats(fidx).isa = @(x) isa_magick (coders{fidx,1}, x); | |
247 endfor | |
248 | |
249 ## 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
|
250 [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
|
251 [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
|
252 [formats.write] = deal (@__imwrite__); |
16901 | 253 |
254 ## fills rest of format information by checking with GraphicsMagick | |
255 formats = __magick_formats__ (formats); | |
256 endfunction | |
257 | |
258 function is_valid_format (format) | |
259 ## the minimal list of fields required in the structure. We don't | |
260 ## require multipage because it doesn't exist in matlab | |
261 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
|
262 fields_mask = isfield (format, min_fields); |
16901 | 263 if (! all (fields_mask)) |
264 error ("imformats: structure has missing field `%s'.", min_fields(! fields_mask){1}); | |
265 endif | |
266 endfunction | |
267 | |
268 function match = find_ext_idx (formats, ext) | |
269 ## XXX: what should we do if there's more than one hit? | |
270 ## Should this function prevent the addition of | |
271 ## duplicated extensions? | |
18317
4718af222d9d
image/imformats.m: be case insensitive about file extension.
Carnë Draug <carandraug@octave.org>
parents:
17580
diff
changeset
|
272 match = cellfun (@(x) any (strcmpi (x, ext)), {formats.ext}); |
16901 | 273 endfunction |
274 | |
275 function bool = isa_magick (coder, filename) | |
276 bool = false; | |
277 try | |
17351
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17338
diff
changeset
|
278 info = __magick_ping__ (filename, 1); |
16901 | 279 bool = strcmp (coder, info.Format); |
280 end_try_catch | |
281 endfunction | |
16949
1eb5e5f0ee13
imformats.m: add tests and fix bug when adding new formats.
Carnë Draug <carandraug@octave.org>
parents:
16922
diff
changeset
|
282 |
18340
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
283 ## 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:
18339
diff
changeset
|
284 ## 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:
18339
diff
changeset
|
285 ## 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:
18339
diff
changeset
|
286 |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
287 ## 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
|
288 %!testif HAVE_MAGICK |
19470
6ca096827123
Use tempname() rather than tmpnam() in core Octave.
Rik <rik@octave.org>
parents:
18340
diff
changeset
|
289 %! fname = [tempname() ".jpg"]; |
18340
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
290 %! def_fmt = imformats (); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
291 %! fid = fopen (fname, "w"); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
292 %! unwind_protect |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
293 %! fmt = imformats ("jpg"); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
294 %! fmt.read = @numel; |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
295 %! imformats ("update", "jpg", fmt); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
296 %! 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:
18339
diff
changeset
|
297 %! unwind_protect_cleanup |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
298 %! fclose (fid); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
299 %! unlink (fname); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
300 %! imformats (def_fmt); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
301 %! 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
|
302 |
1eb5e5f0ee13
imformats.m: add tests and fix bug when adding new formats.
Carnë Draug <carandraug@octave.org>
parents:
16922
diff
changeset
|
303 ## 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
|
304 %!testif HAVE_MAGICK |
19470
6ca096827123
Use tempname() rather than tmpnam() in core Octave.
Rik <rik@octave.org>
parents:
18340
diff
changeset
|
305 %! fname = [tempname() ".new_fmt"]; |
18340
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
306 %! def_fmt = imformats (); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
307 %! fid = fopen (fname, "w"); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
308 %! unwind_protect |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
309 %! 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:
18339
diff
changeset
|
310 %! fmt.ext = "new_fmt"; |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
311 %! fmt.read = @() true (); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
312 %! imformats ("add", fmt); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
313 %! assert (imread (fname), true); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
314 %! unwind_protect_cleanup |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
315 %! fclose (fid); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
316 %! unlink (fname); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
317 %! imformats (def_fmt); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
318 %! 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
|
319 |
18340
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
320 ## 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
|
321 %!testif HAVE_MAGICK |
19470
6ca096827123
Use tempname() rather than tmpnam() in core Octave.
Rik <rik@octave.org>
parents:
18340
diff
changeset
|
322 %! fname1 = [tempname() ".new_fmt1"]; |
18340
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
323 %! fid1 = fopen (fname1, "w"); |
19470
6ca096827123
Use tempname() rather than tmpnam() in core Octave.
Rik <rik@octave.org>
parents:
18340
diff
changeset
|
324 %! fname2 = [tempname() ".new_fmt2"]; |
18340
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
325 %! fid2 = fopen (fname2, "w"); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
326 %! def_fmt = imformats (); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
327 %! unwind_protect |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
328 %! 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:
18339
diff
changeset
|
329 %! fmt.ext = "new_fmt1"; |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
330 %! fmt.read = @() true(); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
331 %! fmt(2) = fmt(1); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
332 %! 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:
18339
diff
changeset
|
333 %! imformats ("add", fmt); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
334 %! assert (imread (fname1), true); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
335 %! assert (imread (fname2), true); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
336 %! unwind_protect_cleanup |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
337 %! fclose (fid1); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
338 %! fclose (fid2); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
339 %! unlink (fname1); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
340 %! unlink (fname2); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
341 %! imformats (def_fmt); |
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
342 %! 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
|
343 |
18340
15db54c4a572
Fix input parsing for imageIO functions and make imread accept URL (bug #41234)
Carnë Draug <carandraug@octave.org>
parents:
18339
diff
changeset
|
344 ## 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
|
345 %!testif HAVE_MAGICK |
1eb5e5f0ee13
imformats.m: add tests and fix bug when adding new formats.
Carnë Draug <carandraug@octave.org>
parents:
16922
diff
changeset
|
346 %! 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
|
347 %! 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
|
348 %! 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
|
349 %! 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
|
350 %! 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
|
351 %! imformats ("factory"); |
1eb5e5f0ee13
imformats.m: add tests and fix bug when adding new formats.
Carnë Draug <carandraug@octave.org>
parents:
16922
diff
changeset
|
352 %! 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
|
353 %! 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
|
354 |
18339
1589b2fc74ae
imformats.m: add test for updating a format with invalid struct.
Carnë Draug <carandraug@octave.org>
parents:
18317
diff
changeset
|
355 ## 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:
18317
diff
changeset
|
356 %!testif HAVE_MAGICK |
1589b2fc74ae
imformats.m: add test for updating a format with invalid struct.
Carnë Draug <carandraug@octave.org>
parents:
18317
diff
changeset
|
357 %! fmt = imformats ("jpg"); |
1589b2fc74ae
imformats.m: add test for updating a format with invalid struct.
Carnë Draug <carandraug@octave.org>
parents:
18317
diff
changeset
|
358 %! fmt = rmfield (fmt, "read"); |
1589b2fc74ae
imformats.m: add test for updating a format with invalid struct.
Carnë Draug <carandraug@octave.org>
parents:
18317
diff
changeset
|
359 %! error_thrown = false; |
1589b2fc74ae
imformats.m: add test for updating a format with invalid struct.
Carnë Draug <carandraug@octave.org>
parents:
18317
diff
changeset
|
360 %! try |
1589b2fc74ae
imformats.m: add test for updating a format with invalid struct.
Carnë Draug <carandraug@octave.org>
parents:
18317
diff
changeset
|
361 %! imformats ("update", "jpg", fmt); |
1589b2fc74ae
imformats.m: add test for updating a format with invalid struct.
Carnë Draug <carandraug@octave.org>
parents:
18317
diff
changeset
|
362 %! catch |
1589b2fc74ae
imformats.m: add test for updating a format with invalid struct.
Carnë Draug <carandraug@octave.org>
parents:
18317
diff
changeset
|
363 %! error_thrown = true; |
1589b2fc74ae
imformats.m: add test for updating a format with invalid struct.
Carnë Draug <carandraug@octave.org>
parents:
18317
diff
changeset
|
364 %! end_try_catch |
1589b2fc74ae
imformats.m: add test for updating a format with invalid struct.
Carnë Draug <carandraug@octave.org>
parents:
18317
diff
changeset
|
365 %! assert (error_thrown, true); |
16949
1eb5e5f0ee13
imformats.m: add tests and fix bug when adding new formats.
Carnë Draug <carandraug@octave.org>
parents:
16922
diff
changeset
|
366 |