annotate libinterp/dldfcn/__magick_read__.cc @ 16988:54b75bed4bc7

imwrite: implement WriteMode option. * imwrite.m: document the new option WriteMode and possibility to write multipage images by passing a 4 dimensional matrix. * private/core_imwrite.m: perform input check for the quality option and the new writemode. Set defaults here and not on __magick_write__(). Give warning about the fact that writing of indexed images is not properly implemented. Change calling to ind2rgb() since it has been there and we no longer need workaround. Remove the different calls to __magick_read__() since we now have a single way to do it. Remove conversion of image types since we want to save what was actually given to us. * __magick_read__.cc (read_file): split from __magick_read__() into a separate function so it can be used by __magick_write__() when appending images to an existing file. (jpg_settings): remove function. It only checks for the quality option, which is now done by core_imwrite(). Plus, other formats support this option so it was moved into __magick_write__(). We should have functions for each option rather than per file format. (encode_map): comment whole function since it is never used and is unfinished work to implement writing of actual indexed images. (write_file): new function from part of previous write_image(). It is now the other side of read_file(). (write_image): remove function. Moved into __magick_write__(), the only function calling it. The part of writing moved into write_file(). (__magick_write__): removed most of input check which should be done by imwrite(). Removed all extra usage types. Options must be passed on a non-optional struct. Implement the Append option.
author Carnë Draug <carandraug@octave.org>
date Tue, 16 Jul 2013 17:29:45 +0100
parents 997efb8d0b19
children 7a69ab84b8c9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7925
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
1 /*
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
2
16984
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
3 Copyright (C) 2013 Carnë Draug
14138
72c96de7a403 maint: update copyright notices for 2012
John W. Eaton <jwe@octave.org>
parents: 13029
diff changeset
4 Copyright (C) 2002-2012 Andy Adler
7932
d75586531aac style fixes
John W. Eaton <jwe@octave.org>
parents: 7931
diff changeset
5 Copyright (C) 2008 Thomas L. Scofield
10295
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
6 Copyright (C) 2010 David Grundberg
7925
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
7
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
8 This file is part of Octave.
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
9
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
10 Octave is free software; you can redistribute it and/or modify it
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
11 under the terms of the GNU General Public License as published by the
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
12 Free Software Foundation; either version 3 of the License, or (at your
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
13 option) any later version.
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
14
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
15 Octave is distributed in the hope that it will be useful, but WITHOUT
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
16 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
17 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
18 for more details.
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
19
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
20 You should have received a copy of the GNU General Public License
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
21 along with Octave; see the file COPYING. If not, see
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
22 <http://www.gnu.org/licenses/>.
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
23
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
24 */
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
25
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
26 #ifdef HAVE_CONFIG_H
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
27 #include <config.h>
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
28 #endif
7925
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
29
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
30 #include <cmath>
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
31
10333
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
32 #include "file-stat.h"
10390
ad0b54ae206a __magick_read__ (F__magick_read__): call Magick::InitializeMagick
John W. Eaton <jwe@octave.org>
parents: 10350
diff changeset
33 #include "oct-env.h"
10333
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
34 #include "oct-time.h"
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
35
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
36 #include "defun-dld.h"
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
37 #include "error.h"
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
38 #include "ov-struct.h"
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
39
16925
5c25f7ed080c *__magick_read__.cc: add missing include of gripes.h
Torsten <ttl@justmail.de>
parents: 16901
diff changeset
40 #include "gripes.h"
5c25f7ed080c *__magick_read__.cc: add missing include of gripes.h
Torsten <ttl@justmail.de>
parents: 16901
diff changeset
41
7937
6661387827d6 Allow build without GraphicsMagick installed
David Bateman <dbateman@free.fr>
parents: 7933
diff changeset
42 #ifdef HAVE_MAGICK
6661387827d6 Allow build without GraphicsMagick installed
David Bateman <dbateman@free.fr>
parents: 7933
diff changeset
43
9575
55ecaefb7d0f Use pkg-config to configure GraphicsMagick++.
David Grundberg <individ@acc.umu.se>
parents: 9439
diff changeset
44 #include <Magick++.h>
10739
d27bd2f74137 src/DLD_FUNCTIONS/__magick_read__.cc: restore locale after GraphicsMagick initialisation
Soren Hauberg <hauberg@gmail.com>
parents: 10390
diff changeset
45 #include <clocale>
7925
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
46
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
47 octave_value_list
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
48 read_indexed_images (std::vector<Magick::Image>& imvec,
8053
89a512e8ec43 Replace leading tabs with spaces.
scofield@scofield
parents: 7974
diff changeset
49 const Array<int>& frameidx, bool wantalpha)
7925
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
50 {
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
51 octave_value_list output;
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
52
16984
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
53 const int rows = imvec[0].baseRows ();
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
54 const int columns = imvec[0].baseColumns ();
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
55 const int nframes = frameidx.length ();
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
56
16984
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
57 const dim_vector idim = dim_vector (rows, columns, 1, nframes);
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
58
10350
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10333
diff changeset
59 Array<int> idx (dim_vector (4, 1));
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
60
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
61 Magick::ImageType type = imvec[0].type ();
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
62
7925
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
63 unsigned int mapsize = imvec[0].colorMapSize ();
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
64 unsigned int i = mapsize;
7925
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
65 unsigned int depth = 0;
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
66 while (i >>= 1)
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
67 depth++;
7925
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
68 i = 0;
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
69 depth--;
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
70 while (depth >>= 1)
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
71 i++;
7925
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
72 depth = 1 << i;
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
73
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
74 switch (depth)
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
75 {
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
76 case 1:
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
77 case 2:
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
78 case 4:
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
79 case 8:
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
80 {
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
81 uint8NDArray im = uint8NDArray (idim);
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
82
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
83 idx(2) = 0;
8053
89a512e8ec43 Replace leading tabs with spaces.
scofield@scofield
parents: 7974
diff changeset
84 for (int frame = 0; frame < nframes; frame++)
89a512e8ec43 Replace leading tabs with spaces.
scofield@scofield
parents: 7974
diff changeset
85 {
89a512e8ec43 Replace leading tabs with spaces.
scofield@scofield
parents: 7974
diff changeset
86 imvec[frameidx(frame)].getConstPixels (0, 0, columns, rows);
7933
54e414cc106b style fixes
John W. Eaton <jwe@octave.org>
parents: 7932
diff changeset
87
8053
89a512e8ec43 Replace leading tabs with spaces.
scofield@scofield
parents: 7974
diff changeset
88 const Magick::IndexPacket *pix
89a512e8ec43 Replace leading tabs with spaces.
scofield@scofield
parents: 7974
diff changeset
89 = imvec[frameidx(frame)].getConstIndexes ();
7933
54e414cc106b style fixes
John W. Eaton <jwe@octave.org>
parents: 7932
diff changeset
90
8053
89a512e8ec43 Replace leading tabs with spaces.
scofield@scofield
parents: 7974
diff changeset
91 i = 0;
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
92 idx(3) = frame;
7933
54e414cc106b style fixes
John W. Eaton <jwe@octave.org>
parents: 7932
diff changeset
93
8053
89a512e8ec43 Replace leading tabs with spaces.
scofield@scofield
parents: 7974
diff changeset
94 for (int y = 0; y < rows; y++)
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
95 {
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
96 idx(0) = y;
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
97 for (int x = 0; x < columns; x++)
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
98 {
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
99 idx(1) = x;
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
100 im(idx) = static_cast<octave_uint8> (pix[i++]);
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
101 }
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
102 }
8053
89a512e8ec43 Replace leading tabs with spaces.
scofield@scofield
parents: 7974
diff changeset
103 }
10100
dd4d4b14b340 __magick_read__.cc: no need to explicitly call chop_trailing_singletons now
John W. Eaton <jwe@octave.org>
parents: 9575
diff changeset
104
8053
89a512e8ec43 Replace leading tabs with spaces.
scofield@scofield
parents: 7974
diff changeset
105 output(0) = octave_value (im);
7925
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
106 }
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
107 break;
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
108
7925
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
109 case 16:
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
110 {
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
111 uint16NDArray im = uint16NDArray (idim);
7933
54e414cc106b style fixes
John W. Eaton <jwe@octave.org>
parents: 7932
diff changeset
112
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
113 idx(2) = 0;
8053
89a512e8ec43 Replace leading tabs with spaces.
scofield@scofield
parents: 7974
diff changeset
114 for (int frame = 0; frame < nframes; frame++)
89a512e8ec43 Replace leading tabs with spaces.
scofield@scofield
parents: 7974
diff changeset
115 {
89a512e8ec43 Replace leading tabs with spaces.
scofield@scofield
parents: 7974
diff changeset
116 imvec[frameidx(frame)].getConstPixels (0, 0, columns, rows);
7933
54e414cc106b style fixes
John W. Eaton <jwe@octave.org>
parents: 7932
diff changeset
117
8053
89a512e8ec43 Replace leading tabs with spaces.
scofield@scofield
parents: 7974
diff changeset
118 const Magick::IndexPacket *pix
89a512e8ec43 Replace leading tabs with spaces.
scofield@scofield
parents: 7974
diff changeset
119 = imvec[frameidx(frame)].getConstIndexes ();
7933
54e414cc106b style fixes
John W. Eaton <jwe@octave.org>
parents: 7932
diff changeset
120
8053
89a512e8ec43 Replace leading tabs with spaces.
scofield@scofield
parents: 7974
diff changeset
121 i = 0;
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
122 idx(3) = frame;
7933
54e414cc106b style fixes
John W. Eaton <jwe@octave.org>
parents: 7932
diff changeset
123
8053
89a512e8ec43 Replace leading tabs with spaces.
scofield@scofield
parents: 7974
diff changeset
124 for (int y = 0; y < rows; y++)
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
125 {
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
126 idx(0) = y;
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
127 for (int x = 0; x < columns; x++)
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
128 {
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
129 idx(1) = x;
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
130 im(idx) = static_cast<octave_uint16> (pix[i++]);
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
131 }
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
132 }
8053
89a512e8ec43 Replace leading tabs with spaces.
scofield@scofield
parents: 7974
diff changeset
133 }
10100
dd4d4b14b340 __magick_read__.cc: no need to explicitly call chop_trailing_singletons now
John W. Eaton <jwe@octave.org>
parents: 9575
diff changeset
134
7925
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
135 output(0) = octave_value (im);
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
136 }
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
137 break;
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
138
7925
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
139 default:
11553
01f703952eff Improve docstrings for functions in DLD-FUNCTIONS directory.
Rik <octave@nomad.inbox5.com>
parents: 11523
diff changeset
140 error ("__magic_read__: index depths greater than 16-bit are not supported");
7925
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
141 return octave_value_list ();
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
142 }
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
143
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
144 Matrix map = Matrix (mapsize, 3);
7925
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
145 Matrix alpha;
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
146
7925
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
147 switch (type)
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
148 {
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
149 case Magick::PaletteMatteType:
16983
4660d047955e Make use of gripe_disabled_feature() for image IO functions.
Carnë Draug <carandraug+dev@gmail.com>
parents: 16944
diff changeset
150 // warning ("palettematte");
4660d047955e Make use of gripe_disabled_feature() for image IO functions.
Carnë Draug <carandraug+dev@gmail.com>
parents: 16944
diff changeset
151 // Matrix map (mapsize, 3);
4660d047955e Make use of gripe_disabled_feature() for image IO functions.
Carnë Draug <carandraug+dev@gmail.com>
parents: 16944
diff changeset
152 // Matrix alpha (mapsize, 1);
4660d047955e Make use of gripe_disabled_feature() for image IO functions.
Carnë Draug <carandraug+dev@gmail.com>
parents: 16944
diff changeset
153 // for (i = 0; i < mapsize; i++)
4660d047955e Make use of gripe_disabled_feature() for image IO functions.
Carnë Draug <carandraug+dev@gmail.com>
parents: 16944
diff changeset
154 // {
4660d047955e Make use of gripe_disabled_feature() for image IO functions.
Carnë Draug <carandraug+dev@gmail.com>
parents: 16944
diff changeset
155 // warning ("%d", i);
4660d047955e Make use of gripe_disabled_feature() for image IO functions.
Carnë Draug <carandraug+dev@gmail.com>
parents: 16944
diff changeset
156 // Magick::ColorRGB c = imvec[0].colorMap (i);
4660d047955e Make use of gripe_disabled_feature() for image IO functions.
Carnë Draug <carandraug+dev@gmail.com>
parents: 16944
diff changeset
157 // map(i,0) = c.red ();
4660d047955e Make use of gripe_disabled_feature() for image IO functions.
Carnë Draug <carandraug+dev@gmail.com>
parents: 16944
diff changeset
158 // map(i,1) = c.green ();
4660d047955e Make use of gripe_disabled_feature() for image IO functions.
Carnë Draug <carandraug+dev@gmail.com>
parents: 16944
diff changeset
159 // map(i,2) = c.blue ();
4660d047955e Make use of gripe_disabled_feature() for image IO functions.
Carnë Draug <carandraug+dev@gmail.com>
parents: 16944
diff changeset
160 // alpha(i,1) = c.alpha ();
4660d047955e Make use of gripe_disabled_feature() for image IO functions.
Carnë Draug <carandraug+dev@gmail.com>
parents: 16944
diff changeset
161 // }
4660d047955e Make use of gripe_disabled_feature() for image IO functions.
Carnë Draug <carandraug+dev@gmail.com>
parents: 16944
diff changeset
162 // break;
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
163
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
164 case Magick::PaletteType:
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
165 alpha = Matrix (0, 0);
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
166 for (i = 0; i < mapsize; i++)
7925
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
167 {
8053
89a512e8ec43 Replace leading tabs with spaces.
scofield@scofield
parents: 7974
diff changeset
168 Magick::ColorRGB c = imvec[0].colorMap (i);
89a512e8ec43 Replace leading tabs with spaces.
scofield@scofield
parents: 7974
diff changeset
169 map(i,0) = c.red ();
89a512e8ec43 Replace leading tabs with spaces.
scofield@scofield
parents: 7974
diff changeset
170 map(i,1) = c.green ();
89a512e8ec43 Replace leading tabs with spaces.
scofield@scofield
parents: 7974
diff changeset
171 map(i,2) = c.blue ();
7925
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
172 }
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
173 break;
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
174
7925
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
175 default:
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
176 error ("__magick_read__: unsupported indexed image type");
7925
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
177 return octave_value_list ();
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
178 }
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
179
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
180 if (wantalpha)
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
181 output(2) = alpha;
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
182
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
183 output(1) = map;
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
184
7925
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
185 return output;
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
186 }
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
187
10193
1a4074e277fe undo unintended change to __magick_read__.cc
John W. Eaton <jwe@octave.org>
parents: 10191
diff changeset
188 template <class T>
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
189 octave_value_list
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
190 read_images (const std::vector<Magick::Image>& imvec,
8053
89a512e8ec43 Replace leading tabs with spaces.
scofield@scofield
parents: 7974
diff changeset
191 const Array<int>& frameidx, unsigned int depth)
7925
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
192 {
10295
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
193 typedef typename T::element_type P;
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
194
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
195 octave_value_list retval (3, Matrix ());
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
196
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
197 T im;
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
198
16984
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
199 const int rows = imvec[0].baseRows ();
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
200 const int columns = imvec[0].baseColumns ();
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
201 const int nframes = frameidx.length ();
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
202
16984
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
203 dim_vector idim = dim_vector (rows, columns, 1, nframes);
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
204
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
205 Magick::ImageType type = imvec[0].type ();
14173
47a5e29ecc0b Allow QuantumDepth=32 installations of Magick++ (Bug #35229)
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
206 const int divisor = ((uint64_t (1) << QuantumDepth) - 1) /
47a5e29ecc0b Allow QuantumDepth=32 installations of Magick++ (Bug #35229)
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
207 ((uint64_t (1) << depth) - 1);
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
208
7925
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
209 switch (type)
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
210 {
16984
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
211 case Magick::BilevelType: // Monochrome bi-level image
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
212 case Magick::GrayscaleType: // Grayscale image
10295
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
213 {
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
214 im = T (idim);
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
215 P *vec = im.fortran_vec ();
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
216
10295
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
217 for (int frame = 0; frame < nframes; frame++)
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
218 {
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
219 const Magick::PixelPacket *pix
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
220 = imvec[frameidx(frame)].getConstPixels (0, 0, columns, rows);
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
221
10298
2be9b7e71f32 __magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 10295
diff changeset
222 P *rbuf = vec;
10295
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
223 for (int y = 0; y < rows; y++)
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
224 {
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
225 for (int x = 0; x < columns; x++)
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
226 {
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
227 *rbuf = pix->red / divisor;
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
228 pix++;
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
229 rbuf += rows;
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
230 }
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
231 rbuf -= rows * columns - 1;
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
232 }
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
233
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
234 // Next frame.
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
235 vec += rows * columns * idim(2);
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
236 }
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
237 }
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
238 break;
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
239
16984
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
240 case Magick::GrayscaleMatteType: // Grayscale image with opacity
10295
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
241 {
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
242 idim(2) = 2;
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
243 im = T (idim);
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
244 P *vec = im.fortran_vec ();
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
245
10295
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
246 for (int frame = 0; frame < nframes; frame++)
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
247 {
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
248 const Magick::PixelPacket *pix
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
249 = imvec[frameidx(frame)].getConstPixels (0, 0, columns, rows);
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
250
10298
2be9b7e71f32 __magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 10295
diff changeset
251 P *rbuf = vec;
2be9b7e71f32 __magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 10295
diff changeset
252 P *obuf = vec + rows * columns;
10295
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
253 for (int y = 0; y < rows; y++)
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
254 {
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
255 for (int x = 0; x < columns; x++)
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
256 {
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
257 *rbuf = pix->red / divisor;
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
258 *obuf = pix->opacity / divisor;
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
259 pix++;
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
260 rbuf += rows;
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
261 obuf += rows;
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
262 }
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
263 rbuf -= rows * columns - 1;
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
264 obuf -= rows * columns - 1;
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
265 }
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
266
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
267 // Next frame.
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
268 vec += rows * columns * idim(2);
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
269 }
7925
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
270 }
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
271 break;
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
272
16984
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
273 case Magick::PaletteType: // Indexed color (palette) image
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
274 case Magick::TrueColorType: // Truecolor image
10295
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
275 {
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
276 idim(2) = 3;
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
277 im = T (idim);
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
278 P *vec = im.fortran_vec ();
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
279
10295
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
280 for (int frame = 0; frame < nframes; frame++)
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
281 {
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
282 const Magick::PixelPacket *pix
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
283 = imvec[frameidx(frame)].getConstPixels (0, 0, columns, rows);
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
284
10298
2be9b7e71f32 __magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 10295
diff changeset
285 P *rbuf = vec;
2be9b7e71f32 __magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 10295
diff changeset
286 P *gbuf = vec + rows * columns;
2be9b7e71f32 __magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 10295
diff changeset
287 P *bbuf = vec + rows * columns * 2;
10295
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
288 for (int y = 0; y < rows; y++)
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
289 {
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
290 for (int x = 0; x < columns; x++)
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
291 {
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
292 *rbuf = pix->red / divisor;
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
293 *gbuf = pix->green / divisor;
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
294 *bbuf = pix->blue / divisor;
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
295 pix++;
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
296 rbuf += rows;
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
297 gbuf += rows;
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
298 bbuf += rows;
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
299 }
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
300 rbuf -= rows * columns - 1;
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
301 gbuf -= rows * columns - 1;
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
302 bbuf -= rows * columns - 1;
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
303 }
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
304
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
305 // Next frame.
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
306 vec += rows * columns * idim(2);
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
307 }
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
308 }
7925
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
309 break;
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
310
16984
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
311 case Magick::PaletteMatteType: // Indexed color (palette) image with opacity
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
312 case Magick::TrueColorMatteType: // Truecolor image with opacity
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
313 case Magick::ColorSeparationType: // Cyan/Yellow/Magenta/Black (CYMK) image
10295
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
314 {
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
315 idim(2) = 4;
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
316 im = T (idim);
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
317 P *vec = im.fortran_vec ();
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
318
10295
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
319 for (int frame = 0; frame < nframes; frame++)
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
320 {
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
321 const Magick::PixelPacket *pix
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
322 = imvec[frameidx(frame)].getConstPixels (0, 0, columns, rows);
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
323
10298
2be9b7e71f32 __magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 10295
diff changeset
324 P *rbuf = vec;
2be9b7e71f32 __magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 10295
diff changeset
325 P *gbuf = vec + rows * columns;
2be9b7e71f32 __magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 10295
diff changeset
326 P *bbuf = vec + rows * columns * 2;
2be9b7e71f32 __magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 10295
diff changeset
327 P *obuf = vec + rows * columns * 3;
10295
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
328 for (int y = 0; y < rows; y++)
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
329 {
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
330 for (int x = 0; x < columns; x++)
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
331 {
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
332 *rbuf = pix->red / divisor;
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
333 *gbuf = pix->green / divisor;
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
334 *bbuf = pix->blue / divisor;
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
335 *obuf = pix->opacity / divisor;
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
336 pix++;
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
337 rbuf += rows;
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
338 gbuf += rows;
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
339 bbuf += rows;
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
340 obuf += rows;
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
341 }
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
342 rbuf -= rows * columns - 1;
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
343 gbuf -= rows * columns - 1;
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
344 bbuf -= rows * columns - 1;
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
345 obuf -= rows * columns - 1;
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
346 }
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
347
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
348 // Next frame.
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
349 vec += rows * columns * idim(2);
13d382fc758b imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents: 10193
diff changeset
350 }
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
351 }
7925
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
352 break;
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
353
7925
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
354 default:
16984
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
355 error ("__magick_read__: undefined Magick++ image type");
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
356 return retval;
7925
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
357 }
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
358
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
359 retval(0) = im;
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
360
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
361 return retval;
7925
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
362 }
7974
fcaddd090f98 imwrite: new function
John W. Eaton <jwe@octave.org>
parents: 7937
diff changeset
363
16988
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
364 void static
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
365 read_file (const std::string filename, std::vector<Magick::Image>& imvec)
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
366 {
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
367 try
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
368 {
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
369 // Read a file into vector of image objects
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
370 Magick::readImages (&imvec, filename);
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
371 }
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
372 catch (Magick::Warning& w)
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
373 {
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
374 warning ("Magick++ warning: %s", w.what ());
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
375 }
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
376 catch (Magick::ErrorCoder& e)
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
377 {
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
378 // FIXME: there's a WarningCoder and ErrorCoder. Shouldn't this
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
379 // exception cause an error?
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
380 warning ("Magick++ coder error: %s", e.what ());
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
381 }
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
382 catch (Magick::Exception& e)
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
383 {
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
384 error ("Magick++ exception: %s", e.what ());
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
385 error_state = 1;
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
386 }
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
387 }
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
388
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
389
10947
dc74ce93cfc4 initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents: 10840
diff changeset
390 static void
dc74ce93cfc4 initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents: 10840
diff changeset
391 maybe_initialize_magick (void)
7925
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
392 {
10390
ad0b54ae206a __magick_read__ (F__magick_read__): call Magick::InitializeMagick
John W. Eaton <jwe@octave.org>
parents: 10350
diff changeset
393 static bool initialized = false;
ad0b54ae206a __magick_read__ (F__magick_read__): call Magick::InitializeMagick
John W. Eaton <jwe@octave.org>
parents: 10350
diff changeset
394
ad0b54ae206a __magick_read__ (F__magick_read__): call Magick::InitializeMagick
John W. Eaton <jwe@octave.org>
parents: 10350
diff changeset
395 if (! initialized)
ad0b54ae206a __magick_read__ (F__magick_read__): call Magick::InitializeMagick
John W. Eaton <jwe@octave.org>
parents: 10350
diff changeset
396 {
16988
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
397 // Save locale as GraphicsMagick might change this (fixed in
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
398 // GraphicsMagick since version 1.3.13 released on December 24, 2011)
10739
d27bd2f74137 src/DLD_FUNCTIONS/__magick_read__.cc: restore locale after GraphicsMagick initialisation
Soren Hauberg <hauberg@gmail.com>
parents: 10390
diff changeset
399 const char *static_locale = setlocale (LC_ALL, NULL);
d27bd2f74137 src/DLD_FUNCTIONS/__magick_read__.cc: restore locale after GraphicsMagick initialisation
Soren Hauberg <hauberg@gmail.com>
parents: 10390
diff changeset
400 const std::string locale (static_locale);
d27bd2f74137 src/DLD_FUNCTIONS/__magick_read__.cc: restore locale after GraphicsMagick initialisation
Soren Hauberg <hauberg@gmail.com>
parents: 10390
diff changeset
401
16988
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
402 const std::string program_name = octave_env::get_program_invocation_name ();
10390
ad0b54ae206a __magick_read__ (F__magick_read__): call Magick::InitializeMagick
John W. Eaton <jwe@octave.org>
parents: 10350
diff changeset
403
ad0b54ae206a __magick_read__ (F__magick_read__): call Magick::InitializeMagick
John W. Eaton <jwe@octave.org>
parents: 10350
diff changeset
404 Magick::InitializeMagick (program_name.c_str ());
ad0b54ae206a __magick_read__ (F__magick_read__): call Magick::InitializeMagick
John W. Eaton <jwe@octave.org>
parents: 10350
diff changeset
405
10739
d27bd2f74137 src/DLD_FUNCTIONS/__magick_read__.cc: restore locale after GraphicsMagick initialisation
Soren Hauberg <hauberg@gmail.com>
parents: 10390
diff changeset
406 // Restore locale from before GraphicsMagick initialisation
d27bd2f74137 src/DLD_FUNCTIONS/__magick_read__.cc: restore locale after GraphicsMagick initialisation
Soren Hauberg <hauberg@gmail.com>
parents: 10390
diff changeset
407 setlocale (LC_ALL, locale.c_str ());
d27bd2f74137 src/DLD_FUNCTIONS/__magick_read__.cc: restore locale after GraphicsMagick initialisation
Soren Hauberg <hauberg@gmail.com>
parents: 10390
diff changeset
408
11036
169f59f626d3 Add check for QuantumDepth at initialization of *Magick and an associated warning
John Swensen <jpswensen@gmail.com>
parents: 11035
diff changeset
409 if (QuantumDepth < 32)
169f59f626d3 Add check for QuantumDepth at initialization of *Magick and an associated warning
John Swensen <jpswensen@gmail.com>
parents: 11035
diff changeset
410 warning ("your version of %s limits images to %d bits per pixel",
169f59f626d3 Add check for QuantumDepth at initialization of *Magick and an associated warning
John Swensen <jpswensen@gmail.com>
parents: 11035
diff changeset
411 MagickPackageName, QuantumDepth);
169f59f626d3 Add check for QuantumDepth at initialization of *Magick and an associated warning
John Swensen <jpswensen@gmail.com>
parents: 11035
diff changeset
412
10390
ad0b54ae206a __magick_read__ (F__magick_read__): call Magick::InitializeMagick
John W. Eaton <jwe@octave.org>
parents: 10350
diff changeset
413 initialized = true;
ad0b54ae206a __magick_read__ (F__magick_read__): call Magick::InitializeMagick
John W. Eaton <jwe@octave.org>
parents: 10350
diff changeset
414 }
16983
4660d047955e Make use of gripe_disabled_feature() for image IO functions.
Carnë Draug <carandraug+dev@gmail.com>
parents: 16944
diff changeset
415 }
10947
dc74ce93cfc4 initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents: 10840
diff changeset
416 #endif
dc74ce93cfc4 initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents: 10840
diff changeset
417
dc74ce93cfc4 initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents: 10840
diff changeset
418 DEFUN_DLD (__magick_read__, args, nargout,
dc74ce93cfc4 initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents: 10840
diff changeset
419 "-*- texinfo -*-\n\
16984
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
420 @deftypefn {Loadable Function} {[@var{img}, @var{map}, @var{alpha}] =} __magick_read__ (@var{fname}, @var{options})\n\
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
421 Read image with GraphicsMagick or ImageMagick.\n\
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
422 \n\
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
423 This is a private internal function not intended for direct use. Instead\n\
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
424 use @code{imread}.\n\
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
425 \n\
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
426 @seealso{imfinfo, imformats, imread, imwrite}\n\
10947
dc74ce93cfc4 initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents: 10840
diff changeset
427 @end deftypefn")
dc74ce93cfc4 initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents: 10840
diff changeset
428 {
dc74ce93cfc4 initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents: 10840
diff changeset
429 octave_value_list output;
dc74ce93cfc4 initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents: 10840
diff changeset
430
16983
4660d047955e Make use of gripe_disabled_feature() for image IO functions.
Carnë Draug <carandraug+dev@gmail.com>
parents: 16944
diff changeset
431 #ifndef HAVE_MAGICK
4660d047955e Make use of gripe_disabled_feature() for image IO functions.
Carnë Draug <carandraug+dev@gmail.com>
parents: 16944
diff changeset
432 gripe_disabled_feature ("imread", "Image IO");
4660d047955e Make use of gripe_disabled_feature() for image IO functions.
Carnë Draug <carandraug+dev@gmail.com>
parents: 16944
diff changeset
433 #else
10947
dc74ce93cfc4 initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents: 10840
diff changeset
434
dc74ce93cfc4 initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents: 10840
diff changeset
435 maybe_initialize_magick ();
10390
ad0b54ae206a __magick_read__ (F__magick_read__): call Magick::InitializeMagick
John W. Eaton <jwe@octave.org>
parents: 10350
diff changeset
436
16984
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
437 if (args.length () != 2 || ! args(0).is_string ())
7925
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
438 {
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
439 print_usage ();
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
440 return output;
7925
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
441 }
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
442
16988
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
443 const octave_map options = args(1).map_value ();
16984
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
444 if (error_state)
10778
6035bf68a755 Support imread('file', 'frames', 'all') (Feature Request #30365)
David Bateman <dbateman@free.fr>
parents: 10739
diff changeset
445 {
16984
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
446 error ("__magick_read__: OPTIONS must be a struct");
7925
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
447 }
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
448
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
449 std::vector<Magick::Image> imvec;
16988
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
450 read_file (args(0).string_value (), imvec);
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
451 if (error_state)
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
452 {
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
453 return output;
7925
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
454 }
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
455
16984
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
456 const int nframes = imvec.size ();
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
457 Array<int> frameidx;
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
458
16988
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
459 const octave_value indexes = options.getfield ("index")(0);
16984
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
460 if (indexes.is_string () && indexes.string_value () == "all")
7925
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
461 {
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11553
diff changeset
462 frameidx = Array<int> (dim_vector (1, nframes));
16984
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
463 for (int i = 0; i < nframes; i++)
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
464 {
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
465 frameidx(i) = i;
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
466 }
10778
6035bf68a755 Support imread('file', 'frames', 'all') (Feature Request #30365)
David Bateman <dbateman@free.fr>
parents: 10739
diff changeset
467 }
6035bf68a755 Support imread('file', 'frames', 'all') (Feature Request #30365)
David Bateman <dbateman@free.fr>
parents: 10739
diff changeset
468 else
6035bf68a755 Support imread('file', 'frames', 'all') (Feature Request #30365)
David Bateman <dbateman@free.fr>
parents: 10739
diff changeset
469 {
16984
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
470 frameidx = indexes.int_vector_value ();
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
471 if (error_state)
10778
6035bf68a755 Support imread('file', 'frames', 'all') (Feature Request #30365)
David Bateman <dbateman@free.fr>
parents: 10739
diff changeset
472 {
16984
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
473 error ("__magick_read__: invalid value for Index/Frame");
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
474 }
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
475 // Fix indexex from base 1 to base 0, and at the same time, make
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
476 // sure none of the indexes is outside the range of image number.
16988
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
477 const int n = frameidx.nelem ();
16984
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
478 for (int i = 0; i < n; i++)
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
479 {
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
480 frameidx(i)--;
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
481 if (frameidx(i) < 0 || frameidx(i) > nframes - 1)
10778
6035bf68a755 Support imread('file', 'frames', 'all') (Feature Request #30365)
David Bateman <dbateman@free.fr>
parents: 10739
diff changeset
482 {
16984
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
483 error ("imread: index/frames specified are outside the number of images");
10778
6035bf68a755 Support imread('file', 'frames', 'all') (Feature Request #30365)
David Bateman <dbateman@free.fr>
parents: 10739
diff changeset
484 return output;
6035bf68a755 Support imread('file', 'frames', 'all') (Feature Request #30365)
David Bateman <dbateman@free.fr>
parents: 10739
diff changeset
485 }
8053
89a512e8ec43 Replace leading tabs with spaces.
scofield@scofield
parents: 7974
diff changeset
486 }
7925
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
487 }
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
488
16988
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
489 const Magick::ClassType klass = imvec[0].classType ();
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
490
16984
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
491 // PseudoClass:
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
492 // Image is composed of pixels which specify an index in a color palette.
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
493 if (klass == Magick::PseudoClass && nargout > 1)
16984
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
494 {
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
495 output = read_indexed_images (imvec, frameidx, (nargout == 3));
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
496 }
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
497 // If not PseudoClass then it must be DirectClass: Image is composed of
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
498 // pixels which represent literal color values.
7925
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
499 else
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
500 {
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
501 unsigned int depth = imvec[0].modulusDepth ();
9439
0a696f8aa434 determine correct image bitwidth in __magick_read__.cc
Benjamin Lindner <lindnerb@users.sourceforge.net>
parents: 9436
diff changeset
502 if (depth > 1)
10154
40dfc0c99116 DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents: 10100
diff changeset
503 {
40dfc0c99116 DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents: 10100
diff changeset
504 --depth;
40dfc0c99116 DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents: 10100
diff changeset
505 int i = 1;
40dfc0c99116 DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents: 10100
diff changeset
506 while (depth >>= 1)
9439
0a696f8aa434 determine correct image bitwidth in __magick_read__.cc
Benjamin Lindner <lindnerb@users.sourceforge.net>
parents: 9436
diff changeset
507 i++;
10154
40dfc0c99116 DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents: 10100
diff changeset
508 depth = 1 << i;
40dfc0c99116 DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents: 10100
diff changeset
509 }
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11585
diff changeset
510
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
511 switch (depth)
8053
89a512e8ec43 Replace leading tabs with spaces.
scofield@scofield
parents: 7974
diff changeset
512 {
89a512e8ec43 Replace leading tabs with spaces.
scofield@scofield
parents: 7974
diff changeset
513 case 1:
10193
1a4074e277fe undo unintended change to __magick_read__.cc
John W. Eaton <jwe@octave.org>
parents: 10191
diff changeset
514 output = read_images<boolNDArray> (imvec, frameidx, depth);
8053
89a512e8ec43 Replace leading tabs with spaces.
scofield@scofield
parents: 7974
diff changeset
515 break;
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
516
8053
89a512e8ec43 Replace leading tabs with spaces.
scofield@scofield
parents: 7974
diff changeset
517 case 2:
89a512e8ec43 Replace leading tabs with spaces.
scofield@scofield
parents: 7974
diff changeset
518 case 4:
89a512e8ec43 Replace leading tabs with spaces.
scofield@scofield
parents: 7974
diff changeset
519 case 8:
10193
1a4074e277fe undo unintended change to __magick_read__.cc
John W. Eaton <jwe@octave.org>
parents: 10191
diff changeset
520 output = read_images<uint8NDArray> (imvec, frameidx, depth) ;
8053
89a512e8ec43 Replace leading tabs with spaces.
scofield@scofield
parents: 7974
diff changeset
521 break;
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
522
8053
89a512e8ec43 Replace leading tabs with spaces.
scofield@scofield
parents: 7974
diff changeset
523 case 16:
10193
1a4074e277fe undo unintended change to __magick_read__.cc
John W. Eaton <jwe@octave.org>
parents: 10191
diff changeset
524 output = read_images<uint16NDArray> (imvec, frameidx, depth);
8053
89a512e8ec43 Replace leading tabs with spaces.
scofield@scofield
parents: 7974
diff changeset
525 break;
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
526
8053
89a512e8ec43 Replace leading tabs with spaces.
scofield@scofield
parents: 7974
diff changeset
527 case 32:
89a512e8ec43 Replace leading tabs with spaces.
scofield@scofield
parents: 7974
diff changeset
528 case 64:
7925
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
529 default:
11553
01f703952eff Improve docstrings for functions in DLD-FUNCTIONS directory.
Rik <octave@nomad.inbox5.com>
parents: 11523
diff changeset
530 error ("__magick_read__: image depths greater than 16-bit are not supported");
8053
89a512e8ec43 Replace leading tabs with spaces.
scofield@scofield
parents: 7974
diff changeset
531 }
7925
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
532 }
7937
6661387827d6 Allow build without GraphicsMagick installed
David Bateman <dbateman@free.fr>
parents: 7933
diff changeset
533
6661387827d6 Allow build without GraphicsMagick installed
David Bateman <dbateman@free.fr>
parents: 7933
diff changeset
534 #endif
7925
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
535 return output;
9316b59903c9 Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff changeset
536 }
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7925
diff changeset
537
12805
3641167e5b75 codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents: 11590
diff changeset
538 /*
3641167e5b75 codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents: 11590
diff changeset
539 ## No test needed for internal helper function.
3641167e5b75 codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents: 11590
diff changeset
540 %!assert (1)
3641167e5b75 codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents: 11590
diff changeset
541 */
3641167e5b75 codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents: 11590
diff changeset
542
7974
fcaddd090f98 imwrite: new function
John W. Eaton <jwe@octave.org>
parents: 7937
diff changeset
543 #ifdef HAVE_MAGICK
fcaddd090f98 imwrite: new function
John W. Eaton <jwe@octave.org>
parents: 7937
diff changeset
544
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
545 static void
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
546 encode_bool_image (std::vector<Magick::Image>& imvec, const octave_value& img)
7974
fcaddd090f98 imwrite: new function
John W. Eaton <jwe@octave.org>
parents: 7937
diff changeset
547 {
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
548 unsigned int nframes = 1;
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
549 boolNDArray m = img.bool_array_value ();
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
550
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
551 dim_vector dsizes = m.dims ();
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
552 if (dsizes.length () == 4)
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
553 nframes = dsizes(3);
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
554
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11553
diff changeset
555 Array<octave_idx_type> idx (dim_vector (dsizes.length (), 1));
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
556
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
557 octave_idx_type rows = m.rows ();
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
558 octave_idx_type columns = m.columns ();
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
559
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
560 for (unsigned int ii = 0; ii < nframes; ii++)
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
561 {
14854
5ae9f0f77635 maint: Use Octave coding conventions for coddling parenthis is DLD-FUNCTIONS directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
562 Magick::Image im (Magick::Geometry (columns, rows), "black");
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
563 im.classType (Magick::DirectClass);
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
564 im.depth (1);
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
565
10979
7f49dc864f32 __magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 10978
diff changeset
566 for (int y = 0; y < columns; y++)
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
567 {
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
568 idx(1) = y;
10979
7f49dc864f32 __magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 10978
diff changeset
569
7f49dc864f32 __magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 10978
diff changeset
570 for (int x = 0; x < rows; x++)
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
571 {
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
572 if (nframes > 1)
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
573 {
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
574 idx(2) = 0;
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
575 idx(3) = ii;
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
576 }
10979
7f49dc864f32 __magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 10978
diff changeset
577
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
578 idx(0) = x;
10979
7f49dc864f32 __magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 10978
diff changeset
579
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
580 if (m(idx))
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
581 im.pixelColor (y, x, "white");
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
582 }
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
583 }
10979
7f49dc864f32 __magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 10978
diff changeset
584
11034
6589aaf769f6 Correctly handle logical and integer bit depths
John Swensen <jpswensen@gmail.com>
parents: 10988
diff changeset
585 im.quantizeColorSpace (Magick::GRAYColorspace);
6589aaf769f6 Correctly handle logical and integer bit depths
John Swensen <jpswensen@gmail.com>
parents: 10988
diff changeset
586 im.quantizeColors (2);
6589aaf769f6 Correctly handle logical and integer bit depths
John Swensen <jpswensen@gmail.com>
parents: 10988
diff changeset
587 im.quantize ();
6589aaf769f6 Correctly handle logical and integer bit depths
John Swensen <jpswensen@gmail.com>
parents: 10988
diff changeset
588
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
589 imvec.push_back (im);
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
590 }
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
591 }
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
592
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
593 template <class T>
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
594 static void
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
595 encode_uint_image (std::vector<Magick::Image>& imvec,
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
596 const octave_value& img,
16988
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
597 const bool has_map)
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
598 {
8520
715f6cd8d5e7 __magick_read__.cc (encode_uint_image): initialize bitdepth
Soren Hauberg <hauberg@gmail.com>
parents: 8165
diff changeset
599 unsigned int bitdepth = 0;
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
600 T m;
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
601
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
602 if (img.is_uint8_type ())
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
603 {
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
604 bitdepth = 8;
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
605 m = img.uint8_array_value ();
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
606 }
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
607 else if (img.is_uint16_type ())
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
608 {
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
609 bitdepth = 16;
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
610 m = img.uint16_array_value ();
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
611 }
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
612 else
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
613 error ("__magick_write__: invalid image class");
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
614
16988
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
615 const dim_vector dsizes = m.dims ();
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
616 unsigned int nframes = 1;
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
617 if (dsizes.length () == 4)
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
618 nframes = dsizes(3);
10979
7f49dc864f32 __magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 10978
diff changeset
619
16988
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
620 const bool is_color = ((dsizes.length () > 2) && (dsizes(2) > 2));
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
621 const bool has_alpha = (dsizes.length () > 2 && (dsizes(2) == 2 || dsizes(2) == 4));
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
622
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11553
diff changeset
623 Array<octave_idx_type> idx (dim_vector (dsizes.length (), 1));
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
624 octave_idx_type rows = m.rows ();
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
625 octave_idx_type columns = m.columns ();
8090
3cc1ca1b1576 MSVC compilation fix
Michael Goffioul
parents: 8054
diff changeset
626
13020
58d704d3283c Fix ambigous call to int pow (int, unsigned int&)
Carlo de Falco <kingcrimson@tiscali.it>
parents: 11590
diff changeset
627 unsigned int div_factor = (1 << bitdepth) - 1;
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
628
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
629 for (unsigned int ii = 0; ii < nframes; ii++)
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
630 {
10979
7f49dc864f32 __magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 10978
diff changeset
631 Magick::Image im (Magick::Geometry (columns, rows), "black");
7f49dc864f32 __magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 10978
diff changeset
632
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
633 im.depth (bitdepth);
10979
7f49dc864f32 __magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 10978
diff changeset
634
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
635 if (has_map)
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
636 im.classType (Magick::PseudoClass);
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
637 else
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
638 im.classType (Magick::DirectClass);
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
639
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
640 if (is_color)
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
641 {
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
642 if (has_alpha)
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
643 im.type (Magick::TrueColorMatteType);
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
644 else
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
645 im.type (Magick::TrueColorType);
7974
fcaddd090f98 imwrite: new function
John W. Eaton <jwe@octave.org>
parents: 7937
diff changeset
646
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
647 Magick::ColorRGB c;
10979
7f49dc864f32 __magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 10978
diff changeset
648
7f49dc864f32 __magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 10978
diff changeset
649 for (int y = 0; y < columns; y++)
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
650 {
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
651 idx(1) = y;
10979
7f49dc864f32 __magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 10978
diff changeset
652
7f49dc864f32 __magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 10978
diff changeset
653 for (int x = 0; x < rows; x++)
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
654 {
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
655 idx(0) = x;
10979
7f49dc864f32 __magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 10978
diff changeset
656
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
657 if (nframes > 1)
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
658 idx(3) = ii;
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
659
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
660 idx(2) = 0;
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
661 c.red (static_cast<double>(m(idx)) / div_factor);
10979
7f49dc864f32 __magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 10978
diff changeset
662
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
663 idx(2) = 1;
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
664 c.green (static_cast<double>(m(idx)) / div_factor);
10979
7f49dc864f32 __magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 10978
diff changeset
665
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
666 idx(2) = 2;
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
667 c.blue (static_cast<double>(m(idx)) / div_factor);
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
668
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
669 if (has_alpha)
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
670 {
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
671 idx(2) = 3;
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
672 c.alpha (static_cast<double>(m(idx)) / div_factor);
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
673 }
10979
7f49dc864f32 __magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 10978
diff changeset
674
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
675 im.pixelColor (y, x, c);
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
676 }
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
677 }
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
678 }
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
679 else
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
680 {
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
681 if (has_alpha)
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
682 im.type (Magick::GrayscaleMatteType);
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
683 else
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
684 im.type (Magick::GrayscaleType);
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
685
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
686 Magick::ColorGray c;
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
687
10979
7f49dc864f32 __magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 10978
diff changeset
688 for (int y = 0; y < columns; y++)
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
689 {
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
690 idx(1) = y;
10979
7f49dc864f32 __magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 10978
diff changeset
691
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
692 for (int x=0; x < rows; x++)
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
693 {
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
694 idx(0) = x;
10979
7f49dc864f32 __magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 10978
diff changeset
695
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
696 if (nframes > 1)
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
697 {
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
698 idx(2) = 0;
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
699 idx(3) = ii;
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
700 }
10979
7f49dc864f32 __magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 10978
diff changeset
701
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
702 if (has_alpha)
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
703 {
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
704 idx(2) = 1;
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
705 c.alpha (static_cast<double>(m(idx)) / div_factor);
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
706 idx(2) = 0;
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
707 }
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
708
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
709 c.shade (static_cast<double>(m(idx)) / div_factor);
10979
7f49dc864f32 __magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 10978
diff changeset
710
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
711 im.pixelColor (y, x, c);
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
712 }
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
713 }
11034
6589aaf769f6 Correctly handle logical and integer bit depths
John Swensen <jpswensen@gmail.com>
parents: 10988
diff changeset
714
6589aaf769f6 Correctly handle logical and integer bit depths
John Swensen <jpswensen@gmail.com>
parents: 10988
diff changeset
715 im.quantizeColorSpace (Magick::GRAYColorspace);
13020
58d704d3283c Fix ambigous call to int pow (int, unsigned int&)
Carlo de Falco <kingcrimson@tiscali.it>
parents: 11590
diff changeset
716 im.quantizeColors (1 << bitdepth);
11034
6589aaf769f6 Correctly handle logical and integer bit depths
John Swensen <jpswensen@gmail.com>
parents: 10988
diff changeset
717 im.quantize ();
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
718 }
10979
7f49dc864f32 __magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 10978
diff changeset
719
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
720 imvec.push_back (im);
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
721 }
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
722 }
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
723
16988
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
724 // FIXME: this will be needed to write indexed images
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
725 //static void
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
726 //encode_map (std::vector<Magick::Image>& imvec, const NDArray& cmap)
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
727 //{
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
728 // unsigned int mapsize = cmap.dim1 ();
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
729
16988
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
730 // for (size_t fnum = 0; fnum < imvec.size (); fnum++)
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
731 // {
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
732 // imvec[fnum].colorMapSize (mapsize);
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
733 // imvec[fnum].type (Magick::PaletteType);
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
734 // }
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
735
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
736 // for (unsigned int ii = 0; ii < mapsize; ii++)
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
737 // {
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
738 // Magick::ColorRGB c (cmap(ii,0), cmap(ii,1), cmap(ii,2));
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
739
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
740 // // FIXME -- is this case needed?
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
741 // if (cmap.dim2 () == 4)
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
742 // c.alpha (cmap(ii,3));
8054
272eaebbb6ba Various features added to imwrite
scofield@scofield
parents: 8053
diff changeset
743
16988
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
744 // try
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
745 // {
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
746 // for_each (imvec.begin (), imvec.end (),
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
747 // Magick::colorMapImage (ii, c));
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
748 // }
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
749 // catch (Magick::Warning& w)
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
750 // {
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
751 // warning ("Magick++ warning: %s", w.what ());
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
752 // }
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
753 // catch (Magick::ErrorCoder& e)
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
754 // {
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
755 // warning ("Magick++ coder error: %s", e.what ());
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
756 // }
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
757 // catch (Magick::Exception& e)
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
758 // {
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
759 // error ("Magick++ exception: %s", e.what ());
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
760 // }
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
761 // }
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
762 //}
9275
86f475d5e7d1 imwrite.m: convert indexed images to RGB before calling __magick_write__
John W. Eaton <jwe@octave.org>
parents: 9274
diff changeset
763
16988
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
764 void static
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
765 write_file (const std::string filename,
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
766 const std::string ext,
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
767 std::vector<Magick::Image>& imvec)
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
768 {
7974
fcaddd090f98 imwrite: new function
John W. Eaton <jwe@octave.org>
parents: 7937
diff changeset
769 try
fcaddd090f98 imwrite: new function
John W. Eaton <jwe@octave.org>
parents: 7937
diff changeset
770 {
16988
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
771 Magick::writeImages (imvec.begin (), imvec.end (), ext + ":" + filename);
7974
fcaddd090f98 imwrite: new function
John W. Eaton <jwe@octave.org>
parents: 7937
diff changeset
772 }
fcaddd090f98 imwrite: new function
John W. Eaton <jwe@octave.org>
parents: 7937
diff changeset
773 catch (Magick::Warning& w)
fcaddd090f98 imwrite: new function
John W. Eaton <jwe@octave.org>
parents: 7937
diff changeset
774 {
fcaddd090f98 imwrite: new function
John W. Eaton <jwe@octave.org>
parents: 7937
diff changeset
775 warning ("Magick++ warning: %s", w.what ());
fcaddd090f98 imwrite: new function
John W. Eaton <jwe@octave.org>
parents: 7937
diff changeset
776 }
fcaddd090f98 imwrite: new function
John W. Eaton <jwe@octave.org>
parents: 7937
diff changeset
777 catch (Magick::ErrorCoder& e)
fcaddd090f98 imwrite: new function
John W. Eaton <jwe@octave.org>
parents: 7937
diff changeset
778 {
fcaddd090f98 imwrite: new function
John W. Eaton <jwe@octave.org>
parents: 7937
diff changeset
779 warning ("Magick++ coder error: %s", e.what ());
fcaddd090f98 imwrite: new function
John W. Eaton <jwe@octave.org>
parents: 7937
diff changeset
780 }
fcaddd090f98 imwrite: new function
John W. Eaton <jwe@octave.org>
parents: 7937
diff changeset
781 catch (Magick::Exception& e)
fcaddd090f98 imwrite: new function
John W. Eaton <jwe@octave.org>
parents: 7937
diff changeset
782 {
fcaddd090f98 imwrite: new function
John W. Eaton <jwe@octave.org>
parents: 7937
diff changeset
783 error ("Magick++ exception: %s", e.what ());
16988
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
784 error_state = 1;
7974
fcaddd090f98 imwrite: new function
John W. Eaton <jwe@octave.org>
parents: 7937
diff changeset
785 }
fcaddd090f98 imwrite: new function
John W. Eaton <jwe@octave.org>
parents: 7937
diff changeset
786 }
fcaddd090f98 imwrite: new function
John W. Eaton <jwe@octave.org>
parents: 7937
diff changeset
787
fcaddd090f98 imwrite: new function
John W. Eaton <jwe@octave.org>
parents: 7937
diff changeset
788 #endif
fcaddd090f98 imwrite: new function
John W. Eaton <jwe@octave.org>
parents: 7937
diff changeset
789
9436
5302df15ad76 __magick_read__.cc: undo unintended change
John W. Eaton <jwe@octave.org>
parents: 9434
diff changeset
790 DEFUN_DLD (__magick_write__, args, ,
7974
fcaddd090f98 imwrite: new function
John W. Eaton <jwe@octave.org>
parents: 7937
diff changeset
791 "-*- texinfo -*-\n\
16988
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
792 @deftypefn {Loadable Function} {} __magick_write__ (@var{fname}, @var{fmt}, @var{img}, @var{map}, @var{options})\n\
16984
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
793 Write image with GraphicsMagick or ImageMagick.\n\
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
794 \n\
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
795 This is a private internal function not intended for direct use. Instead\n\
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
796 use @code{imwrite}.\n\
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
797 \n\
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
798 @seealso{imfinfo, imformats, imread, imwrite}\n\
7974
fcaddd090f98 imwrite: new function
John W. Eaton <jwe@octave.org>
parents: 7937
diff changeset
799 @end deftypefn")
fcaddd090f98 imwrite: new function
John W. Eaton <jwe@octave.org>
parents: 7937
diff changeset
800 {
fcaddd090f98 imwrite: new function
John W. Eaton <jwe@octave.org>
parents: 7937
diff changeset
801 octave_value_list retval;
fcaddd090f98 imwrite: new function
John W. Eaton <jwe@octave.org>
parents: 7937
diff changeset
802
16983
4660d047955e Make use of gripe_disabled_feature() for image IO functions.
Carnë Draug <carandraug+dev@gmail.com>
parents: 16944
diff changeset
803 #ifndef HAVE_MAGICK
4660d047955e Make use of gripe_disabled_feature() for image IO functions.
Carnë Draug <carandraug+dev@gmail.com>
parents: 16944
diff changeset
804 gripe_disabled_feature ("imwrite", "Image IO");
4660d047955e Make use of gripe_disabled_feature() for image IO functions.
Carnë Draug <carandraug+dev@gmail.com>
parents: 16944
diff changeset
805 #else
4660d047955e Make use of gripe_disabled_feature() for image IO functions.
Carnë Draug <carandraug+dev@gmail.com>
parents: 16944
diff changeset
806
10947
dc74ce93cfc4 initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents: 10840
diff changeset
807 maybe_initialize_magick ();
dc74ce93cfc4 initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents: 10840
diff changeset
808
16988
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
809 if (args.length () != 5 || ! args(0).is_string () || ! args(1).is_string ())
7974
fcaddd090f98 imwrite: new function
John W. Eaton <jwe@octave.org>
parents: 7937
diff changeset
810 {
16988
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
811 print_usage ();
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
812 return retval;
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
813 }
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
814 const std::string filename = args(0).string_value ();
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
815 const std::string ext = args(1).string_value ();
7974
fcaddd090f98 imwrite: new function
John W. Eaton <jwe@octave.org>
parents: 7937
diff changeset
816
16988
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
817 const octave_map options = args(4).map_value ();
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
818 if (error_state)
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
819 {
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
820 error ("__magick_write__: OPTIONS must be a struct");
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
821 }
7974
fcaddd090f98 imwrite: new function
John W. Eaton <jwe@octave.org>
parents: 7937
diff changeset
822
16988
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
823 const octave_value img = args(2);
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
824 const Matrix cmap = args(3).matrix_value ();
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
825 if (error_state)
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
826 {
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
827 error ("__magick_write__: invalid IMG or MAP");
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
828 }
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
829 const bool is_indexed = ! cmap.is_empty ();
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
830
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
831 // Create vector with the images to write
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
832 std::vector<Magick::Image> imvec;
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
833 if (img.is_bool_type ())
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
834 {
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
835 encode_bool_image (imvec, img);
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
836 }
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
837 else if (img.is_uint8_type ())
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
838 {
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
839 encode_uint_image<uint8NDArray> (imvec, img, is_indexed);
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
840 }
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
841 else if (img.is_uint16_type ())
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
842 {
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
843 encode_uint_image<uint16NDArray> (imvec, img, is_indexed);
7974
fcaddd090f98 imwrite: new function
John W. Eaton <jwe@octave.org>
parents: 7937
diff changeset
844 }
fcaddd090f98 imwrite: new function
John W. Eaton <jwe@octave.org>
parents: 7937
diff changeset
845 else
16988
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
846 {
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
847 error ("__magick_write__: image type not supported");
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
848 return retval;
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
849 }
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
850 const int nframes = imvec.size ();
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
851
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
852 // Add colormap to image
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
853 if (is_indexed)
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
854 {
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
855 // FIXME: this should be implemented. At the moment, imwrite is doing the
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
856 // conversion in case of indexed images.
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
857 error ("__magick_write__: direct saving of indexed images not currently supported; use ind2rgb and save converted image");
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
858 // encode_map (imvec, cmap);
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
859 return retval;
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
860 }
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
861
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
862 // Set quality.
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
863 // FIXME What happens when we try to set with formats that do not support it?
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
864 const unsigned int quality = options.getfield ("quality")(0).int_value ();
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
865 for (int i = 0; i < nframes; i++)
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
866 {
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
867 imvec[i].quality (quality);
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
868 }
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
869
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
870 // Finally, save the file.
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
871 // If writemode is set to append, read the image first, append to it,
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
872 // and then save it. But even if set to append, make sure anything was
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
873 // read at all.
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
874 const std::string writemode = options.getfield ("writemode")(0).string_value ();
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
875 std::vector<Magick::Image> ini_imvec;
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
876 if (writemode == "append")
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
877 {
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
878 read_file (filename, ini_imvec);
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
879 if (error_state)
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
880 {
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
881 return retval;
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
882 }
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
883 }
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
884
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
885 if (ini_imvec.size () > 0)
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
886 {
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
887 ini_imvec.insert (ini_imvec.end (), imvec.begin (), imvec.end ());
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
888 write_file (filename, ext, ini_imvec);
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
889 if (error_state)
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
890 {
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
891 return retval;
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
892 }
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
893 }
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
894 else
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
895 {
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
896 write_file (filename, ext, imvec);
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
897 if (error_state)
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
898 {
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
899 return retval;
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
900 }
54b75bed4bc7 imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents: 16984
diff changeset
901 }
7974
fcaddd090f98 imwrite: new function
John W. Eaton <jwe@octave.org>
parents: 7937
diff changeset
902
fcaddd090f98 imwrite: new function
John W. Eaton <jwe@octave.org>
parents: 7937
diff changeset
903 #endif
16983
4660d047955e Make use of gripe_disabled_feature() for image IO functions.
Carnë Draug <carandraug+dev@gmail.com>
parents: 16944
diff changeset
904 return retval;
7974
fcaddd090f98 imwrite: new function
John W. Eaton <jwe@octave.org>
parents: 7937
diff changeset
905 }
fcaddd090f98 imwrite: new function
John W. Eaton <jwe@octave.org>
parents: 7937
diff changeset
906
12805
3641167e5b75 codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents: 11590
diff changeset
907 /*
3641167e5b75 codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents: 11590
diff changeset
908 ## No test needed for internal helper function.
3641167e5b75 codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents: 11590
diff changeset
909 %!assert (1)
3641167e5b75 codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents: 11590
diff changeset
910 */
3641167e5b75 codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents: 11590
diff changeset
911
8165
75014ec4ac84 __magick_read__.cc: only define magick_to_octave_value functions if HAVE_MAGICK is defined
John W. Eaton <jwe@octave.org>
parents: 8144
diff changeset
912 #ifdef HAVE_MAGICK
75014ec4ac84 __magick_read__.cc: only define magick_to_octave_value functions if HAVE_MAGICK is defined
John W. Eaton <jwe@octave.org>
parents: 8144
diff changeset
913
8144
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
914 template<class T>
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
915 static octave_value
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
916 magick_to_octave_value (const T magick)
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
917 {
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
918 return octave_value (magick);
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
919 }
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
920
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
921 static octave_value
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
922 magick_to_octave_value (const Magick::EndianType magick)
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
923 {
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
924 switch (magick)
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
925 {
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
926 case Magick::LSBEndian:
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
927 return octave_value ("little-endian");
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
928
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
929 case Magick::MSBEndian:
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
930 return octave_value ("big-endian");
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
931
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
932 default:
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
933 return octave_value ("undefined");
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
934 }
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
935 }
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
936
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
937 static octave_value
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
938 magick_to_octave_value (const Magick::ResolutionType magick)
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
939 {
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
940 switch (magick)
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
941 {
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
942 case Magick::PixelsPerInchResolution:
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
943 return octave_value ("pixels per inch");
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
944
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
945 case Magick::PixelsPerCentimeterResolution:
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
946 return octave_value ("pixels per centimeter");
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
947
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
948 default:
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
949 return octave_value ("undefined");
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
950 }
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
951 }
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
952
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
953 static octave_value
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
954 magick_to_octave_value (const Magick::ImageType magick)
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
955 {
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
956 switch (magick)
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
957 {
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
958 case Magick::BilevelType:
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
959 case Magick::GrayscaleType:
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
960 case Magick::GrayscaleMatteType:
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
961 return octave_value ("grayscale");
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
962
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
963 case Magick::PaletteType:
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
964 case Magick::PaletteMatteType:
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
965 return octave_value ("indexed");
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
966
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
967 case Magick::TrueColorType:
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
968 case Magick::TrueColorMatteType:
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
969 case Magick::ColorSeparationType:
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
970 return octave_value ("truecolor");
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
971
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
972 default:
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
973 return octave_value ("undefined");
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
974 }
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
975 }
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
976
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
977 // We put this in a try-block because GraphicsMagick will throw
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
978 // exceptions if a parameter isn't present in the current image.
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
979 #define GET_PARAM(NAME, OUTNAME) \
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
980 try \
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
981 { \
10333
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
982 info.contents (OUTNAME)(frame,0) = magick_to_octave_value (im.NAME ()); \
8144
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
983 } \
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
984 catch (Magick::Warning& w) \
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
985 { \
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
986 }
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
987
8165
75014ec4ac84 __magick_read__.cc: only define magick_to_octave_value functions if HAVE_MAGICK is defined
John W. Eaton <jwe@octave.org>
parents: 8144
diff changeset
988 #endif
75014ec4ac84 __magick_read__.cc: only define magick_to_octave_value functions if HAVE_MAGICK is defined
John W. Eaton <jwe@octave.org>
parents: 8144
diff changeset
989
9436
5302df15ad76 __magick_read__.cc: undo unintended change
John W. Eaton <jwe@octave.org>
parents: 9434
diff changeset
990 DEFUN_DLD (__magick_finfo__, args, ,
8144
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
991 "-*- texinfo -*-\n\
14854
5ae9f0f77635 maint: Use Octave coding conventions for coddling parenthis is DLD-FUNCTIONS directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
992 @deftypefn {Loadable Function} {} __magick_finfo__ (@var{fname})\n\
16984
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
993 Read image information with GraphicsMagick or ImageMagick.\n\
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
994 \n\
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
995 This is a private internal function not intended for direct use. Instead\n\
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
996 use @code{imfinfo}.\n\
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
997 \n\
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
998 @seealso{imfinfo, imformats, imread, imwrite}\n\
8144
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
999 @end deftypefn")
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
1000 {
10333
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1001 octave_value retval;
8144
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
1002
16983
4660d047955e Make use of gripe_disabled_feature() for image IO functions.
Carnë Draug <carandraug+dev@gmail.com>
parents: 16944
diff changeset
1003 #ifndef HAVE_MAGICK
4660d047955e Make use of gripe_disabled_feature() for image IO functions.
Carnë Draug <carandraug+dev@gmail.com>
parents: 16944
diff changeset
1004 gripe_disabled_feature ("imfinfo", "Image IO");
4660d047955e Make use of gripe_disabled_feature() for image IO functions.
Carnë Draug <carandraug+dev@gmail.com>
parents: 16944
diff changeset
1005 #else
8144
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
1006
10947
dc74ce93cfc4 initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents: 10840
diff changeset
1007 maybe_initialize_magick ();
dc74ce93cfc4 initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents: 10840
diff changeset
1008
8144
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
1009 if (args.length () < 1 || ! args (0).is_string ())
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
1010 {
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
1011 print_usage ();
10333
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1012 return retval;
8144
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
1013 }
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
1014
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
1015 const std::string filename = args (0).string_value ();
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
1016
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
1017 try
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
1018 {
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
1019 // Read the file.
10333
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1020 std::vector<Magick::Image> imvec;
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1021 Magick::readImages (&imvec, args(0).string_value ());
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11585
diff changeset
1022 int nframes = imvec.size ();
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11585
diff changeset
1023
10333
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1024 // Create the right size for the output.
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1025
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1026 static const char *fields[] =
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1027 {
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1028 "Filename",
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1029 "FileModDate",
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1030 "FileSize",
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1031 "Height",
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1032 "Width",
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1033 "BitDepth",
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1034 "Format",
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1035 "LongFormat",
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1036 "XResolution",
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1037 "YResolution",
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1038 "TotalColors",
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1039 "TileName",
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1040 "AnimationDelay",
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1041 "AnimationIterations",
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1042 "ByteOrder",
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1043 "Gamma",
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1044 "Matte",
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1045 "ModulusDepth",
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1046 "Quality",
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1047 "QuantizeColors",
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1048 "ResolutionUnits",
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1049 "ColorType",
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1050 "View",
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1051 0
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1052 };
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1053
16871
5e30b1c950b8 Replace uses of Octave_map with octave_map or octave_scalar_map.
Rik <rik@octave.org>
parents: 16543
diff changeset
1054 octave_map info (dim_vector (nframes, 1), string_vector (fields));
10333
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1055
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1056 file_stat fs (filename);
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1057
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1058 std::string filetime;
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1059
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1060 if (fs)
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1061 {
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1062 octave_localtime mtime = fs.mtime ();
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1063
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1064 filetime = mtime.strftime ("%e-%b-%Y %H:%M:%S");
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1065 }
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1066 else
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1067 {
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1068 std::string msg = fs.error ();
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1069
15466
d174210ce1ec use ' instead of ` in error messages, warnings and most comments
John W. Eaton <jwe@octave.org>
parents: 14173
diff changeset
1070 error ("imfinfo: error reading '%s': %s",
10333
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1071 filename.c_str (), msg.c_str ());
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1072
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1073 return retval;
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1074 }
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1075
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1076 // For each frame in the image (some images contain multiple
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1077 // layers, each to be treated like a separate image).
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1078 for (int frame = 0; frame < nframes; frame++)
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1079 {
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1080 Magick::Image im = imvec[frame];
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11585
diff changeset
1081
10333
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1082 // Add file name and timestamp.
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1083 info.contents ("Filename")(frame,0) = filename;
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1084 info.contents ("FileModDate")(frame,0) = filetime;
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11585
diff changeset
1085
10333
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1086 // Annoying CamelCase naming is for Matlab compatibility.
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1087 GET_PARAM (fileSize, "FileSize")
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1088 GET_PARAM (rows, "Height")
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1089 GET_PARAM (columns, "Width")
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1090 GET_PARAM (depth, "BitDepth")
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1091 GET_PARAM (magick, "Format")
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1092 GET_PARAM (format, "LongFormat")
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1093 GET_PARAM (xResolution, "XResolution")
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1094 GET_PARAM (yResolution, "YResolution")
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1095 GET_PARAM (totalColors, "TotalColors")
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1096 GET_PARAM (tileName, "TileName")
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1097 GET_PARAM (animationDelay, "AnimationDelay")
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1098 GET_PARAM (animationIterations, "AnimationIterations")
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1099 GET_PARAM (endian, "ByteOrder")
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1100 GET_PARAM (gamma, "Gamma")
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1101 GET_PARAM (matte, "Matte")
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1102 GET_PARAM (modulusDepth, "ModulusDepth")
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1103 GET_PARAM (quality, "Quality")
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1104 GET_PARAM (quantizeColors, "QuantizeColors")
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1105 GET_PARAM (resolutionUnits, "ResolutionUnits")
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1106 GET_PARAM (type, "ColorType")
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1107 GET_PARAM (view, "View")
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1108 }
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1109
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1110 retval = octave_value (info);
8144
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
1111 }
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
1112 catch (Magick::Warning& w)
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
1113 {
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
1114 warning ("Magick++ warning: %s", w.what ());
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
1115 }
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
1116 catch (Magick::ErrorCoder& e)
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
1117 {
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
1118 warning ("Magick++ coder error: %s", e.what ());
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
1119 }
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
1120 catch (Magick::Exception& e)
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
1121 {
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
1122 error ("Magick++ exception: %s", e.what ());
10333
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1123 return retval;
8144
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
1124 }
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
1125 #endif
10333
0c42b6b7da24 imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents: 10298
diff changeset
1126 return retval;
8144
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
1127 }
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
1128
12805
3641167e5b75 codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents: 11590
diff changeset
1129 /*
3641167e5b75 codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents: 11590
diff changeset
1130 ## No test needed for internal helper function.
3641167e5b75 codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents: 11590
diff changeset
1131 %!assert (1)
3641167e5b75 codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents: 11590
diff changeset
1132 */
3641167e5b75 codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents: 11590
diff changeset
1133
8144
01fac748b680 Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents: 8090
diff changeset
1134 #undef GET_PARAM
11035
8a6b7947f618 Added support for checking supported image types at runtime.
John Swensen <jpswensen@gmail.com>
parents: 11034
diff changeset
1135
16901
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1136 DEFUN_DLD (__magick_formats__, args, ,
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1137 "-*- texinfo -*-\n\
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1138 @deftypefn {Loadable Function} {} __magick_imformats__ (@var{formats})\n\
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1139 Fill formats info with GraphicsMagick CoderInfo.\n\
16984
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
1140 \n\
997efb8d0b19 imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents: 16983
diff changeset
1141 @seealso{imfinfo, imformats, imread, imwrite}\n\
16901
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1142 @end deftypefn")
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1143 {
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1144 octave_value retval;
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1145 #ifndef HAVE_MAGICK
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1146 gripe_disabled_feature ("imformats", "Image IO");
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1147 #else
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1148 if (args.length () != 1 || ! args (0).is_map ())
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1149 {
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1150 print_usage ();
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1151 return retval;
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1152 }
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1153 octave_map formats = args(0).map_value ();
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1154
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1155 maybe_initialize_magick ();
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1156 for (octave_idx_type idx = 0; idx < formats.numel (); idx++)
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1157 {
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1158 try
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1159 {
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1160 octave_scalar_map fmt = formats.checkelem (idx);
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1161 Magick::CoderInfo coder (fmt.getfield ("coder").string_value ());
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1162
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1163 fmt.setfield ("description", octave_value (coder.description ()));
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1164 fmt.setfield ("multipage", coder.isMultiFrame () ? true : false);
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1165 // default for read and write is a function handle. If we can't
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1166 // read or write them, them set it to an empty value
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1167 if (! coder.isReadable ())
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1168 fmt.setfield ("read", Matrix ());
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1169 if (! coder.isWritable ())
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1170 fmt.setfield ("write", Matrix ());
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1171 formats.fast_elem_insert (idx, fmt);
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1172 }
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1173 catch (Magick::Exception& e)
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1174 {
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1175 // Exception here are missing formats. So we remove the format
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1176 // from the structure and reduce idx.
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1177 formats.delete_elements (idx);
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1178 idx--;
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1179 }
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1180 }
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1181 retval = formats;
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1182 #endif
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1183 return retval;
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1184 }
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1185
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1186 /*
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1187 ## No test needed for internal helper function.
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1188 %!assert (1)
861516dcad19 New function imformats.
Carnë Draug <carandraug@octave.org>
parents: 16871
diff changeset
1189 */