Mercurial > octave
annotate libinterp/corefcn/__magick_read__.cc @ 27923:bd51beb6205e
update formatting of copyright notices
* Use <https://octave.org/copyright/> instead of
<https://octave.org/COPYRIGHT.html/>.
* For consistency with other comments in the Octave sources, use
C++-style comments for copyright blocks in C and C++ files.
* Use delimiters above and below copyright blocks that are appropriate
for the language used in the file.
* Eliminate extra spacing inside copyright blocks.
* lex.ll (looks_like_copyright): Also allow newlines and carriage
returns before the word "Copyright".
* scripts/mk-doc.pl (gethelp): Also skip empty comment lines.
* bp-table.cc, type.m: Adjust tests.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Wed, 08 Jan 2020 11:59:41 -0500 |
parents | 1891570abac8 |
children | c20b7290c778 |
rev | line source |
---|---|
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
1 //////////////////////////////////////////////////////////////////////// |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
2 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
3 // Copyright (C) 2002-2020 The Octave Project Developers |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
4 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
5 // See the file COPYRIGHT.md in the top-level directory of this |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
6 // distribution or <https://octave.org/copyright/>. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
7 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
8 // This file is part of Octave. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
9 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
10 // Octave is free software: you can redistribute it and/or modify it |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
11 // under the terms of the GNU General Public License as published by |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
12 // the Free Software Foundation, either version 3 of the License, or |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
13 // (at your option) any later version. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
14 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
15 // Octave is distributed in the hope that it will be useful, but |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
16 // WITHOUT ANY WARRANTY; without even the implied warranty of |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
18 // GNU General Public License for more details. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
19 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
20 // You should have received a copy of the GNU General Public License |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
21 // along with Octave; see the file COPYING. If not, see |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
22 // <https://www.gnu.org/licenses/>. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
23 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
24 //////////////////////////////////////////////////////////////////////// |
7925
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
25 |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21691
diff
changeset
|
26 #if defined (HAVE_CONFIG_H) |
21301
40de9f8f23a6
Use '#include "config.h"' rather than <config.h>.
Rik <rik@octave.org>
parents:
21200
diff
changeset
|
27 # include "config.h" |
7926
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 |
10333
0c42b6b7da24
imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents:
10298
diff
changeset
|
30 #include "file-stat.h" |
10390
ad0b54ae206a
__magick_read__ (F__magick_read__): call Magick::InitializeMagick
John W. Eaton <jwe@octave.org>
parents:
10350
diff
changeset
|
31 #include "oct-env.h" |
10333
0c42b6b7da24
imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents:
10298
diff
changeset
|
32 #include "oct-time.h" |
0c42b6b7da24
imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents:
10298
diff
changeset
|
33 |
21679
44f7664689f2
make __magick_read__ a built-in function (bug #41699)
John W. Eaton <jwe@octave.org>
parents:
21142
diff
changeset
|
34 #include "defun.h" |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
35 #include "error.h" |
8054 | 36 #include "ov-struct.h" |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
37 |
21100
e39e05d90788
Switch gripe_XXX to either err_XXX or warn_XXX naming scheme.
Rik <rik@octave.org>
parents:
21033
diff
changeset
|
38 #include "errwarn.h" |
16925
5c25f7ed080c
*__magick_read__.cc: add missing include of gripes.h
Torsten <ttl@justmail.de>
parents:
16901
diff
changeset
|
39 |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21691
diff
changeset
|
40 #if defined (HAVE_MAGICK) |
7937
6661387827d6
Allow build without GraphicsMagick installed
David Bateman <dbateman@free.fr>
parents:
7933
diff
changeset
|
41 |
9575
55ecaefb7d0f
Use pkg-config to configure GraphicsMagick++.
David Grundberg <individ@acc.umu.se>
parents:
9439
diff
changeset
|
42 #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
|
43 #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
|
44 |
17350 | 45 // In theory, it should be enough to check the class: |
46 // Magick::ClassType | |
47 // PseudoClass: | |
48 // Image is composed of pixels which specify an index in a color palette. | |
49 // DirectClass: | |
50 // Image is composed of pixels which represent literal color values. | |
51 // | |
52 // GraphicsMagick does not really distinguishes between indexed and | |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
53 // normal images. After reading a file, it decides itself the optimal |
17350 | 54 // way to store the image in memory, independently of the how the |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
55 // image was stored in the file. That's what ClassType returns. While |
17350 | 56 // it seems to match the original file most of the times, this is |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
57 // not necessarily true all the times. See |
17350 | 58 // https://sourceforge.net/mailarchive/message.php?msg_id=31180507 |
59 // In addition to the ClassType, there is also ImageType which has a | |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
60 // type for indexed images (PaletteType and PaletteMatteType). However, |
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
61 // they also don't represent the original image. Not only does DirectClass |
17350 | 62 // can have a PaletteType, but also does a PseudoClass have non Palette |
63 // types. | |
64 // | |
65 // We can't do better without having format specific code which is | |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
66 // what we are trying to avoid by using a library such as GM. We at |
17350 | 67 // least create workarounds for the most common problems. |
68 // | |
69 // 1) A grayscale jpeg image can report being indexed even though the | |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
70 // JPEG format has no support for indexed images. We can at least |
17350 | 71 // fix this one. |
17373
8508b8ae46a8
imread: fix identification of PNG files as indexed.
Carnë Draug <carandraug@octave.org>
parents:
17372
diff
changeset
|
72 // 2) A PNG file is only an indexed image if color type orig is 3 (value comes |
8508b8ae46a8
imread: fix identification of PNG files as indexed.
Carnë Draug <carandraug@octave.org>
parents:
17372
diff
changeset
|
73 // from libpng) |
17350 | 74 static bool |
75 is_indexed (const Magick::Image& img) | |
76 { | |
18955
914c3ce73665
__magick_read__.cc: fix png check for image class in older GM (bug #42834).
Carnë Draug <carandraug@octave.org>
parents:
18553
diff
changeset
|
77 bool indexed = (img.classType () == Magick::PseudoClass); |
914c3ce73665
__magick_read__.cc: fix png check for image class in older GM (bug #42834).
Carnë Draug <carandraug@octave.org>
parents:
18553
diff
changeset
|
78 // Our problem until now is non-indexed images, being represented as indexed |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
79 // by GM. The following attempts educated guesses to undo this optimization. |
18955
914c3ce73665
__magick_read__.cc: fix png check for image class in older GM (bug #42834).
Carnë Draug <carandraug@octave.org>
parents:
18553
diff
changeset
|
80 if (indexed) |
914c3ce73665
__magick_read__.cc: fix png check for image class in older GM (bug #42834).
Carnë Draug <carandraug@octave.org>
parents:
18553
diff
changeset
|
81 { |
914c3ce73665
__magick_read__.cc: fix png check for image class in older GM (bug #42834).
Carnë Draug <carandraug@octave.org>
parents:
18553
diff
changeset
|
82 const std::string fmt = img.magick (); |
914c3ce73665
__magick_read__.cc: fix png check for image class in older GM (bug #42834).
Carnë Draug <carandraug@octave.org>
parents:
18553
diff
changeset
|
83 if (fmt == "JPEG") |
914c3ce73665
__magick_read__.cc: fix png check for image class in older GM (bug #42834).
Carnë Draug <carandraug@octave.org>
parents:
18553
diff
changeset
|
84 // The JPEG format does not support indexed images, but GM sometimes |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
85 // reports grayscale JPEG as indexed. Always false for JPEG. |
18955
914c3ce73665
__magick_read__.cc: fix png check for image class in older GM (bug #42834).
Carnë Draug <carandraug@octave.org>
parents:
18553
diff
changeset
|
86 indexed = false; |
914c3ce73665
__magick_read__.cc: fix png check for image class in older GM (bug #42834).
Carnë Draug <carandraug@octave.org>
parents:
18553
diff
changeset
|
87 else if (fmt == "PNG") |
914c3ce73665
__magick_read__.cc: fix png check for image class in older GM (bug #42834).
Carnë Draug <carandraug@octave.org>
parents:
18553
diff
changeset
|
88 { |
914c3ce73665
__magick_read__.cc: fix png check for image class in older GM (bug #42834).
Carnë Draug <carandraug@octave.org>
parents:
18553
diff
changeset
|
89 // Newer versions of GM (at least does not happens with 1.3.16) will |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
90 // store values from the underlying library as image attributes. In |
18955
914c3ce73665
__magick_read__.cc: fix png check for image class in older GM (bug #42834).
Carnë Draug <carandraug@octave.org>
parents:
18553
diff
changeset
|
91 // the case of PNG files, this is libpng where an indexed image will |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
92 // always have a value of 3 for "color-type-orig". This property |
18955
914c3ce73665
__magick_read__.cc: fix png check for image class in older GM (bug #42834).
Carnë Draug <carandraug@octave.org>
parents:
18553
diff
changeset
|
93 // always has a value in libpng so if we get nothing, we assume this |
914c3ce73665
__magick_read__.cc: fix png check for image class in older GM (bug #42834).
Carnë Draug <carandraug@octave.org>
parents:
18553
diff
changeset
|
94 // GM version does not store them and we have to go with whatever |
914c3ce73665
__magick_read__.cc: fix png check for image class in older GM (bug #42834).
Carnë Draug <carandraug@octave.org>
parents:
18553
diff
changeset
|
95 // GM PseudoClass says. |
27277
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
26488
diff
changeset
|
96 const std::string color_type |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
26488
diff
changeset
|
97 = const_cast<Magick::Image&> (img).attribute ("PNG:IHDR.color-type-orig"); |
23807
336f89b6208b
Use character literals 'c' rather than string literals "c" when possible.
Rik <rik@octave.org>
parents:
23795
diff
changeset
|
98 if (! color_type.empty () && color_type != "3") |
18955
914c3ce73665
__magick_read__.cc: fix png check for image class in older GM (bug #42834).
Carnë Draug <carandraug@octave.org>
parents:
18553
diff
changeset
|
99 indexed = false; |
914c3ce73665
__magick_read__.cc: fix png check for image class in older GM (bug #42834).
Carnë Draug <carandraug@octave.org>
parents:
18553
diff
changeset
|
100 } |
914c3ce73665
__magick_read__.cc: fix png check for image class in older GM (bug #42834).
Carnë Draug <carandraug@octave.org>
parents:
18553
diff
changeset
|
101 } |
914c3ce73665
__magick_read__.cc: fix png check for image class in older GM (bug #42834).
Carnë Draug <carandraug@octave.org>
parents:
18553
diff
changeset
|
102 return indexed; |
17350 | 103 } |
104 | |
105 // The depth from depth() is not always correct for us but seems to be the | |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
106 // best value we can get. For example, a grayscale png image with 1 bit |
17350 | 107 // per channel should return a depth of 1 but instead we get 8. |
108 // We could check channelDepth() but then, which channel has the data | |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
109 // is not straightforward. So we'd have to check all |
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
110 // the channels and select the highest value. But then, I also |
17350 | 111 // have a 16bit TIFF whose depth returns 16 (correct), but all of the |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
112 // channels gives 8 (wrong). No idea why, maybe a bug in GM? |
17350 | 113 // Anyway, using depth() seems that only causes problems for binary |
114 // images, and the problem with channelDepth() is not making set them | |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
115 // all to 1. So we will guess that if all channels have depth of 1, |
17350 | 116 // then we must have a binary image. |
117 // Note that we can't use AllChannels it doesn't work for this. | |
20338
a7770c66cb3d
Saturated red channel on RGB image, makes imread() return logical (bug #41584)
Carnë Draug <carandraug@octave.org>
parents:
20232
diff
changeset
|
118 // We also can't check only one from RGB, one from CMYK, and grayscale |
a7770c66cb3d
Saturated red channel on RGB image, makes imread() return logical (bug #41584)
Carnë Draug <carandraug@octave.org>
parents:
20232
diff
changeset
|
119 // and transparency, we really need to check all of the channels (bug #41584). |
17350 | 120 static octave_idx_type |
121 get_depth (Magick::Image& img) | |
122 { | |
123 octave_idx_type depth = img.depth (); | |
17373
8508b8ae46a8
imread: fix identification of PNG files as indexed.
Carnë Draug <carandraug@octave.org>
parents:
17372
diff
changeset
|
124 if (depth == 8 |
17350 | 125 && img.channelDepth (Magick::RedChannel) == 1 |
20338
a7770c66cb3d
Saturated red channel on RGB image, makes imread() return logical (bug #41584)
Carnë Draug <carandraug@octave.org>
parents:
20232
diff
changeset
|
126 && img.channelDepth (Magick::GreenChannel) == 1 |
a7770c66cb3d
Saturated red channel on RGB image, makes imread() return logical (bug #41584)
Carnë Draug <carandraug@octave.org>
parents:
20232
diff
changeset
|
127 && img.channelDepth (Magick::BlueChannel) == 1 |
17350 | 128 && img.channelDepth (Magick::CyanChannel) == 1 |
20338
a7770c66cb3d
Saturated red channel on RGB image, makes imread() return logical (bug #41584)
Carnë Draug <carandraug@octave.org>
parents:
20232
diff
changeset
|
129 && img.channelDepth (Magick::MagentaChannel) == 1 |
a7770c66cb3d
Saturated red channel on RGB image, makes imread() return logical (bug #41584)
Carnë Draug <carandraug@octave.org>
parents:
20232
diff
changeset
|
130 && img.channelDepth (Magick::YellowChannel) == 1 |
a7770c66cb3d
Saturated red channel on RGB image, makes imread() return logical (bug #41584)
Carnë Draug <carandraug@octave.org>
parents:
20232
diff
changeset
|
131 && img.channelDepth (Magick::BlackChannel) == 1 |
17350 | 132 && img.channelDepth (Magick::OpacityChannel) == 1 |
133 && img.channelDepth (Magick::GrayChannel) == 1) | |
134 depth = 1; | |
135 | |
136 return depth; | |
137 } | |
138 | |
17335
583306fe7e4f
Fix reading of images with height or width of 1 pixel.
Carnë Draug <carandraug@octave.org>
parents:
17334
diff
changeset
|
139 // We need this in case one of the sides of the image being read has |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
140 // width 1. In those cases, the type will come as scalar instead of range |
21308
c53bfd6d8e08
maint: Use American spelling for "behavior".
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
141 // since that's the behavior of the colon operator (1:1:1 will be a scalar, |
17335
583306fe7e4f
Fix reading of images with height or width of 1 pixel.
Carnë Draug <carandraug@octave.org>
parents:
17334
diff
changeset
|
142 // not a range). |
583306fe7e4f
Fix reading of images with height or width of 1 pixel.
Carnë Draug <carandraug@octave.org>
parents:
17334
diff
changeset
|
143 static Range |
583306fe7e4f
Fix reading of images with height or width of 1 pixel.
Carnë Draug <carandraug@octave.org>
parents:
17334
diff
changeset
|
144 get_region_range (const octave_value& region) |
583306fe7e4f
Fix reading of images with height or width of 1 pixel.
Carnë Draug <carandraug@octave.org>
parents:
17334
diff
changeset
|
145 { |
583306fe7e4f
Fix reading of images with height or width of 1 pixel.
Carnë Draug <carandraug@octave.org>
parents:
17334
diff
changeset
|
146 Range output; |
27906
1a06fa2fe13a
Don't error out in __magick_read__ if disable_range is true (bug #57528).
Rik <rik@octave.org>
parents:
27277
diff
changeset
|
147 |
17335
583306fe7e4f
Fix reading of images with height or width of 1 pixel.
Carnë Draug <carandraug@octave.org>
parents:
17334
diff
changeset
|
148 if (region.is_range ()) |
583306fe7e4f
Fix reading of images with height or width of 1 pixel.
Carnë Draug <carandraug@octave.org>
parents:
17334
diff
changeset
|
149 output = region.range_value (); |
583306fe7e4f
Fix reading of images with height or width of 1 pixel.
Carnë Draug <carandraug@octave.org>
parents:
17334
diff
changeset
|
150 else if (region.is_scalar_type ()) |
583306fe7e4f
Fix reading of images with height or width of 1 pixel.
Carnë Draug <carandraug@octave.org>
parents:
17334
diff
changeset
|
151 { |
583306fe7e4f
Fix reading of images with height or width of 1 pixel.
Carnë Draug <carandraug@octave.org>
parents:
17334
diff
changeset
|
152 double value = region.scalar_value (); |
583306fe7e4f
Fix reading of images with height or width of 1 pixel.
Carnë Draug <carandraug@octave.org>
parents:
17334
diff
changeset
|
153 output = Range (value, value); |
583306fe7e4f
Fix reading of images with height or width of 1 pixel.
Carnë Draug <carandraug@octave.org>
parents:
17334
diff
changeset
|
154 } |
27906
1a06fa2fe13a
Don't error out in __magick_read__ if disable_range is true (bug #57528).
Rik <rik@octave.org>
parents:
27277
diff
changeset
|
155 else if (region.is_matrix_type ()) |
1a06fa2fe13a
Don't error out in __magick_read__ if disable_range is true (bug #57528).
Rik <rik@octave.org>
parents:
27277
diff
changeset
|
156 { |
1a06fa2fe13a
Don't error out in __magick_read__ if disable_range is true (bug #57528).
Rik <rik@octave.org>
parents:
27277
diff
changeset
|
157 NDArray array = region.array_value (); |
1a06fa2fe13a
Don't error out in __magick_read__ if disable_range is true (bug #57528).
Rik <rik@octave.org>
parents:
27277
diff
changeset
|
158 double base = array(0); |
1a06fa2fe13a
Don't error out in __magick_read__ if disable_range is true (bug #57528).
Rik <rik@octave.org>
parents:
27277
diff
changeset
|
159 double limit = array(array.numel () - 1); |
1a06fa2fe13a
Don't error out in __magick_read__ if disable_range is true (bug #57528).
Rik <rik@octave.org>
parents:
27277
diff
changeset
|
160 double incr = array(1) - base; |
1a06fa2fe13a
Don't error out in __magick_read__ if disable_range is true (bug #57528).
Rik <rik@octave.org>
parents:
27277
diff
changeset
|
161 output = Range (base, limit, incr); |
1a06fa2fe13a
Don't error out in __magick_read__ if disable_range is true (bug #57528).
Rik <rik@octave.org>
parents:
27277
diff
changeset
|
162 } |
17335
583306fe7e4f
Fix reading of images with height or width of 1 pixel.
Carnë Draug <carandraug@octave.org>
parents:
17334
diff
changeset
|
163 else |
21142
a3362dd2dd52
doc: fix spelling of "unknown".
Rafael Laboissiere <rafael@laboissiere.net>
parents:
20163
diff
changeset
|
164 error ("__magick_read__: unknown datatype for Region option"); |
17335
583306fe7e4f
Fix reading of images with height or width of 1 pixel.
Carnë Draug <carandraug@octave.org>
parents:
17334
diff
changeset
|
165 |
583306fe7e4f
Fix reading of images with height or width of 1 pixel.
Carnë Draug <carandraug@octave.org>
parents:
17334
diff
changeset
|
166 return output; |
583306fe7e4f
Fix reading of images with height or width of 1 pixel.
Carnë Draug <carandraug@octave.org>
parents:
17334
diff
changeset
|
167 } |
583306fe7e4f
Fix reading of images with height or width of 1 pixel.
Carnë Draug <carandraug@octave.org>
parents:
17334
diff
changeset
|
168 |
22863
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
169 class |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
170 image_region |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
171 { |
22863
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
172 public: |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
173 |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
174 image_region (const octave_scalar_map& options) |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
175 { |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
176 // FIXME: should we have better checking on the input map and values |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
177 // or is that expected to be done elsewhere? |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
178 |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
179 const Cell pixel_region = options.getfield ("region").cell_value (); |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
180 |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
181 // Subtract 1 to account for 0 indexing. |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
182 |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
183 const Range rows = get_region_range (pixel_region (0)); |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
184 const Range cols = get_region_range (pixel_region (1)); |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
185 |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
186 m_row_start = rows.base () - 1; |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
187 m_col_start = cols.base () - 1; |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
188 m_row_end = rows.max () - 1; |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
189 m_col_end = cols.max () - 1; |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
190 |
22863
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
191 m_row_cache = m_row_end - m_row_start + 1; |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
192 m_col_cache = m_col_end - m_col_start + 1; |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
193 |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
194 m_row_shift = m_col_cache * rows.inc (); |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
195 m_col_shift = m_col_cache * (m_row_cache + rows.inc () - 1) - cols.inc (); |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
196 |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
197 m_row_out = rows.numel (); |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
198 m_col_out = cols.numel (); |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
199 } |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
200 |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
201 // Default copy, move, and delete methods are all OK for this class. |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
202 |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
203 image_region (const image_region&) = default; |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
204 image_region (image_region&&) = default; |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
205 |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
206 image_region& operator = (const image_region&) = default; |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
207 image_region& operator = (image_region&&) = default; |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
208 |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
209 ~image_region (void) = default; |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
210 |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
211 octave_idx_type row_start (void) const { return m_row_start; } |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
212 octave_idx_type col_start (void) const { return m_col_start; } |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
213 octave_idx_type row_end (void) const { return m_row_end; } |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
214 octave_idx_type col_end (void) const { return m_col_end; } |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
215 |
17138
96526baf7423
Fix reading of images using PixelRegion with ranges ending before the limit.
Carnë Draug <carandraug@octave.org>
parents:
17134
diff
changeset
|
216 // Length of the area to load into the Image Pixel Cache. We use max and |
96526baf7423
Fix reading of images using PixelRegion with ranges ending before the limit.
Carnë Draug <carandraug@octave.org>
parents:
17134
diff
changeset
|
217 // min to account for cases where last element of range is the range limit. |
22863
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
218 |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
219 octave_idx_type row_cache (void) const { return m_row_cache; } |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
220 octave_idx_type col_cache (void) const { return m_col_cache; } |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
221 |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
222 // How much we have to shift in the memory when doing the loops. |
22863
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
223 |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
224 octave_idx_type row_shift (void) const { return m_row_shift; } |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
225 octave_idx_type col_shift (void) const { return m_col_shift; } |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
226 |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
227 // The actual height and width of the output image |
22863
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
228 |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
229 octave_idx_type row_out (void) const { return m_row_out; } |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
230 octave_idx_type col_out (void) const { return m_col_out; } |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
231 |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
232 private: |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
233 |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
234 octave_idx_type m_row_start; |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
235 octave_idx_type m_col_start; |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
236 octave_idx_type m_row_end; |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
237 octave_idx_type m_col_end; |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
238 |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
239 // Length of the area to load into the Image Pixel Cache. We use max and |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
240 // min to account for cases where last element of range is the range limit. |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
241 |
22863
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
242 octave_idx_type m_row_cache; |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
243 octave_idx_type m_col_cache; |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
244 |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
245 // How much we have to shift in the memory when doing the loops. |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
246 |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
247 octave_idx_type m_row_shift; |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
248 octave_idx_type m_col_shift; |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
249 |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
250 // The actual height and width of the output image |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
251 |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
252 octave_idx_type m_row_out; |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
253 octave_idx_type m_col_out; |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
254 }; |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
255 |
17350 | 256 static octave_value_list |
257 read_maps (Magick::Image& img) | |
258 { | |
259 // can't call colorMapSize on const Magick::Image | |
260 const octave_idx_type mapsize = img.colorMapSize (); | |
261 Matrix cmap = Matrix (mapsize, 3); // colormap | |
17372
63b53ea33a8b
imread: fix returning multiple variables.
Carnë Draug <carandraug@octave.org>
parents:
17362
diff
changeset
|
262 ColumnVector amap = ColumnVector (mapsize); // alpha map |
17350 | 263 for (octave_idx_type i = 0; i < mapsize; i++) |
264 { | |
265 const Magick::ColorRGB c = img.colorMap (i); | |
266 cmap(i,0) = c.red (); | |
267 cmap(i,1) = c.green (); | |
268 cmap(i,2) = c.blue (); | |
17372
63b53ea33a8b
imread: fix returning multiple variables.
Carnë Draug <carandraug@octave.org>
parents:
17362
diff
changeset
|
269 amap(i) = c.alpha (); |
17350 | 270 } |
271 octave_value_list maps; | |
272 maps(0) = cmap; | |
273 maps(1) = amap; | |
274 return maps; | |
275 } | |
276 | |
21139
538b57866b90
consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents:
21100
diff
changeset
|
277 template <typename T> |
16996
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
278 static octave_value_list |
17350 | 279 read_indexed_images (const std::vector<Magick::Image>& imvec, |
16996
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
280 const Array<octave_idx_type>& frameidx, |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
281 const octave_idx_type& nargout, |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
282 const octave_scalar_map& options) |
7925
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
283 { |
16996
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
284 typedef typename T::element_type P; |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
285 |
21358
f2ae78f5827f
Resolve compile time issues, when octave_idx_type is long.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21308
diff
changeset
|
286 octave_value_list retval (1); |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
287 |
22863
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
288 image_region region (options); |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
289 |
20232
a9574e3c6e9e
Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents:
20228
diff
changeset
|
290 const octave_idx_type nFrames = frameidx.numel (); |
22863
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
291 const octave_idx_type nRows = region.row_out (); |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
292 const octave_idx_type nCols = region.col_out (); |
8054 | 293 |
17240
d757c98636d8
Use first image to be read rather than first image in file to set defaults.
Carnë Draug <carandraug@octave.org>
parents:
17239
diff
changeset
|
294 // imvec has all of the pages of a file, even the ones we are not |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
295 // interested in. We will use the first image that we will be actually |
17240
d757c98636d8
Use first image to be read rather than first image in file to set defaults.
Carnë Draug <carandraug@octave.org>
parents:
17239
diff
changeset
|
296 // reading to get information about the image. |
d757c98636d8
Use first image to be read rather than first image in file to set defaults.
Carnë Draug <carandraug@octave.org>
parents:
17239
diff
changeset
|
297 const octave_idx_type def_elem = frameidx(0); |
d757c98636d8
Use first image to be read rather than first image in file to set defaults.
Carnë Draug <carandraug@octave.org>
parents:
17239
diff
changeset
|
298 |
16996
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
299 T img = T (dim_vector (nRows, nCols, 1, nFrames)); |
23449
c763214a8260
maint: Use convention 'int *x' for naming pointers.
Rik <rik@octave.org>
parents:
23416
diff
changeset
|
300 P *img_fvec = img.fortran_vec (); |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
301 |
22863
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
302 const octave_idx_type row_start = region.row_start (); |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
303 const octave_idx_type col_start = region.col_start (); |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
304 const octave_idx_type row_shift = region.row_shift (); |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
305 const octave_idx_type col_shift = region.col_shift (); |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
306 const octave_idx_type row_cache = region.row_cache (); |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
307 const octave_idx_type col_cache = region.col_cache (); |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
308 |
16996
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
309 // When reading PixelPackets from the Image Pixel Cache, they come in |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
310 // row major order. So we keep moving back and forth there so we can |
16996
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
311 // write the image in column major order. |
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
312 octave_idx_type idx = 0; |
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
313 for (octave_idx_type frame = 0; frame < nFrames; frame++) |
7925
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
314 { |
22860
0b1e25cc4457
eliminate use of OCTAVE_QUIT macro in C++ sources
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
315 octave_quit (); |
0b1e25cc4457
eliminate use of OCTAVE_QUIT macro in C++ sources
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
316 |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
317 imvec[frameidx(frame)].getConstPixels (col_start, row_start, |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
318 col_cache, row_cache); |
16996
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
319 |
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
320 const Magick::IndexPacket *pix |
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
321 = imvec[frameidx(frame)].getConstIndexes (); |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
322 |
16996
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
323 for (octave_idx_type col = 0; col < nCols; col++) |
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
324 { |
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
325 for (octave_idx_type row = 0; row < nRows; row++) |
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
326 { |
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
327 img_fvec[idx++] = static_cast<P> (*pix); |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
328 pix += row_shift; |
16996
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
329 } |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
330 pix -= col_shift; |
16996
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
331 } |
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
332 } |
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
333 retval(0) = octave_value (img); |
7933 | 334 |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
335 // Only bother reading the colormap if it was requested as output. |
16996
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
336 if (nargout > 1) |
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
337 { |
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
338 // In theory, it should be possible for each frame of an image to |
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
339 // have different colormaps but for Matlab compatibility, we only |
17350 | 340 // return the colormap of the first frame. To obtain the colormaps |
341 // of different frames, one needs can either use imfinfo or a for | |
342 // loop around imread. | |
27277
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
26488
diff
changeset
|
343 const octave_value_list maps |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
26488
diff
changeset
|
344 = read_maps (const_cast<Magick::Image&> (imvec[frameidx(def_elem)])); |
10100
dd4d4b14b340
__magick_read__.cc: no need to explicitly call chop_trailing_singletons now
John W. Eaton <jwe@octave.org>
parents:
9575
diff
changeset
|
345 |
17350 | 346 retval(1) = maps(0); |
347 | |
348 // only interpret alpha channel if it exists and was requested as output | |
17240
d757c98636d8
Use first image to be read rather than first image in file to set defaults.
Carnë Draug <carandraug@octave.org>
parents:
17239
diff
changeset
|
349 if (imvec[def_elem].matte () && nargout >= 3) |
16996
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
350 { |
17350 | 351 const Matrix amap = maps(1).matrix_value (); |
23449
c763214a8260
maint: Use convention 'int *x' for naming pointers.
Rik <rik@octave.org>
parents:
23416
diff
changeset
|
352 const double *amap_fvec = amap.fortran_vec (); |
7933 | 353 |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
354 NDArray alpha (dim_vector (nRows, nCols, 1, nFrames)); |
23449
c763214a8260
maint: Use convention 'int *x' for naming pointers.
Rik <rik@octave.org>
parents:
23416
diff
changeset
|
355 double *alpha_fvec = alpha.fortran_vec (); |
7933 | 356 |
17350 | 357 // GraphicsMagick stores the alpha values inverted, i.e., |
358 // 1 for transparent and 0 for opaque so we fix that here. | |
359 const octave_idx_type nPixels = alpha.numel (); | |
16996
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
360 for (octave_idx_type pix = 0; pix < nPixels; pix++) |
17350 | 361 alpha_fvec[pix] = 1 - amap_fvec[static_cast<int> (img_fvec[3])]; |
362 | |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
363 retval(2) = alpha; |
16996
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
364 } |
7925
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
365 } |
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
366 |
16996
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
367 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
|
368 } |
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
369 |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
370 // This function is highly repetitive, a bunch of for loops that are |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
371 // very similar to account for different image types. They are different |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
372 // enough that trying to reduce the copy and paste would decrease its |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
373 // readability too much. |
21139
538b57866b90
consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents:
21100
diff
changeset
|
374 template <typename T> |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
375 octave_value_list |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
376 read_images (std::vector<Magick::Image>& imvec, |
17116
59acfe9209dd
Do not read alpha channel from image if output not requested.
Carnë Draug <carandraug@octave.org>
parents:
17110
diff
changeset
|
377 const Array<octave_idx_type>& frameidx, |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
378 const octave_idx_type& nargout, |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
379 const octave_scalar_map& options) |
7925
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
380 { |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
381 typedef typename T::element_type P; |
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
382 |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
383 octave_value_list retval (3, Matrix ()); |
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
384 |
22863
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
385 image_region region (options); |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
386 |
20232
a9574e3c6e9e
Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents:
20228
diff
changeset
|
387 const octave_idx_type nFrames = frameidx.numel (); |
22863
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
388 const octave_idx_type nRows = region.row_out (); |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
389 const octave_idx_type nCols = region.col_out (); |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
390 T img; |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
391 |
17240
d757c98636d8
Use first image to be read rather than first image in file to set defaults.
Carnë Draug <carandraug@octave.org>
parents:
17239
diff
changeset
|
392 // imvec has all of the pages of a file, even the ones we are not |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
393 // interested in. We will use the first image that we will be actually |
17240
d757c98636d8
Use first image to be read rather than first image in file to set defaults.
Carnë Draug <carandraug@octave.org>
parents:
17239
diff
changeset
|
394 // reading to get information about the image. |
d757c98636d8
Use first image to be read rather than first image in file to set defaults.
Carnë Draug <carandraug@octave.org>
parents:
17239
diff
changeset
|
395 const octave_idx_type def_elem = frameidx(0); |
d757c98636d8
Use first image to be read rather than first image in file to set defaults.
Carnë Draug <carandraug@octave.org>
parents:
17239
diff
changeset
|
396 |
22863
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
397 const octave_idx_type row_start = region.row_start (); |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
398 const octave_idx_type col_start = region.col_start (); |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
399 const octave_idx_type row_shift = region.row_shift (); |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
400 const octave_idx_type col_shift = region.col_shift (); |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
401 const octave_idx_type row_cache = region.row_cache (); |
f28e1f5d33a4
use simple class instead of std::set
John W. Eaton <jwe@octave.org>
parents:
22860
diff
changeset
|
402 const octave_idx_type col_cache = region.col_cache (); |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
403 |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
404 // GraphicsMagick (GM) keeps the image values in memory using whatever |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
405 // QuantumDepth it was built with independently of the original image |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
406 // bitdepth. Basically this means that if GM was built with quantum 16 |
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
407 // all values are scaled in the uint16 range. If the original image |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
408 // had an 8 bit depth, we need to rescale it for that range. |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
409 // However, if the image had a bitdepth of 32, then we will be returning |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
410 // a floating point image. In this case, the values need to be rescaled |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
411 // for the range [0 1] (this is what Matlab has documented on the page |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
412 // about image types but in some cases seems to be doing something else. |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
413 // See bug #39249). |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
414 // Finally, we must do the division ourselves (set a divisor) instead of |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
415 // using quantumOperator for the cases where we will be returning floating |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
416 // point and want things in the range [0 1]. This is the same reason why |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
417 // the divisor is of type double. |
17149
73a3c1580974
Correctly identify PNG image types (bug #32986, bug #36820 and bug #37689)
Carnë Draug <carandraug@octave.org>
parents:
17147
diff
changeset
|
418 // uint64_t is used in expression because default 32-bit value overflows |
73a3c1580974
Correctly identify PNG image types (bug #32986, bug #36820 and bug #37689)
Carnë Draug <carandraug@octave.org>
parents:
17147
diff
changeset
|
419 // when depth() is 32. |
21578
683a1beee538
maint: Use "FIXME:" for all code blocks needing further attention.
Rik <rik@octave.org>
parents:
21568
diff
changeset
|
420 // FIXME: in the next release of GraphicsMagick, MaxRGB should be replaced |
683a1beee538
maint: Use "FIXME:" for all code blocks needing further attention.
Rik <rik@octave.org>
parents:
21568
diff
changeset
|
421 // with QuantumRange since MaxRGB is already deprecated in ImageMagick. |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
422 double divisor; |
17240
d757c98636d8
Use first image to be read rather than first image in file to set defaults.
Carnë Draug <carandraug@octave.org>
parents:
17239
diff
changeset
|
423 if (imvec[def_elem].depth () == 32) |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
424 divisor = std::numeric_limits<uint32_t>::max (); |
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
425 else |
17240
d757c98636d8
Use first image to be read rather than first image in file to set defaults.
Carnë Draug <carandraug@octave.org>
parents:
17239
diff
changeset
|
426 divisor = MaxRGB / ((uint64_t (1) << imvec[def_elem].depth ()) - 1); |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
427 |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
428 // FIXME: this workaround should probably be fixed in GM by creating a |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
429 // new ImageType BilevelMatteType |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
430 // Despite what GM documentation claims, opacity is not only on the types |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
431 // with Matte on the name. It is possible that an image is completely |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
432 // black (1 color), and have a second channel set for transparency (2nd |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
433 // color). Its type will be bilevel since there is no BilevelMatte. The |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
434 // only way to check for this seems to be by checking matte (). |
17240
d757c98636d8
Use first image to be read rather than first image in file to set defaults.
Carnë Draug <carandraug@octave.org>
parents:
17239
diff
changeset
|
435 Magick::ImageType type = imvec[def_elem].type (); |
d757c98636d8
Use first image to be read rather than first image in file to set defaults.
Carnë Draug <carandraug@octave.org>
parents:
17239
diff
changeset
|
436 if (type == Magick::BilevelType && imvec[def_elem].matte ()) |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
437 type = Magick::GrayscaleMatteType; |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
438 |
17149
73a3c1580974
Correctly identify PNG image types (bug #32986, bug #36820 and bug #37689)
Carnë Draug <carandraug@octave.org>
parents:
17147
diff
changeset
|
439 // FIXME: ImageType is the type being used to represent the image in memory |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
440 // by GM. The real type may be different (see among others bug #36820). For |
17149
73a3c1580974
Correctly identify PNG image types (bug #32986, bug #36820 and bug #37689)
Carnë Draug <carandraug@octave.org>
parents:
17147
diff
changeset
|
441 // example, a png file where all channels are equal may report being |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
442 // grayscale or even bilevel. But we must always return the real image in |
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
443 // file. In some cases, the original image attributes are stored in the |
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
444 // attributes but this is undocumented. This should be fixed in GM so that |
17149
73a3c1580974
Correctly identify PNG image types (bug #32986, bug #36820 and bug #37689)
Carnë Draug <carandraug@octave.org>
parents:
17147
diff
changeset
|
445 // a method such as original_type returns an actual Magick::ImageType |
73a3c1580974
Correctly identify PNG image types (bug #32986, bug #36820 and bug #37689)
Carnë Draug <carandraug@octave.org>
parents:
17147
diff
changeset
|
446 if (imvec[0].magick () == "PNG") |
73a3c1580974
Correctly identify PNG image types (bug #32986, bug #36820 and bug #37689)
Carnë Draug <carandraug@octave.org>
parents:
17147
diff
changeset
|
447 { |
73a3c1580974
Correctly identify PNG image types (bug #32986, bug #36820 and bug #37689)
Carnë Draug <carandraug@octave.org>
parents:
17147
diff
changeset
|
448 // These values come from libpng, not GM: |
73a3c1580974
Correctly identify PNG image types (bug #32986, bug #36820 and bug #37689)
Carnë Draug <carandraug@octave.org>
parents:
17147
diff
changeset
|
449 // Grayscale = 0 |
73a3c1580974
Correctly identify PNG image types (bug #32986, bug #36820 and bug #37689)
Carnë Draug <carandraug@octave.org>
parents:
17147
diff
changeset
|
450 // Palette = 2 + 1 |
73a3c1580974
Correctly identify PNG image types (bug #32986, bug #36820 and bug #37689)
Carnë Draug <carandraug@octave.org>
parents:
17147
diff
changeset
|
451 // RGB = 2 |
73a3c1580974
Correctly identify PNG image types (bug #32986, bug #36820 and bug #37689)
Carnë Draug <carandraug@octave.org>
parents:
17147
diff
changeset
|
452 // RGB + Alpha = 2 + 4 |
73a3c1580974
Correctly identify PNG image types (bug #32986, bug #36820 and bug #37689)
Carnë Draug <carandraug@octave.org>
parents:
17147
diff
changeset
|
453 // Grayscale + Alpha = 4 |
73a3c1580974
Correctly identify PNG image types (bug #32986, bug #36820 and bug #37689)
Carnë Draug <carandraug@octave.org>
parents:
17147
diff
changeset
|
454 // We won't bother with case 3 (palette) since those should be |
73a3c1580974
Correctly identify PNG image types (bug #32986, bug #36820 and bug #37689)
Carnë Draug <carandraug@octave.org>
parents:
17147
diff
changeset
|
455 // read by the function to read indexed images |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
456 const std::string type_str |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
457 = imvec[0].attribute ("PNG:IHDR.color-type-orig"); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
458 |
17149
73a3c1580974
Correctly identify PNG image types (bug #32986, bug #36820 and bug #37689)
Carnë Draug <carandraug@octave.org>
parents:
17147
diff
changeset
|
459 if (type_str == "0") |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
460 type = Magick::GrayscaleType; |
17149
73a3c1580974
Correctly identify PNG image types (bug #32986, bug #36820 and bug #37689)
Carnë Draug <carandraug@octave.org>
parents:
17147
diff
changeset
|
461 else if (type_str == "2") |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
462 type = Magick::TrueColorType; |
17149
73a3c1580974
Correctly identify PNG image types (bug #32986, bug #36820 and bug #37689)
Carnë Draug <carandraug@octave.org>
parents:
17147
diff
changeset
|
463 else if (type_str == "6") |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
464 type = Magick::TrueColorMatteType; |
17149
73a3c1580974
Correctly identify PNG image types (bug #32986, bug #36820 and bug #37689)
Carnë Draug <carandraug@octave.org>
parents:
17147
diff
changeset
|
465 else if (type_str == "4") |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
466 type = Magick::GrayscaleMatteType; |
17239
d6467d6dfb83
Fix reading of alpha channel stored as tRNS chunk in PNG files.
Carnë Draug <carandraug@octave.org>
parents:
17235
diff
changeset
|
467 // Color types 0, 2, and 3 can also have alpha channel, conveyed |
d6467d6dfb83
Fix reading of alpha channel stored as tRNS chunk in PNG files.
Carnë Draug <carandraug@octave.org>
parents:
17235
diff
changeset
|
468 // via the "tRNS" chunk. For 0 and 2, it's limited to GIF-style |
d6467d6dfb83
Fix reading of alpha channel stored as tRNS chunk in PNG files.
Carnë Draug <carandraug@octave.org>
parents:
17235
diff
changeset
|
469 // binary transparency, while 3 can have any level of alpha per |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
470 // palette entry. We thus must check matte() to see if the image |
17239
d6467d6dfb83
Fix reading of alpha channel stored as tRNS chunk in PNG files.
Carnë Draug <carandraug@octave.org>
parents:
17235
diff
changeset
|
471 // really doesn't have an alpha channel. |
d6467d6dfb83
Fix reading of alpha channel stored as tRNS chunk in PNG files.
Carnë Draug <carandraug@octave.org>
parents:
17235
diff
changeset
|
472 if (imvec[0].matte ()) |
d6467d6dfb83
Fix reading of alpha channel stored as tRNS chunk in PNG files.
Carnë Draug <carandraug@octave.org>
parents:
17235
diff
changeset
|
473 { |
d6467d6dfb83
Fix reading of alpha channel stored as tRNS chunk in PNG files.
Carnë Draug <carandraug@octave.org>
parents:
17235
diff
changeset
|
474 if (type == Magick::GrayscaleType) |
d6467d6dfb83
Fix reading of alpha channel stored as tRNS chunk in PNG files.
Carnë Draug <carandraug@octave.org>
parents:
17235
diff
changeset
|
475 type = Magick::GrayscaleMatteType; |
d6467d6dfb83
Fix reading of alpha channel stored as tRNS chunk in PNG files.
Carnë Draug <carandraug@octave.org>
parents:
17235
diff
changeset
|
476 else if (type == Magick::TrueColorType) |
d6467d6dfb83
Fix reading of alpha channel stored as tRNS chunk in PNG files.
Carnë Draug <carandraug@octave.org>
parents:
17235
diff
changeset
|
477 type = Magick::TrueColorMatteType; |
d6467d6dfb83
Fix reading of alpha channel stored as tRNS chunk in PNG files.
Carnë Draug <carandraug@octave.org>
parents:
17235
diff
changeset
|
478 } |
17149
73a3c1580974
Correctly identify PNG image types (bug #32986, bug #36820 and bug #37689)
Carnë Draug <carandraug@octave.org>
parents:
17147
diff
changeset
|
479 } |
73a3c1580974
Correctly identify PNG image types (bug #32986, bug #36820 and bug #37689)
Carnë Draug <carandraug@octave.org>
parents:
17147
diff
changeset
|
480 |
17116
59acfe9209dd
Do not read alpha channel from image if output not requested.
Carnë Draug <carandraug@octave.org>
parents:
17110
diff
changeset
|
481 // If the alpha channel was not requested, treat images as if |
59acfe9209dd
Do not read alpha channel from image if output not requested.
Carnë Draug <carandraug@octave.org>
parents:
17110
diff
changeset
|
482 // it doesn't exist. |
59acfe9209dd
Do not read alpha channel from image if output not requested.
Carnë Draug <carandraug@octave.org>
parents:
17110
diff
changeset
|
483 if (nargout < 3) |
59acfe9209dd
Do not read alpha channel from image if output not requested.
Carnë Draug <carandraug@octave.org>
parents:
17110
diff
changeset
|
484 { |
59acfe9209dd
Do not read alpha channel from image if output not requested.
Carnë Draug <carandraug@octave.org>
parents:
17110
diff
changeset
|
485 switch (type) |
59acfe9209dd
Do not read alpha channel from image if output not requested.
Carnë Draug <carandraug@octave.org>
parents:
17110
diff
changeset
|
486 { |
59acfe9209dd
Do not read alpha channel from image if output not requested.
Carnë Draug <carandraug@octave.org>
parents:
17110
diff
changeset
|
487 case Magick::GrayscaleMatteType: |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
488 type = Magick::GrayscaleType; |
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
489 break; |
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
490 |
17116
59acfe9209dd
Do not read alpha channel from image if output not requested.
Carnë Draug <carandraug@octave.org>
parents:
17110
diff
changeset
|
491 case Magick::PaletteMatteType: |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
492 type = Magick::PaletteType; |
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
493 break; |
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
494 |
17116
59acfe9209dd
Do not read alpha channel from image if output not requested.
Carnë Draug <carandraug@octave.org>
parents:
17110
diff
changeset
|
495 case Magick::TrueColorMatteType: |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
496 type = Magick::TrueColorType; |
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
497 break; |
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
498 |
17116
59acfe9209dd
Do not read alpha channel from image if output not requested.
Carnë Draug <carandraug@octave.org>
parents:
17110
diff
changeset
|
499 case Magick::ColorSeparationMatteType: |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
500 type = Magick::ColorSeparationType; |
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
501 break; |
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
502 |
17116
59acfe9209dd
Do not read alpha channel from image if output not requested.
Carnë Draug <carandraug@octave.org>
parents:
17110
diff
changeset
|
503 default: |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
504 // Do nothing other than silencing warnings about enumeration |
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
505 // values not being handled in switch. |
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
506 ; |
17116
59acfe9209dd
Do not read alpha channel from image if output not requested.
Carnë Draug <carandraug@octave.org>
parents:
17110
diff
changeset
|
507 } |
59acfe9209dd
Do not read alpha channel from image if output not requested.
Carnë Draug <carandraug@octave.org>
parents:
17110
diff
changeset
|
508 } |
59acfe9209dd
Do not read alpha channel from image if output not requested.
Carnë Draug <carandraug@octave.org>
parents:
17110
diff
changeset
|
509 |
21567
3d25f9f4a62b
maint: Eliminate Britishicisms in the code.
Rik <rik@octave.org>
parents:
21489
diff
changeset
|
510 const octave_idx_type color_stride = nRows * nCols; |
7925
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
511 switch (type) |
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
512 { |
16984
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
513 case Magick::BilevelType: // Monochrome bi-level image |
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
514 case Magick::GrayscaleType: // Grayscale image |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
515 { |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
516 img = T (dim_vector (nRows, nCols, 1, nFrames)); |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
517 P *img_fvec = img.fortran_vec (); |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
518 |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
519 octave_idx_type idx = 0; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
520 for (octave_idx_type frame = 0; frame < nFrames; frame++) |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
521 { |
22860
0b1e25cc4457
eliminate use of OCTAVE_QUIT macro in C++ sources
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
522 octave_quit (); |
0b1e25cc4457
eliminate use of OCTAVE_QUIT macro in C++ sources
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
523 |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
524 const Magick::PixelPacket *pix |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
525 = imvec[frameidx(frame)].getConstPixels (col_start, row_start, |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
526 col_cache, row_cache); |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
527 |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
528 for (octave_idx_type col = 0; col < nCols; col++) |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
529 { |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
530 for (octave_idx_type row = 0; row < nRows; row++) |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
531 { |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
532 img_fvec[idx++] = pix->red / divisor; |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
533 pix += row_shift; |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
534 } |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
535 pix -= col_shift; |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
536 } |
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
537 } |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
538 break; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
539 } |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
540 |
16984
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
541 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
|
542 { |
21568
3d60ed163b70
maint: Eliminate bad spacing around '='.
Rik <rik@octave.org>
parents:
21567
diff
changeset
|
543 img = T (dim_vector (nRows, nCols, 1, nFrames)); |
3d60ed163b70
maint: Eliminate bad spacing around '='.
Rik <rik@octave.org>
parents:
21567
diff
changeset
|
544 T alpha (dim_vector (nRows, nCols, 1, nFrames)); |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
545 P *img_fvec = img.fortran_vec (); |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
546 P *a_fvec = alpha.fortran_vec (); |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
547 |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
548 octave_idx_type idx = 0; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
549 for (octave_idx_type frame = 0; frame < nFrames; frame++) |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
550 { |
22860
0b1e25cc4457
eliminate use of OCTAVE_QUIT macro in C++ sources
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
551 octave_quit (); |
0b1e25cc4457
eliminate use of OCTAVE_QUIT macro in C++ sources
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
552 |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
553 const Magick::PixelPacket *pix |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
554 = imvec[frameidx(frame)].getConstPixels (col_start, row_start, |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
555 col_cache, row_cache); |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
556 |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
557 for (octave_idx_type col = 0; col < nCols; col++) |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
558 { |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
559 for (octave_idx_type row = 0; row < nRows; row++) |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
560 { |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
561 img_fvec[idx] = pix->red / divisor; |
17147
35a1bd41aa02
Fix reading of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17139
diff
changeset
|
562 a_fvec[idx] = (MaxRGB - pix->opacity) / divisor; |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
563 pix += row_shift; |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
564 idx++; |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
565 } |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
566 pix -= col_shift; |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
567 } |
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
568 } |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
569 retval(2) = alpha; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
570 break; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
571 } |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
572 |
16984
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
573 case Magick::PaletteType: // Indexed color (palette) image |
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
574 case Magick::TrueColorType: // Truecolor image |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
575 { |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
576 img = T (dim_vector (nRows, nCols, 3, nFrames)); |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
577 P *img_fvec = img.fortran_vec (); |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
578 |
21567
3d25f9f4a62b
maint: Eliminate Britishicisms in the code.
Rik <rik@octave.org>
parents:
21489
diff
changeset
|
579 const octave_idx_type frame_stride = color_stride * 3; |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
580 for (octave_idx_type frame = 0; frame < nFrames; frame++) |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
581 { |
22860
0b1e25cc4457
eliminate use of OCTAVE_QUIT macro in C++ sources
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
582 octave_quit (); |
0b1e25cc4457
eliminate use of OCTAVE_QUIT macro in C++ sources
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
583 |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
584 const Magick::PixelPacket *pix |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
585 = imvec[frameidx(frame)].getConstPixels (col_start, row_start, |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
586 col_cache, row_cache); |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
587 |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
588 octave_idx_type idx = 0; |
21568
3d60ed163b70
maint: Eliminate bad spacing around '='.
Rik <rik@octave.org>
parents:
21567
diff
changeset
|
589 P *rbuf = img_fvec; |
3d60ed163b70
maint: Eliminate bad spacing around '='.
Rik <rik@octave.org>
parents:
21567
diff
changeset
|
590 P *gbuf = img_fvec + color_stride; |
3d60ed163b70
maint: Eliminate bad spacing around '='.
Rik <rik@octave.org>
parents:
21567
diff
changeset
|
591 P *bbuf = img_fvec + color_stride * 2; |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
592 |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
593 for (octave_idx_type col = 0; col < nCols; col++) |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
594 { |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
595 for (octave_idx_type row = 0; row < nRows; row++) |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
596 { |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
597 rbuf[idx] = pix->red / divisor; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
598 gbuf[idx] = pix->green / divisor; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
599 bbuf[idx] = pix->blue / divisor; |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
600 pix += row_shift; |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
601 idx++; |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
602 } |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
603 pix -= col_shift; |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
604 } |
18542
30aa4e85f8d5
Fix writing and reading of multipage images.
Carnë Draug <carandraug@octave.org>
parents:
18149
diff
changeset
|
605 img_fvec += frame_stride; |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
606 } |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
607 break; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
608 } |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
609 |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
610 case Magick::PaletteMatteType: // Indexed color image with opacity |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
611 case Magick::TrueColorMatteType: // Truecolor image with opacity |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
612 { |
21568
3d60ed163b70
maint: Eliminate bad spacing around '='.
Rik <rik@octave.org>
parents:
21567
diff
changeset
|
613 img = T (dim_vector (nRows, nCols, 3, nFrames)); |
3d60ed163b70
maint: Eliminate bad spacing around '='.
Rik <rik@octave.org>
parents:
21567
diff
changeset
|
614 T alpha (dim_vector (nRows, nCols, 1, nFrames)); |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
615 P *img_fvec = img.fortran_vec (); |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
616 P *a_fvec = alpha.fortran_vec (); |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
617 |
21567
3d25f9f4a62b
maint: Eliminate Britishicisms in the code.
Rik <rik@octave.org>
parents:
21489
diff
changeset
|
618 const octave_idx_type frame_stride = color_stride * 3; |
18542
30aa4e85f8d5
Fix writing and reading of multipage images.
Carnë Draug <carandraug@octave.org>
parents:
18149
diff
changeset
|
619 |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
620 // Unlike the index for the other channels, this one won't need |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
621 // to be reset on each frame since it's a separate matrix. |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
622 octave_idx_type a_idx = 0; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
623 for (octave_idx_type frame = 0; frame < nFrames; frame++) |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
624 { |
22860
0b1e25cc4457
eliminate use of OCTAVE_QUIT macro in C++ sources
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
625 octave_quit (); |
0b1e25cc4457
eliminate use of OCTAVE_QUIT macro in C++ sources
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
626 |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
627 const Magick::PixelPacket *pix |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
628 = imvec[frameidx(frame)].getConstPixels (col_start, row_start, |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
629 col_cache, row_cache); |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
630 |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
631 octave_idx_type idx = 0; |
21568
3d60ed163b70
maint: Eliminate bad spacing around '='.
Rik <rik@octave.org>
parents:
21567
diff
changeset
|
632 P *rbuf = img_fvec; |
3d60ed163b70
maint: Eliminate bad spacing around '='.
Rik <rik@octave.org>
parents:
21567
diff
changeset
|
633 P *gbuf = img_fvec + color_stride; |
3d60ed163b70
maint: Eliminate bad spacing around '='.
Rik <rik@octave.org>
parents:
21567
diff
changeset
|
634 P *bbuf = img_fvec + color_stride * 2; |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
635 |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
636 for (octave_idx_type col = 0; col < nCols; col++) |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
637 { |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
638 for (octave_idx_type row = 0; row < nRows; row++) |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
639 { |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
640 rbuf[idx] = pix->red / divisor; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
641 gbuf[idx] = pix->green / divisor; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
642 bbuf[idx] = pix->blue / divisor; |
17147
35a1bd41aa02
Fix reading of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17139
diff
changeset
|
643 a_fvec[a_idx++] = (MaxRGB - pix->opacity) / divisor; |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
644 pix += row_shift; |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
645 idx++; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
646 } |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
647 pix -= col_shift; |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
648 } |
18542
30aa4e85f8d5
Fix writing and reading of multipage images.
Carnë Draug <carandraug@octave.org>
parents:
18149
diff
changeset
|
649 img_fvec += frame_stride; |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
650 } |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
651 retval(2) = alpha; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
652 break; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
653 } |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
654 |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
655 case Magick::ColorSeparationType: // Cyan/Magenta/Yellow/Black (CMYK) image |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
656 { |
21568
3d60ed163b70
maint: Eliminate bad spacing around '='.
Rik <rik@octave.org>
parents:
21567
diff
changeset
|
657 img = T (dim_vector (nRows, nCols, 4, nFrames)); |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
658 P *img_fvec = img.fortran_vec (); |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
659 |
21567
3d25f9f4a62b
maint: Eliminate Britishicisms in the code.
Rik <rik@octave.org>
parents:
21489
diff
changeset
|
660 const octave_idx_type frame_stride = color_stride * 4; |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
661 for (octave_idx_type frame = 0; frame < nFrames; frame++) |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
662 { |
22860
0b1e25cc4457
eliminate use of OCTAVE_QUIT macro in C++ sources
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
663 octave_quit (); |
0b1e25cc4457
eliminate use of OCTAVE_QUIT macro in C++ sources
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
664 |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
665 const Magick::PixelPacket *pix |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
666 = imvec[frameidx(frame)].getConstPixels (col_start, row_start, |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
667 col_cache, row_cache); |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
668 |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
669 octave_idx_type idx = 0; |
21568
3d60ed163b70
maint: Eliminate bad spacing around '='.
Rik <rik@octave.org>
parents:
21567
diff
changeset
|
670 P *cbuf = img_fvec; |
3d60ed163b70
maint: Eliminate bad spacing around '='.
Rik <rik@octave.org>
parents:
21567
diff
changeset
|
671 P *mbuf = img_fvec + color_stride; |
3d60ed163b70
maint: Eliminate bad spacing around '='.
Rik <rik@octave.org>
parents:
21567
diff
changeset
|
672 P *ybuf = img_fvec + color_stride * 2; |
3d60ed163b70
maint: Eliminate bad spacing around '='.
Rik <rik@octave.org>
parents:
21567
diff
changeset
|
673 P *kbuf = img_fvec + color_stride * 3; |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
674 |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
675 for (octave_idx_type col = 0; col < nCols; col++) |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
676 { |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
677 for (octave_idx_type row = 0; row < nRows; row++) |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
678 { |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
679 cbuf[idx] = pix->red / divisor; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
680 mbuf[idx] = pix->green / divisor; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
681 ybuf[idx] = pix->blue / divisor; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
682 kbuf[idx] = pix->opacity / divisor; |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
683 pix += row_shift; |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
684 idx++; |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
685 } |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
686 pix -= col_shift; |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
687 } |
18542
30aa4e85f8d5
Fix writing and reading of multipage images.
Carnë Draug <carandraug@octave.org>
parents:
18149
diff
changeset
|
688 img_fvec += frame_stride; |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
689 } |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
690 break; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
691 } |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
692 |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
693 // Cyan, magenta, yellow, and black with alpha (opacity) channel |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
694 case Magick::ColorSeparationMatteType: |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
695 { |
21568
3d60ed163b70
maint: Eliminate bad spacing around '='.
Rik <rik@octave.org>
parents:
21567
diff
changeset
|
696 img = T (dim_vector (nRows, nCols, 4, nFrames)); |
3d60ed163b70
maint: Eliminate bad spacing around '='.
Rik <rik@octave.org>
parents:
21567
diff
changeset
|
697 T alpha (dim_vector (nRows, nCols, 1, nFrames)); |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
698 P *img_fvec = img.fortran_vec (); |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
699 P *a_fvec = alpha.fortran_vec (); |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
700 |
21567
3d25f9f4a62b
maint: Eliminate Britishicisms in the code.
Rik <rik@octave.org>
parents:
21489
diff
changeset
|
701 const octave_idx_type frame_stride = color_stride * 4; |
18542
30aa4e85f8d5
Fix writing and reading of multipage images.
Carnë Draug <carandraug@octave.org>
parents:
18149
diff
changeset
|
702 |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
703 // Unlike the index for the other channels, this one won't need |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
704 // to be reset on each frame since it's a separate matrix. |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
705 octave_idx_type a_idx = 0; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
706 for (octave_idx_type frame = 0; frame < nFrames; frame++) |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
707 { |
22860
0b1e25cc4457
eliminate use of OCTAVE_QUIT macro in C++ sources
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
708 octave_quit (); |
0b1e25cc4457
eliminate use of OCTAVE_QUIT macro in C++ sources
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
709 |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
710 const Magick::PixelPacket *pix |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
711 = imvec[frameidx(frame)].getConstPixels (col_start, row_start, |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
712 col_cache, row_cache); |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
713 // Note that for CMYKColorspace + matte (CMYKA), the opacity is |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
714 // stored in the assocated IndexPacket. |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
715 const Magick::IndexPacket *apix |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
716 = imvec[frameidx(frame)].getConstIndexes (); |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
717 |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
718 octave_idx_type idx = 0; |
21568
3d60ed163b70
maint: Eliminate bad spacing around '='.
Rik <rik@octave.org>
parents:
21567
diff
changeset
|
719 P *cbuf = img_fvec; |
3d60ed163b70
maint: Eliminate bad spacing around '='.
Rik <rik@octave.org>
parents:
21567
diff
changeset
|
720 P *mbuf = img_fvec + color_stride; |
3d60ed163b70
maint: Eliminate bad spacing around '='.
Rik <rik@octave.org>
parents:
21567
diff
changeset
|
721 P *ybuf = img_fvec + color_stride * 2; |
3d60ed163b70
maint: Eliminate bad spacing around '='.
Rik <rik@octave.org>
parents:
21567
diff
changeset
|
722 P *kbuf = img_fvec + color_stride * 3; |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
723 |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
724 for (octave_idx_type col = 0; col < nCols; col++) |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
725 { |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
726 for (octave_idx_type row = 0; row < nRows; row++) |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
727 { |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
728 cbuf[idx] = pix->red / divisor; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
729 mbuf[idx] = pix->green / divisor; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
730 ybuf[idx] = pix->blue / divisor; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
731 kbuf[idx] = pix->opacity / divisor; |
17147
35a1bd41aa02
Fix reading of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17139
diff
changeset
|
732 a_fvec[a_idx++] = (MaxRGB - *apix) / divisor; |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
733 pix += row_shift; |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
734 idx++; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
735 } |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
736 pix -= col_shift; |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
737 } |
18542
30aa4e85f8d5
Fix writing and reading of multipage images.
Carnë Draug <carandraug@octave.org>
parents:
18149
diff
changeset
|
738 img_fvec += frame_stride; |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
739 } |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
740 retval(2) = alpha; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
741 break; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
742 } |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
743 |
7925
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
744 default: |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
745 error ("__magick_read__: unknown Magick++ 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
|
746 } |
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
747 |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
748 retval(0) = img; |
20869
69b37757030c
2015 Code Sprint: __magick_read__.cc: use ovl ().
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
749 |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
750 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
|
751 } |
7974 | 752 |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
753 // Read a file into vector of image objects. |
16988
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
754 void static |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
755 read_file (const std::string& filename, std::vector<Magick::Image>& imvec) |
16988
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 try |
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 Magick::readImages (&imvec, filename); |
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 catch (Magick::Warning& w) |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
762 { |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
763 warning ("Magick++ warning: %s", w.what ()); |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
764 } |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
765 catch (Magick::Exception& e) |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
766 { |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
767 error ("Magick++ exception: %s", e.what ()); |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
768 } |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
769 } |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
770 |
10947
dc74ce93cfc4
initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
771 static void |
dc74ce93cfc4
initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
772 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
|
773 { |
10390
ad0b54ae206a
__magick_read__ (F__magick_read__): call Magick::InitializeMagick
John W. Eaton <jwe@octave.org>
parents:
10350
diff
changeset
|
774 static bool initialized = false; |
ad0b54ae206a
__magick_read__ (F__magick_read__): call Magick::InitializeMagick
John W. Eaton <jwe@octave.org>
parents:
10350
diff
changeset
|
775 |
ad0b54ae206a
__magick_read__ (F__magick_read__): call Magick::InitializeMagick
John W. Eaton <jwe@octave.org>
parents:
10350
diff
changeset
|
776 if (! initialized) |
ad0b54ae206a
__magick_read__ (F__magick_read__): call Magick::InitializeMagick
John W. Eaton <jwe@octave.org>
parents:
10350
diff
changeset
|
777 { |
16988
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
778 // Save locale as GraphicsMagick might change this (fixed in |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
779 // GraphicsMagick since version 1.3.13 released on December 24, 2011) |
23457
21baad6b35c4
maint: Use C++11 nullptr rather than 0 or NULL when possible.
Rik <rik@octave.org>
parents:
23450
diff
changeset
|
780 const char *static_locale = setlocale (LC_ALL, nullptr); |
26488
72e0a106d956
__magick_read__.cc: Fix static analyzer detected issues (bug #55347).
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
781 const std::string locale = (static_locale ? static_locale : ""); |
10739
d27bd2f74137
src/DLD_FUNCTIONS/__magick_read__.cc: restore locale after GraphicsMagick initialisation
Soren Hauberg <hauberg@gmail.com>
parents:
10390
diff
changeset
|
782 |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
783 const std::string program_name |
21732
6a1eded90355
use namespace for system env class
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
784 = octave::sys::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
|
785 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
|
786 |
10739
d27bd2f74137
src/DLD_FUNCTIONS/__magick_read__.cc: restore locale after GraphicsMagick initialisation
Soren Hauberg <hauberg@gmail.com>
parents:
10390
diff
changeset
|
787 // 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
|
788 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
|
789 |
20729
131b4af8b5d8
Only warn of Magick quantum depth if less than 16 instead of 32.
Carnë Draug <carandraug@octave.org>
parents:
20704
diff
changeset
|
790 // Why should we give a warning? |
131b4af8b5d8
Only warn of Magick quantum depth if less than 16 instead of 32.
Carnë Draug <carandraug@octave.org>
parents:
20704
diff
changeset
|
791 // Magick does not tell us the real bitdepth of the image in file. |
131b4af8b5d8
Only warn of Magick quantum depth if less than 16 instead of 32.
Carnë Draug <carandraug@octave.org>
parents:
20704
diff
changeset
|
792 // The best we can have is the minimum between the bitdepth of the |
131b4af8b5d8
Only warn of Magick quantum depth if less than 16 instead of 32.
Carnë Draug <carandraug@octave.org>
parents:
20704
diff
changeset
|
793 // file and the quantum depth. So we never know if the file will |
131b4af8b5d8
Only warn of Magick quantum depth if less than 16 instead of 32.
Carnë Draug <carandraug@octave.org>
parents:
20704
diff
changeset
|
794 // actually be read correctly so we warn the user that it might |
131b4af8b5d8
Only warn of Magick quantum depth if less than 16 instead of 32.
Carnë Draug <carandraug@octave.org>
parents:
20704
diff
changeset
|
795 // be limited. |
131b4af8b5d8
Only warn of Magick quantum depth if less than 16 instead of 32.
Carnë Draug <carandraug@octave.org>
parents:
20704
diff
changeset
|
796 // |
131b4af8b5d8
Only warn of Magick quantum depth if less than 16 instead of 32.
Carnë Draug <carandraug@octave.org>
parents:
20704
diff
changeset
|
797 // Why we warn if < 16 instead of < 32 ? |
131b4af8b5d8
Only warn of Magick quantum depth if less than 16 instead of 32.
Carnë Draug <carandraug@octave.org>
parents:
20704
diff
changeset
|
798 // The reasons for < 32 is simply that it's the maximum quantum |
131b4af8b5d8
Only warn of Magick quantum depth if less than 16 instead of 32.
Carnë Draug <carandraug@octave.org>
parents:
20704
diff
changeset
|
799 // depth they support. However, very few people would actually |
131b4af8b5d8
Only warn of Magick quantum depth if less than 16 instead of 32.
Carnë Draug <carandraug@octave.org>
parents:
20704
diff
changeset
|
800 // need such support while being a major inconvenience to anyone |
131b4af8b5d8
Only warn of Magick quantum depth if less than 16 instead of 32.
Carnë Draug <carandraug@octave.org>
parents:
20704
diff
changeset
|
801 // else (8 bit images suddenly taking 4x more space will be |
131b4af8b5d8
Only warn of Magick quantum depth if less than 16 instead of 32.
Carnë Draug <carandraug@octave.org>
parents:
20704
diff
changeset
|
802 // critical for multi page images). It would also suggests that |
131b4af8b5d8
Only warn of Magick quantum depth if less than 16 instead of 32.
Carnë Draug <carandraug@octave.org>
parents:
20704
diff
changeset
|
803 // it covers all images which does not (it still does not support |
131b4af8b5d8
Only warn of Magick quantum depth if less than 16 instead of 32.
Carnë Draug <carandraug@octave.org>
parents:
20704
diff
changeset
|
804 // float point and signed integer images). |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
805 // On the other hand, 16bit images are much more common. If quantum |
20729
131b4af8b5d8
Only warn of Magick quantum depth if less than 16 instead of 32.
Carnë Draug <carandraug@octave.org>
parents:
20704
diff
changeset
|
806 // depth is 8, there's a good chance that we will be limited. It |
131b4af8b5d8
Only warn of Magick quantum depth if less than 16 instead of 32.
Carnë Draug <carandraug@octave.org>
parents:
20704
diff
changeset
|
807 // is also the GraphicsMagick recommended setting and the default |
131b4af8b5d8
Only warn of Magick quantum depth if less than 16 instead of 32.
Carnë Draug <carandraug@octave.org>
parents:
20704
diff
changeset
|
808 // for ImageMagick. |
131b4af8b5d8
Only warn of Magick quantum depth if less than 16 instead of 32.
Carnë Draug <carandraug@octave.org>
parents:
20704
diff
changeset
|
809 if (QuantumDepth < 16) |
23416
a40434df6f54
Rename warning ID GraphicsMagic-Quantum-Depth GraphicsMagick-Quantum-Depth.
Carnë Draug <carandraug@octave.org>
parents:
23220
diff
changeset
|
810 warning_with_id ("Octave:GraphicsMagick-Quantum-Depth", |
20219
b39ba1bbb759
Don't print unecessary backtrace for GraphicsMagick warning about pixel depth.
Rik <rik@octave.org>
parents:
20163
diff
changeset
|
811 "your version of %s limits images to %d bits per pixel\n", |
19885
fa68a3f7dd8a
__magick_read__.cc: add warning id for possibly low Magick quantum depth.
Carnë Draug <carandraug@octave.org>
parents:
19864
diff
changeset
|
812 MagickPackageName, QuantumDepth); |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
813 |
10390
ad0b54ae206a
__magick_read__ (F__magick_read__): call Magick::InitializeMagick
John W. Eaton <jwe@octave.org>
parents:
10350
diff
changeset
|
814 initialized = true; |
ad0b54ae206a
__magick_read__ (F__magick_read__): call Magick::InitializeMagick
John W. Eaton <jwe@octave.org>
parents:
10350
diff
changeset
|
815 } |
16983
4660d047955e
Make use of gripe_disabled_feature() for image IO functions.
Carnë Draug <carandraug+dev@gmail.com>
parents:
16944
diff
changeset
|
816 } |
21691
263d18409fdf
Eliminate unused variable warnings for conditionally compiled code.
John W. Eaton <jwe@octave.org>
parents:
21680
diff
changeset
|
817 |
10947
dc74ce93cfc4
initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
818 #endif |
dc74ce93cfc4
initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
819 |
21679
44f7664689f2
make __magick_read__ a built-in function (bug #41699)
John W. Eaton <jwe@octave.org>
parents:
21142
diff
changeset
|
820 DEFUN (__magick_read__, args, nargout, |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
821 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
822 @deftypefn {} {[@var{img}, @var{map}, @var{alpha}] =} __magick_read__ (@var{fname}, @var{options}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
823 Read image with GraphicsMagick or ImageMagick. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
824 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
825 This is a private internal function not intended for direct use. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
826 Use @code{imread} instead. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
827 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
828 @seealso{imfinfo, imformats, imread, imwrite} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
829 @end deftypefn */) |
10947
dc74ce93cfc4
initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
830 { |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21691
diff
changeset
|
831 #if defined (HAVE_MAGICK) |
10947
dc74ce93cfc4
initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
832 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20869
diff
changeset
|
833 if (args.length () != 2 || ! args(0).is_string ()) |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20869
diff
changeset
|
834 print_usage (); |
10947
dc74ce93cfc4
initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
835 |
dc74ce93cfc4
initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
836 maybe_initialize_magick (); |
10390
ad0b54ae206a
__magick_read__ (F__magick_read__): call Magick::InitializeMagick
John W. Eaton <jwe@octave.org>
parents:
10350
diff
changeset
|
837 |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
838 const octave_scalar_map options |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
839 = args(1).xscalar_map_value ("__magick_read__: OPTIONS must be a struct"); |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
840 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20869
diff
changeset
|
841 octave_value_list output; |
7925
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
842 |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
843 std::vector<Magick::Image> imvec; |
16988
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
844 read_file (args(0).string_value (), imvec); |
7925
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
845 |
16996
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
846 // Prepare an Array with the indexes for the requested frames. |
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
847 const octave_idx_type nFrames = imvec.size (); |
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
848 Array<octave_idx_type> frameidx; |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
849 const octave_value indexes = options.getfield ("index"); |
16984
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
850 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
|
851 { |
16996
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
852 frameidx.resize (dim_vector (1, nFrames)); |
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
853 for (octave_idx_type i = 0; i < nFrames; i++) |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
854 frameidx(i) = i; |
10778
6035bf68a755
Support imread('file', 'frames', 'all') (Feature Request #30365)
David Bateman <dbateman@free.fr>
parents:
10739
diff
changeset
|
855 } |
6035bf68a755
Support imread('file', 'frames', 'all') (Feature Request #30365)
David Bateman <dbateman@free.fr>
parents:
10739
diff
changeset
|
856 else |
6035bf68a755
Support imread('file', 'frames', 'all') (Feature Request #30365)
David Bateman <dbateman@free.fr>
parents:
10739
diff
changeset
|
857 { |
20703
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20687
diff
changeset
|
858 frameidx = indexes.xint_vector_value ("__magick_read__: invalid value for Index/Frame"); |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20687
diff
changeset
|
859 |
16989
7a69ab84b8c9
__magick_write__: confirm file exists before reading to append.
Carnë Draug <carandraug@octave.org>
parents:
16988
diff
changeset
|
860 // Fix indexes from base 1 to base 0, and at the same time, make |
16984
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
861 // sure none of the indexes is outside the range of image number. |
20228
00cf2847355d
Deprecate Array::nelem() and Range::nelem() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents:
20219
diff
changeset
|
862 const octave_idx_type n = frameidx.numel (); |
16996
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
863 for (octave_idx_type i = 0; i < n; i++) |
16984
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
864 { |
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
865 frameidx(i)--; |
16996
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
866 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
|
867 { |
17912
01496d4811b1
imread: deal elegantly with multiples frames of different sizes.
Carnë Draug <carandraug@octave.org>
parents:
17861
diff
changeset
|
868 // We do this check inside the loop because frameidx does not |
01496d4811b1
imread: deal elegantly with multiples frames of different sizes.
Carnë Draug <carandraug@octave.org>
parents:
17861
diff
changeset
|
869 // need to be ordered (this is a feature and even allows for |
01496d4811b1
imread: deal elegantly with multiples frames of different sizes.
Carnë Draug <carandraug@octave.org>
parents:
17861
diff
changeset
|
870 // some frames to be read multiple times). |
16984
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
871 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
|
872 } |
8053 | 873 } |
7925
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
874 } |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
875 |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
876 // Check that all frames have the same size. We don't do this at the same |
17912
01496d4811b1
imread: deal elegantly with multiples frames of different sizes.
Carnë Draug <carandraug@octave.org>
parents:
17861
diff
changeset
|
877 // time we decode the image because that's done in many different places, |
01496d4811b1
imread: deal elegantly with multiples frames of different sizes.
Carnë Draug <carandraug@octave.org>
parents:
17861
diff
changeset
|
878 // to cover the different types of images which would lead to a lot of |
01496d4811b1
imread: deal elegantly with multiples frames of different sizes.
Carnë Draug <carandraug@octave.org>
parents:
17861
diff
changeset
|
879 // copy and paste. |
17916
c7f089c560cc
imread: avoid out of bounds error when reading part of multipage image file.
Carnë Draug <carandraug@octave.org>
parents:
17912
diff
changeset
|
880 { |
c7f089c560cc
imread: avoid out of bounds error when reading part of multipage image file.
Carnë Draug <carandraug@octave.org>
parents:
17912
diff
changeset
|
881 const unsigned int nRows = imvec[frameidx(0)].rows (); |
c7f089c560cc
imread: avoid out of bounds error when reading part of multipage image file.
Carnë Draug <carandraug@octave.org>
parents:
17912
diff
changeset
|
882 const unsigned int nCols = imvec[frameidx(0)].columns (); |
20228
00cf2847355d
Deprecate Array::nelem() and Range::nelem() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents:
20219
diff
changeset
|
883 const octave_idx_type n = frameidx.numel (); |
17916
c7f089c560cc
imread: avoid out of bounds error when reading part of multipage image file.
Carnë Draug <carandraug@octave.org>
parents:
17912
diff
changeset
|
884 for (octave_idx_type frame = 0; frame < n; frame++) |
c7f089c560cc
imread: avoid out of bounds error when reading part of multipage image file.
Carnë Draug <carandraug@octave.org>
parents:
17912
diff
changeset
|
885 { |
19864
17d647821d61
maint: More cleanup of C++ code to follow Octave coding conventions.
John W. Eaton <jwe@octave.org>
parents:
19861
diff
changeset
|
886 if (nRows != imvec[frameidx(frame)].rows () |
17d647821d61
maint: More cleanup of C++ code to follow Octave coding conventions.
John W. Eaton <jwe@octave.org>
parents:
19861
diff
changeset
|
887 || nCols != imvec[frameidx(frame)].columns ()) |
17916
c7f089c560cc
imread: avoid out of bounds error when reading part of multipage image file.
Carnë Draug <carandraug@octave.org>
parents:
17912
diff
changeset
|
888 { |
26164
7f6a50f73625
Silence compiler warnings about format identifier for octave_idx_type (bug #55046).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25688
diff
changeset
|
889 error ("imread: all frames must have the same size but frame " |
7f6a50f73625
Silence compiler warnings about format identifier for octave_idx_type (bug #55046).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25688
diff
changeset
|
890 "%" OCTAVE_IDX_TYPE_FORMAT " is different", |
17916
c7f089c560cc
imread: avoid out of bounds error when reading part of multipage image file.
Carnë Draug <carandraug@octave.org>
parents:
17912
diff
changeset
|
891 frameidx(frame) +1); |
c7f089c560cc
imread: avoid out of bounds error when reading part of multipage image file.
Carnë Draug <carandraug@octave.org>
parents:
17912
diff
changeset
|
892 } |
c7f089c560cc
imread: avoid out of bounds error when reading part of multipage image file.
Carnë Draug <carandraug@octave.org>
parents:
17912
diff
changeset
|
893 } |
c7f089c560cc
imread: avoid out of bounds error when reading part of multipage image file.
Carnë Draug <carandraug@octave.org>
parents:
17912
diff
changeset
|
894 } |
17912
01496d4811b1
imread: deal elegantly with multiples frames of different sizes.
Carnë Draug <carandraug@octave.org>
parents:
17861
diff
changeset
|
895 |
17350 | 896 const octave_idx_type depth = get_depth (imvec[frameidx(0)]); |
897 if (is_indexed (imvec[frameidx(0)])) | |
16984
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
898 { |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
899 if (depth <= 1) |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
900 output = read_indexed_images<boolNDArray> (imvec, frameidx, |
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
901 nargout, options); |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
902 else if (depth <= 8) |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
903 output = read_indexed_images<uint8NDArray> (imvec, frameidx, |
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
904 nargout, options); |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
905 else if (depth <= 16) |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
906 output = read_indexed_images<uint16NDArray> (imvec, frameidx, |
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
907 nargout, options); |
16996
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
908 else |
20825
66cd994d1b79
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20812
diff
changeset
|
909 error ("imread: indexed images with depths greater than 16-bit are not supported"); |
16984
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
910 } |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11585
diff
changeset
|
911 |
16996
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
912 else |
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
913 { |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
914 if (depth <= 1) |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
915 output = read_images<boolNDArray> (imvec, frameidx, nargout, options); |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
916 else if (depth <= 8) |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
917 output = read_images<uint8NDArray> (imvec, frameidx, nargout, options); |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
918 else if (depth <= 16) |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
919 output = read_images<uint16NDArray> (imvec, frameidx, nargout, options); |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
920 else if (depth <= 32) |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
921 output = read_images<FloatNDArray> (imvec, frameidx, nargout, options); |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
922 else |
26164
7f6a50f73625
Silence compiler warnings about format identifier for octave_idx_type (bug #55046).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25688
diff
changeset
|
923 error ("imread: reading of images with %" OCTAVE_IDX_TYPE_FORMAT |
7f6a50f73625
Silence compiler warnings about format identifier for octave_idx_type (bug #55046).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25688
diff
changeset
|
924 "-bit depth is not supported", depth); |
16996
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
925 } |
7937
6661387827d6
Allow build without GraphicsMagick installed
David Bateman <dbateman@free.fr>
parents:
7933
diff
changeset
|
926 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20869
diff
changeset
|
927 return output; |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20869
diff
changeset
|
928 |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20869
diff
changeset
|
929 #else |
21691
263d18409fdf
Eliminate unused variable warnings for conditionally compiled code.
John W. Eaton <jwe@octave.org>
parents:
21680
diff
changeset
|
930 |
263d18409fdf
Eliminate unused variable warnings for conditionally compiled code.
John W. Eaton <jwe@octave.org>
parents:
21680
diff
changeset
|
931 octave_unused_parameter (args); |
263d18409fdf
Eliminate unused variable warnings for conditionally compiled code.
John W. Eaton <jwe@octave.org>
parents:
21680
diff
changeset
|
932 octave_unused_parameter (nargout); |
263d18409fdf
Eliminate unused variable warnings for conditionally compiled code.
John W. Eaton <jwe@octave.org>
parents:
21680
diff
changeset
|
933 |
21100
e39e05d90788
Switch gripe_XXX to either err_XXX or warn_XXX naming scheme.
Rik <rik@octave.org>
parents:
21033
diff
changeset
|
934 err_disabled_feature ("imread", "Image IO"); |
21691
263d18409fdf
Eliminate unused variable warnings for conditionally compiled code.
John W. Eaton <jwe@octave.org>
parents:
21680
diff
changeset
|
935 |
7937
6661387827d6
Allow build without GraphicsMagick installed
David Bateman <dbateman@free.fr>
parents:
7933
diff
changeset
|
936 #endif |
7925
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
937 } |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
938 |
12805
3641167e5b75
codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents:
11590
diff
changeset
|
939 /* |
3641167e5b75
codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents:
11590
diff
changeset
|
940 ## 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
|
941 %!assert (1) |
3641167e5b75
codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents:
11590
diff
changeset
|
942 */ |
3641167e5b75
codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents:
11590
diff
changeset
|
943 |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21691
diff
changeset
|
944 #if defined (HAVE_MAGICK) |
7974 | 945 |
21139
538b57866b90
consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents:
21100
diff
changeset
|
946 template <typename T> |
17228
2f1729cae08f
Initial support for writing of floating point and uint32 images.
Carnë Draug <carandraug@octave.org>
parents:
17226
diff
changeset
|
947 static uint32NDArray |
2f1729cae08f
Initial support for writing of floating point and uint32 images.
Carnë Draug <carandraug@octave.org>
parents:
17226
diff
changeset
|
948 img_float2uint (const T& img) |
2f1729cae08f
Initial support for writing of floating point and uint32 images.
Carnë Draug <carandraug@octave.org>
parents:
17226
diff
changeset
|
949 { |
2f1729cae08f
Initial support for writing of floating point and uint32 images.
Carnë Draug <carandraug@octave.org>
parents:
17226
diff
changeset
|
950 typedef typename T::element_type P; |
2f1729cae08f
Initial support for writing of floating point and uint32 images.
Carnë Draug <carandraug@octave.org>
parents:
17226
diff
changeset
|
951 uint32NDArray out (img.dims ()); |
2f1729cae08f
Initial support for writing of floating point and uint32 images.
Carnë Draug <carandraug@octave.org>
parents:
17226
diff
changeset
|
952 |
23449
c763214a8260
maint: Use convention 'int *x' for naming pointers.
Rik <rik@octave.org>
parents:
23416
diff
changeset
|
953 octave_uint32 *out_fvec = out.fortran_vec (); |
c763214a8260
maint: Use convention 'int *x' for naming pointers.
Rik <rik@octave.org>
parents:
23416
diff
changeset
|
954 const P *img_fvec = img.fortran_vec (); |
17228
2f1729cae08f
Initial support for writing of floating point and uint32 images.
Carnë Draug <carandraug@octave.org>
parents:
17226
diff
changeset
|
955 |
2f1729cae08f
Initial support for writing of floating point and uint32 images.
Carnë Draug <carandraug@octave.org>
parents:
17226
diff
changeset
|
956 const octave_uint32 max = octave_uint32::max (); |
2f1729cae08f
Initial support for writing of floating point and uint32 images.
Carnë Draug <carandraug@octave.org>
parents:
17226
diff
changeset
|
957 const octave_idx_type numel = img.numel (); |
2f1729cae08f
Initial support for writing of floating point and uint32 images.
Carnë Draug <carandraug@octave.org>
parents:
17226
diff
changeset
|
958 for (octave_idx_type idx = 0; idx < numel; idx++) |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
959 out_fvec[idx] = img_fvec[idx] * max; |
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
960 |
17228
2f1729cae08f
Initial support for writing of floating point and uint32 images.
Carnë Draug <carandraug@octave.org>
parents:
17226
diff
changeset
|
961 return out; |
2f1729cae08f
Initial support for writing of floating point and uint32 images.
Carnë Draug <carandraug@octave.org>
parents:
17226
diff
changeset
|
962 } |
2f1729cae08f
Initial support for writing of floating point and uint32 images.
Carnë Draug <carandraug@octave.org>
parents:
17226
diff
changeset
|
963 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
964 // Gets the bitdepth to be used for an Octave class, i.e, returns 8 for |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
965 // uint8, 16 for uint16, and 32 for uint32 |
21139
538b57866b90
consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents:
21100
diff
changeset
|
966 template <typename T> |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
967 static octave_idx_type |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
968 bitdepth_from_class () |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
969 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
970 typedef typename T::element_type P; |
27277
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
26488
diff
changeset
|
971 const octave_idx_type bitdepth |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
26488
diff
changeset
|
972 = sizeof (P) * std::numeric_limits<unsigned char>::digits; |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
973 return bitdepth; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
974 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
975 |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
976 static Magick::Image |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
977 init_enconde_image (const octave_idx_type& nCols, const octave_idx_type& nRows, |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
978 const octave_idx_type& bitdepth, |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
979 const Magick::ImageType& type, |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
980 const Magick::ClassType& klass) |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
981 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
982 Magick::Image img (Magick::Geometry (nCols, nRows), "black"); |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
983 // Ensure that there are no other references to this image. |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
984 img.modifyImage (); |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
985 |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
986 img.classType (klass); |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
987 img.type (type); |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
988 // FIXME: for some reason, setting bitdepth doesn't seem to work for |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
989 // indexed images. |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
990 img.depth (bitdepth); |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
991 switch (type) |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
992 { |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
993 case Magick::GrayscaleMatteType: |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
994 case Magick::TrueColorMatteType: |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
995 case Magick::ColorSeparationMatteType: |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
996 case Magick::PaletteMatteType: |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
997 img.matte (true); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
998 break; |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
999 |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1000 default: |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1001 img.matte (false); |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1002 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1003 |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1004 return img; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1005 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1006 |
21139
538b57866b90
consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents:
21100
diff
changeset
|
1007 template <typename T> |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1008 static void |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1009 encode_indexed_images (std::vector<Magick::Image>& imvec, |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1010 const T& img, |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
1011 const Matrix& cmap) |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1012 { |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1013 typedef typename T::element_type P; |
23450
855122b993da
maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents:
23449
diff
changeset
|
1014 const octave_idx_type nFrames = (img.ndims () < 4 ? 1 : img.dims ()(3)); |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1015 const octave_idx_type nRows = img.rows (); |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1016 const octave_idx_type nCols = img.columns (); |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1017 const octave_idx_type cmap_size = cmap.rows (); |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1018 const octave_idx_type bitdepth = bitdepth_from_class<T> (); |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1019 |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1020 // There is no colormap object, we need to build a new one for each frame, |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
1021 // even if it's always the same. We can least get a vector for the Colors. |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1022 std::vector<Magick::ColorRGB> colormap; |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1023 { |
23449
c763214a8260
maint: Use convention 'int *x' for naming pointers.
Rik <rik@octave.org>
parents:
23416
diff
changeset
|
1024 const double *cmap_fvec = cmap.fortran_vec (); |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1025 const octave_idx_type G_offset = cmap_size; |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1026 const octave_idx_type B_offset = cmap_size * 2; |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1027 for (octave_idx_type map_idx = 0; map_idx < cmap_size; map_idx++) |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
1028 colormap.push_back (Magick::ColorRGB (cmap_fvec[map_idx], |
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
1029 cmap_fvec[map_idx + G_offset], |
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
1030 cmap_fvec[map_idx + B_offset])); |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1031 } |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1032 |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1033 for (octave_idx_type frame = 0; frame < nFrames; frame++) |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1034 { |
22860
0b1e25cc4457
eliminate use of OCTAVE_QUIT macro in C++ sources
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
1035 octave_quit (); |
0b1e25cc4457
eliminate use of OCTAVE_QUIT macro in C++ sources
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
1036 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1037 Magick::Image m_img = init_enconde_image (nCols, nRows, bitdepth, |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1038 Magick::PaletteType, |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1039 Magick::PseudoClass); |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1040 |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1041 // Insert colormap. |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1042 m_img.colorMapSize (cmap_size); |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1043 for (octave_idx_type map_idx = 0; map_idx < cmap_size; map_idx++) |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
1044 m_img.colorMap (map_idx, colormap[map_idx]); |
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
1045 |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1046 // Why are we also setting the pixel values instead of only the |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1047 // index values? We don't know if a file format supports indexed |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
1048 // images. If we only set the indexes and then try to save the |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1049 // image as JPEG for example, the indexed values get discarded, |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1050 // there is no conversion from the indexes, it's the initial values |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
1051 // that get used. An alternative would be to only set the pixel |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1052 // values (no indexes), then set the image as PseudoClass and GM |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
1053 // would create a colormap for us. However, we wouldn't have control |
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
1054 // over the order of that colormap. And that's why we set both. |
23449
c763214a8260
maint: Use convention 'int *x' for naming pointers.
Rik <rik@octave.org>
parents:
23416
diff
changeset
|
1055 Magick::PixelPacket *pix = m_img.getPixels (0, 0, nCols, nRows); |
c763214a8260
maint: Use convention 'int *x' for naming pointers.
Rik <rik@octave.org>
parents:
23416
diff
changeset
|
1056 Magick::IndexPacket *ind = m_img.getIndexes (); |
c763214a8260
maint: Use convention 'int *x' for naming pointers.
Rik <rik@octave.org>
parents:
23416
diff
changeset
|
1057 const P *img_fvec = img.fortran_vec (); |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1058 |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1059 octave_idx_type GM_idx = 0; |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1060 for (octave_idx_type column = 0; column < nCols; column++) |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1061 { |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1062 for (octave_idx_type row = 0; row < nRows; row++) |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1063 { |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1064 ind[GM_idx] = double (*img_fvec); |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1065 pix[GM_idx] = m_img.colorMap (double (*img_fvec)); |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1066 img_fvec++; |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1067 GM_idx += nCols; |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1068 } |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1069 GM_idx -= nCols * nRows - 1; |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1070 } |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1071 |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1072 // Save changes to underlying image. |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1073 m_img.syncPixels (); |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1074 imvec.push_back (m_img); |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1075 } |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1076 } |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1077 |
8054 | 1078 static void |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1079 encode_bool_image (std::vector<Magick::Image>& imvec, const boolNDArray& img) |
7974 | 1080 { |
23450
855122b993da
maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents:
23449
diff
changeset
|
1081 const octave_idx_type nFrames = (img.ndims () < 4 ? 1 : img.dims ()(3)); |
21568
3d60ed163b70
maint: Eliminate bad spacing around '='.
Rik <rik@octave.org>
parents:
21567
diff
changeset
|
1082 const octave_idx_type nRows = img.rows (); |
3d60ed163b70
maint: Eliminate bad spacing around '='.
Rik <rik@octave.org>
parents:
21567
diff
changeset
|
1083 const octave_idx_type nCols = img.columns (); |
8054 | 1084 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1085 // The initialized image will be black, this is for the other pixels |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1086 const Magick::Color white ("white"); |
8054 | 1087 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1088 const bool *img_fvec = img.fortran_vec (); |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1089 octave_idx_type img_idx = 0; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1090 for (octave_idx_type frame = 0; frame < nFrames; frame++) |
8054 | 1091 { |
22860
0b1e25cc4457
eliminate use of OCTAVE_QUIT macro in C++ sources
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
1092 octave_quit (); |
0b1e25cc4457
eliminate use of OCTAVE_QUIT macro in C++ sources
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
1093 |
17333
51c011825bcc
__magick_write__: make sure binary images are saved as bilevel for some coders.
Carnë Draug <carandraug@octave.org>
parents:
17332
diff
changeset
|
1094 // For some reason, we can't set the type to Magick::BilevelType or |
51c011825bcc
__magick_write__: make sure binary images are saved as bilevel for some coders.
Carnë Draug <carandraug@octave.org>
parents:
17332
diff
changeset
|
1095 // the output image will be black, changing to white has no effect. |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1096 // However, this will still work fine and a binary image will be |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1097 // saved because we are setting the bitdepth to 1. |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1098 Magick::Image m_img = init_enconde_image (nCols, nRows, 1, |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1099 Magick::GrayscaleType, |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1100 Magick::DirectClass); |
8054 | 1101 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1102 Magick::PixelPacket *pix = m_img.getPixels (0, 0, nCols, nRows); |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1103 octave_idx_type GM_idx = 0; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1104 for (octave_idx_type col = 0; col < nCols; col++) |
8054 | 1105 { |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1106 for (octave_idx_type row = 0; row < nRows; row++) |
8054 | 1107 { |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1108 if (img_fvec[img_idx]) |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1109 pix[GM_idx] = white; |
10979
7f49dc864f32
__magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents:
10978
diff
changeset
|
1110 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1111 img_idx++; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1112 GM_idx += nCols; |
8054 | 1113 } |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1114 GM_idx -= nCols * nRows - 1; |
8054 | 1115 } |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1116 // Save changes to underlying image. |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1117 m_img.syncPixels (); |
17333
51c011825bcc
__magick_write__: make sure binary images are saved as bilevel for some coders.
Carnë Draug <carandraug@octave.org>
parents:
17332
diff
changeset
|
1118 // While we could not set it to Bilevel at the start, we can do it |
51c011825bcc
__magick_write__: make sure binary images are saved as bilevel for some coders.
Carnë Draug <carandraug@octave.org>
parents:
17332
diff
changeset
|
1119 // here otherwise some coders won't save it as binary. |
51c011825bcc
__magick_write__: make sure binary images are saved as bilevel for some coders.
Carnë Draug <carandraug@octave.org>
parents:
17332
diff
changeset
|
1120 m_img.type (Magick::BilevelType); |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1121 imvec.push_back (m_img); |
8054 | 1122 } |
1123 } | |
1124 | |
21139
538b57866b90
consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents:
21100
diff
changeset
|
1125 template <typename T> |
8054 | 1126 static void |
1127 encode_uint_image (std::vector<Magick::Image>& imvec, | |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1128 const T& img, const T& alpha) |
8054 | 1129 { |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1130 typedef typename T::element_type P; |
23450
855122b993da
maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents:
23449
diff
changeset
|
1131 const octave_idx_type channels = (img.ndims () < 3 ? 1 : img.dims ()(2)); |
855122b993da
maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents:
23449
diff
changeset
|
1132 const octave_idx_type nFrames = (img.ndims () < 4 ? 1 : img.dims ()(3)); |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1133 const octave_idx_type nRows = img.rows (); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1134 const octave_idx_type nCols = img.columns (); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1135 const octave_idx_type bitdepth = bitdepth_from_class<T> (); |
8054 | 1136 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1137 Magick::ImageType type; |
23577
80c42f4cca13
maint: Deprecate is_empty and replace with isempty.
Rik <rik@octave.org>
parents:
23457
diff
changeset
|
1138 const bool has_alpha = ! alpha.isempty (); |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1139 switch (channels) |
8054 | 1140 { |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1141 case 1: |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1142 if (has_alpha) |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1143 type = Magick::GrayscaleMatteType; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1144 else |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1145 type = Magick::GrayscaleType; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1146 break; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1147 |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1148 case 3: |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1149 if (has_alpha) |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1150 type = Magick::TrueColorMatteType; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1151 else |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1152 type = Magick::TrueColorType; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1153 break; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1154 |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1155 case 4: |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1156 if (has_alpha) |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1157 type = Magick::ColorSeparationMatteType; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1158 else |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1159 type = Magick::ColorSeparationType; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1160 break; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1161 |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1162 default: |
20825
66cd994d1b79
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20812
diff
changeset
|
1163 // __imwrite should have already filtered this cases |
66cd994d1b79
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20812
diff
changeset
|
1164 error ("__magick_write__: wrong size on 3rd dimension"); |
8054 | 1165 } |
1166 | |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1167 // We will be passing the values as integers with depth as specified |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
1168 // by QuantumDepth (maximum value specified by MaxRGB). This is independent |
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
1169 // of the actual depth of the image. GM will then convert the values but |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1170 // while in memory, it always keeps the values as specified by QuantumDepth. |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1171 // From GM documentation: |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1172 // Color arguments are must be scaled to fit the Quantum size according to |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1173 // the range of MaxRGB |
25688
b2917b7858ba
maint: Use Octave convention for spacing of C++ cast statements.
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
1174 const double divisor = static_cast<double> ((uint64_t (1) << bitdepth) - 1) |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1175 / MaxRGB; |
8054 | 1176 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1177 const P *img_fvec = img.fortran_vec (); |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1178 const P *a_fvec = alpha.fortran_vec (); |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1179 switch (type) |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1180 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1181 case Magick::GrayscaleType: |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1182 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1183 for (octave_idx_type frame = 0; frame < nFrames; frame++) |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1184 { |
22860
0b1e25cc4457
eliminate use of OCTAVE_QUIT macro in C++ sources
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
1185 octave_quit (); |
0b1e25cc4457
eliminate use of OCTAVE_QUIT macro in C++ sources
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
1186 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1187 Magick::Image m_img = init_enconde_image (nCols, nRows, bitdepth, |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1188 type, |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1189 Magick::DirectClass); |
8054 | 1190 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1191 Magick::PixelPacket *pix = m_img.getPixels (0, 0, nCols, nRows); |
18542
30aa4e85f8d5
Fix writing and reading of multipage images.
Carnë Draug <carandraug@octave.org>
parents:
18149
diff
changeset
|
1192 octave_idx_type GM_idx = 0; |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1193 for (octave_idx_type col = 0; col < nCols; col++) |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1194 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1195 for (octave_idx_type row = 0; row < nRows; row++) |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1196 { |
21782
2aef506f3fec
use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents:
21768
diff
changeset
|
1197 const double grey = octave::math::round (double (*img_fvec) / divisor); |
19694
c334e4af3a1b
Fix incorrect writing of grayscale JPEG images (bugs #41673, #44118, #42474)
Ilya Kurdyukov <olme8@mail.ru>
parents:
18955
diff
changeset
|
1198 Magick::Color c (grey, grey, grey); |
c334e4af3a1b
Fix incorrect writing of grayscale JPEG images (bugs #41673, #44118, #42474)
Ilya Kurdyukov <olme8@mail.ru>
parents:
18955
diff
changeset
|
1199 pix[GM_idx] = c; |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1200 img_fvec++; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1201 GM_idx += nCols; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1202 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1203 GM_idx -= nCols * nRows - 1; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1204 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1205 // Save changes to underlying image. |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1206 m_img.syncPixels (); |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1207 imvec.push_back (m_img); |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1208 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1209 break; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1210 } |
8054 | 1211 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1212 case Magick::GrayscaleMatteType: |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1213 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1214 for (octave_idx_type frame = 0; frame < nFrames; frame++) |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1215 { |
22860
0b1e25cc4457
eliminate use of OCTAVE_QUIT macro in C++ sources
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
1216 octave_quit (); |
0b1e25cc4457
eliminate use of OCTAVE_QUIT macro in C++ sources
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
1217 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1218 Magick::Image m_img = init_enconde_image (nCols, nRows, bitdepth, |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1219 type, |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1220 Magick::DirectClass); |
7974 | 1221 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1222 Magick::PixelPacket *pix = m_img.getPixels (0, 0, nCols, nRows); |
18542
30aa4e85f8d5
Fix writing and reading of multipage images.
Carnë Draug <carandraug@octave.org>
parents:
18149
diff
changeset
|
1223 octave_idx_type GM_idx = 0; |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1224 for (octave_idx_type col = 0; col < nCols; col++) |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1225 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1226 for (octave_idx_type row = 0; row < nRows; row++) |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1227 { |
21782
2aef506f3fec
use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents:
21768
diff
changeset
|
1228 double grey = octave::math::round (double (*img_fvec) / divisor); |
18544
e0cc67d5a462
Fix writing of grayscale images when there is an alpha channel.
Carnë Draug <carandraug@octave.org>
parents:
18542
diff
changeset
|
1229 Magick::Color c (grey, grey, grey, |
21782
2aef506f3fec
use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents:
21768
diff
changeset
|
1230 MaxRGB - octave::math::round (double (*a_fvec) / divisor)); |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1231 pix[GM_idx] = c; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1232 img_fvec++; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1233 a_fvec++; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1234 GM_idx += nCols; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1235 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1236 GM_idx -= nCols * nRows - 1; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1237 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1238 // Save changes to underlying image. |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1239 m_img.syncPixels (); |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1240 imvec.push_back (m_img); |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1241 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1242 break; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1243 } |
10979
7f49dc864f32
__magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents:
10978
diff
changeset
|
1244 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1245 case Magick::TrueColorType: |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1246 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1247 // The fortran_vec offset for the green and blue channels |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1248 const octave_idx_type G_offset = nCols * nRows; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1249 const octave_idx_type B_offset = nCols * nRows * 2; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1250 for (octave_idx_type frame = 0; frame < nFrames; frame++) |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1251 { |
22860
0b1e25cc4457
eliminate use of OCTAVE_QUIT macro in C++ sources
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
1252 octave_quit (); |
0b1e25cc4457
eliminate use of OCTAVE_QUIT macro in C++ sources
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
1253 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1254 Magick::Image m_img = init_enconde_image (nCols, nRows, bitdepth, |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1255 type, |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1256 Magick::DirectClass); |
10979
7f49dc864f32
__magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents:
10978
diff
changeset
|
1257 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1258 Magick::PixelPacket *pix = m_img.getPixels (0, 0, nCols, nRows); |
18542
30aa4e85f8d5
Fix writing and reading of multipage images.
Carnë Draug <carandraug@octave.org>
parents:
18149
diff
changeset
|
1259 octave_idx_type GM_idx = 0; |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1260 for (octave_idx_type col = 0; col < nCols; col++) |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1261 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1262 for (octave_idx_type row = 0; row < nRows; row++) |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1263 { |
21782
2aef506f3fec
use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents:
21768
diff
changeset
|
1264 Magick::Color c (octave::math::round (double (*img_fvec) / divisor), |
2aef506f3fec
use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents:
21768
diff
changeset
|
1265 octave::math::round (double (img_fvec[G_offset]) / divisor), |
2aef506f3fec
use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents:
21768
diff
changeset
|
1266 octave::math::round (double (img_fvec[B_offset]) / divisor)); |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1267 pix[GM_idx] = c; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1268 img_fvec++; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1269 GM_idx += nCols; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1270 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1271 GM_idx -= nCols * nRows - 1; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1272 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1273 // Save changes to underlying image. |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1274 m_img.syncPixels (); |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1275 imvec.push_back (m_img); |
18542
30aa4e85f8d5
Fix writing and reading of multipage images.
Carnë Draug <carandraug@octave.org>
parents:
18149
diff
changeset
|
1276 img_fvec += B_offset; |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1277 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1278 break; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1279 } |
8054 | 1280 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1281 case Magick::TrueColorMatteType: |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1282 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1283 // The fortran_vec offset for the green and blue channels |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1284 const octave_idx_type G_offset = nCols * nRows; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1285 const octave_idx_type B_offset = nCols * nRows * 2; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1286 for (octave_idx_type frame = 0; frame < nFrames; frame++) |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1287 { |
22860
0b1e25cc4457
eliminate use of OCTAVE_QUIT macro in C++ sources
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
1288 octave_quit (); |
0b1e25cc4457
eliminate use of OCTAVE_QUIT macro in C++ sources
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
1289 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1290 Magick::Image m_img = init_enconde_image (nCols, nRows, bitdepth, |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1291 type, |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1292 Magick::DirectClass); |
10979
7f49dc864f32
__magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents:
10978
diff
changeset
|
1293 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1294 Magick::PixelPacket *pix = m_img.getPixels (0, 0, nCols, nRows); |
18542
30aa4e85f8d5
Fix writing and reading of multipage images.
Carnë Draug <carandraug@octave.org>
parents:
18149
diff
changeset
|
1295 octave_idx_type GM_idx = 0; |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1296 for (octave_idx_type col = 0; col < nCols; col++) |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1297 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1298 for (octave_idx_type row = 0; row < nRows; row++) |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1299 { |
21782
2aef506f3fec
use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents:
21768
diff
changeset
|
1300 Magick::Color c (octave::math::round (double (*img_fvec) / divisor), |
2aef506f3fec
use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents:
21768
diff
changeset
|
1301 octave::math::round (double (img_fvec[G_offset]) / divisor), |
2aef506f3fec
use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents:
21768
diff
changeset
|
1302 octave::math::round (double (img_fvec[B_offset]) / divisor), |
2aef506f3fec
use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents:
21768
diff
changeset
|
1303 MaxRGB - octave::math::round (double (*a_fvec) / divisor)); |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1304 pix[GM_idx] = c; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1305 img_fvec++; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1306 a_fvec++; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1307 GM_idx += nCols; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1308 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1309 GM_idx -= nCols * nRows - 1; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1310 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1311 // Save changes to underlying image. |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1312 m_img.syncPixels (); |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1313 imvec.push_back (m_img); |
18542
30aa4e85f8d5
Fix writing and reading of multipage images.
Carnë Draug <carandraug@octave.org>
parents:
18149
diff
changeset
|
1314 img_fvec += B_offset; |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1315 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1316 break; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1317 } |
8054 | 1318 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1319 case Magick::ColorSeparationType: |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1320 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1321 // The fortran_vec offset for the Magenta, Yellow, and blacK channels |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1322 const octave_idx_type M_offset = nCols * nRows; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1323 const octave_idx_type Y_offset = nCols * nRows * 2; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1324 const octave_idx_type K_offset = nCols * nRows * 3; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1325 for (octave_idx_type frame = 0; frame < nFrames; frame++) |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1326 { |
22860
0b1e25cc4457
eliminate use of OCTAVE_QUIT macro in C++ sources
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
1327 octave_quit (); |
0b1e25cc4457
eliminate use of OCTAVE_QUIT macro in C++ sources
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
1328 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1329 Magick::Image m_img = init_enconde_image (nCols, nRows, bitdepth, |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1330 type, |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1331 Magick::DirectClass); |
10979
7f49dc864f32
__magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents:
10978
diff
changeset
|
1332 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1333 Magick::PixelPacket *pix = m_img.getPixels (0, 0, nCols, nRows); |
18542
30aa4e85f8d5
Fix writing and reading of multipage images.
Carnë Draug <carandraug@octave.org>
parents:
18149
diff
changeset
|
1334 octave_idx_type GM_idx = 0; |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1335 for (octave_idx_type col = 0; col < nCols; col++) |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1336 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1337 for (octave_idx_type row = 0; row < nRows; row++) |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1338 { |
21782
2aef506f3fec
use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents:
21768
diff
changeset
|
1339 Magick::Color c (octave::math::round (double (*img_fvec) / divisor), |
2aef506f3fec
use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents:
21768
diff
changeset
|
1340 octave::math::round (double (img_fvec[M_offset]) / divisor), |
2aef506f3fec
use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents:
21768
diff
changeset
|
1341 octave::math::round (double (img_fvec[Y_offset]) / divisor), |
2aef506f3fec
use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents:
21768
diff
changeset
|
1342 octave::math::round (double (img_fvec[K_offset]) / divisor)); |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1343 pix[GM_idx] = c; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1344 img_fvec++; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1345 GM_idx += nCols; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1346 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1347 GM_idx -= nCols * nRows - 1; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1348 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1349 // Save changes to underlying image. |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1350 m_img.syncPixels (); |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1351 imvec.push_back (m_img); |
18542
30aa4e85f8d5
Fix writing and reading of multipage images.
Carnë Draug <carandraug@octave.org>
parents:
18149
diff
changeset
|
1352 img_fvec += K_offset; |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1353 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1354 break; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1355 } |
10979
7f49dc864f32
__magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents:
10978
diff
changeset
|
1356 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1357 case Magick::ColorSeparationMatteType: |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1358 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1359 // The fortran_vec offset for the Magenta, Yellow, and blacK channels |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1360 const octave_idx_type M_offset = nCols * nRows; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1361 const octave_idx_type Y_offset = nCols * nRows * 2; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1362 const octave_idx_type K_offset = nCols * nRows * 3; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1363 for (octave_idx_type frame = 0; frame < nFrames; frame++) |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1364 { |
22860
0b1e25cc4457
eliminate use of OCTAVE_QUIT macro in C++ sources
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
1365 octave_quit (); |
0b1e25cc4457
eliminate use of OCTAVE_QUIT macro in C++ sources
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
1366 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1367 Magick::Image m_img = init_enconde_image (nCols, nRows, bitdepth, |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1368 type, |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1369 Magick::DirectClass); |
10979
7f49dc864f32
__magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents:
10978
diff
changeset
|
1370 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1371 Magick::PixelPacket *pix = m_img.getPixels (0, 0, nCols, nRows); |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1372 Magick::IndexPacket *ind = m_img.getIndexes (); |
18542
30aa4e85f8d5
Fix writing and reading of multipage images.
Carnë Draug <carandraug@octave.org>
parents:
18149
diff
changeset
|
1373 octave_idx_type GM_idx = 0; |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1374 for (octave_idx_type col = 0; col < nCols; col++) |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1375 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1376 for (octave_idx_type row = 0; row < nRows; row++) |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1377 { |
21782
2aef506f3fec
use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents:
21768
diff
changeset
|
1378 Magick::Color c (octave::math::round (double (*img_fvec) / divisor), |
2aef506f3fec
use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents:
21768
diff
changeset
|
1379 octave::math::round (double (img_fvec[M_offset]) / divisor), |
2aef506f3fec
use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents:
21768
diff
changeset
|
1380 octave::math::round (double (img_fvec[Y_offset]) / divisor), |
2aef506f3fec
use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents:
21768
diff
changeset
|
1381 octave::math::round (double (img_fvec[K_offset]) / divisor)); |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1382 pix[GM_idx] = c; |
21782
2aef506f3fec
use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents:
21768
diff
changeset
|
1383 ind[GM_idx] = MaxRGB - octave::math::round (double (*a_fvec) / divisor); |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1384 img_fvec++; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1385 a_fvec++; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1386 GM_idx += nCols; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1387 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1388 GM_idx -= nCols * nRows - 1; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1389 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1390 // Save changes to underlying image. |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1391 m_img.syncPixels (); |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1392 imvec.push_back (m_img); |
18542
30aa4e85f8d5
Fix writing and reading of multipage images.
Carnë Draug <carandraug@octave.org>
parents:
18149
diff
changeset
|
1393 img_fvec += K_offset; |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1394 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1395 break; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1396 } |
11034
6589aaf769f6
Correctly handle logical and integer bit depths
John Swensen <jpswensen@gmail.com>
parents:
10988
diff
changeset
|
1397 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1398 default: |
20825
66cd994d1b79
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20812
diff
changeset
|
1399 error ("__magick_write__: unrecognized Magick::ImageType"); |
8054 | 1400 } |
20825
66cd994d1b79
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20812
diff
changeset
|
1401 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1402 return; |
8054 | 1403 } |
1404 | |
17855
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1405 // Meant to be shared with both imfinfo and imwrite. |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1406 static std::map<octave_idx_type, std::string> |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1407 init_disposal_methods () |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1408 { |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1409 // GIF Specifications: |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1410 // |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1411 // Disposal Method - Indicates the way in which the graphic is to |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1412 // be treated after being displayed. |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1413 // |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
1414 // 0 - No disposal specified. The decoder is |
17855
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1415 // not required to take any action. |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
1416 // 1 - Do not dispose. The graphic is to be left |
17855
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1417 // in place. |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
1418 // 2 - Restore to background color. The area used by the |
17855
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1419 // graphic must be restored to the background color. |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
1420 // 3 - Restore to previous. The decoder is required to |
17855
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1421 // restore the area overwritten by the graphic with |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1422 // what was there prior to rendering the graphic. |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1423 // 4-7 - To be defined. |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1424 static std::map<octave_idx_type, std::string> methods; |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1425 if (methods.empty ()) |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1426 { |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1427 methods[0] = "doNotSpecify"; |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1428 methods[1] = "leaveInPlace"; |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1429 methods[2] = "restoreBG"; |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1430 methods[3] = "restorePrevious"; |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1431 } |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1432 return methods; |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1433 } |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1434 static std::map<std::string, octave_idx_type> |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1435 init_reverse_disposal_methods () |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1436 { |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1437 static std::map<std::string, octave_idx_type> methods; |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1438 if (methods.empty ()) |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1439 { |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1440 methods["donotspecify"] = 0; |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1441 methods["leaveinplace"] = 1; |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1442 methods["restorebg"] = 2; |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1443 methods["restoreprevious"] = 3; |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1444 } |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1445 return methods; |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1446 } |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1447 |
16988
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1448 void static |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
1449 write_file (const std::string& filename, |
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
1450 const std::string& ext, |
16988
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1451 std::vector<Magick::Image>& imvec) |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1452 { |
7974 | 1453 try |
1454 { | |
23807
336f89b6208b
Use character literals 'c' rather than string literals "c" when possible.
Rik <rik@octave.org>
parents:
23795
diff
changeset
|
1455 Magick::writeImages (imvec.begin (), imvec.end (), ext + ':' + filename); |
7974 | 1456 } |
1457 catch (Magick::Warning& w) | |
1458 { | |
1459 warning ("Magick++ warning: %s", w.what ()); | |
1460 } | |
1461 catch (Magick::ErrorCoder& e) | |
1462 { | |
1463 warning ("Magick++ coder error: %s", e.what ()); | |
1464 } | |
1465 catch (Magick::Exception& e) | |
1466 { | |
1467 error ("Magick++ exception: %s", e.what ()); | |
1468 } | |
1469 } | |
1470 | |
1471 #endif | |
1472 | |
21679
44f7664689f2
make __magick_read__ a built-in function (bug #41699)
John W. Eaton <jwe@octave.org>
parents:
21142
diff
changeset
|
1473 DEFUN (__magick_write__, args, , |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
1474 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
1475 @deftypefn {} {} __magick_write__ (@var{fname}, @var{fmt}, @var{img}, @var{map}, @var{options}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
1476 Write image with GraphicsMagick or ImageMagick. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
1477 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
1478 This is a private internal function not intended for direct use. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
1479 Use @code{imwrite} instead. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
1480 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
1481 @seealso{imfinfo, imformats, imread, imwrite} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
1482 @end deftypefn */) |
7974 | 1483 { |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21691
diff
changeset
|
1484 #if defined (HAVE_MAGICK) |
7974 | 1485 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20869
diff
changeset
|
1486 if (args.length () != 5 || ! args(0).is_string () || ! args(1).is_string ()) |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20869
diff
changeset
|
1487 print_usage (); |
16983
4660d047955e
Make use of gripe_disabled_feature() for image IO functions.
Carnë Draug <carandraug+dev@gmail.com>
parents:
16944
diff
changeset
|
1488 |
10947
dc74ce93cfc4
initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
1489 maybe_initialize_magick (); |
dc74ce93cfc4
initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
1490 |
16988
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1491 const std::string filename = args(0).string_value (); |
20704
571508c1ed06
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20703
diff
changeset
|
1492 const std::string ext = args(1).string_value (); |
7974 | 1493 |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
1494 const octave_scalar_map options |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
1495 = args(4).xscalar_map_value ("__magick_write__: OPTIONS must be a struct"); |
7974 | 1496 |
21567
3d25f9f4a62b
maint: Eliminate Britishicisms in the code.
Rik <rik@octave.org>
parents:
21489
diff
changeset
|
1497 const octave_value img = args(2); |
20704
571508c1ed06
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20703
diff
changeset
|
1498 const Matrix cmap = args(3).xmatrix_value ("__magick_write__: invalid MAP"); |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
1499 |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1500 std::vector<Magick::Image> imvec; |
16988
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1501 |
23577
80c42f4cca13
maint: Deprecate is_empty and replace with isempty.
Rik <rik@octave.org>
parents:
23457
diff
changeset
|
1502 if (cmap.isempty ()) |
16988
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1503 { |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1504 const octave_value alpha = options.getfield ("alpha"); |
23579
c20a0fa91c0c
maint: Deprecate is_bool_type and replace with islogical.
Rik <rik@octave.org>
parents:
23577
diff
changeset
|
1505 if (img.islogical ()) |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1506 encode_bool_image (imvec, img.bool_array_value ()); |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1507 else if (img.is_uint8_type ()) |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1508 encode_uint_image<uint8NDArray> (imvec, img.uint8_array_value (), |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1509 alpha.uint8_array_value ()); |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1510 else if (img.is_uint16_type ()) |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1511 encode_uint_image<uint16NDArray> (imvec, img.uint16_array_value (), |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1512 alpha.uint16_array_value ()); |
17228
2f1729cae08f
Initial support for writing of floating point and uint32 images.
Carnë Draug <carandraug@octave.org>
parents:
17226
diff
changeset
|
1513 else if (img.is_uint32_type ()) |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1514 encode_uint_image<uint32NDArray> (imvec, img.uint32_array_value (), |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1515 alpha.uint32_array_value ()); |
23585
570170b6eb09
maint: Deprecate is_float_type and replace with isfloat.
Rik <rik@octave.org>
parents:
23584
diff
changeset
|
1516 else if (img.isfloat ()) |
17228
2f1729cae08f
Initial support for writing of floating point and uint32 images.
Carnë Draug <carandraug@octave.org>
parents:
17226
diff
changeset
|
1517 { |
2f1729cae08f
Initial support for writing of floating point and uint32 images.
Carnë Draug <carandraug@octave.org>
parents:
17226
diff
changeset
|
1518 // For image formats that support floating point values, we write |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
1519 // the actual values. For those who don't, we only use the values |
17228
2f1729cae08f
Initial support for writing of floating point and uint32 images.
Carnë Draug <carandraug@octave.org>
parents:
17226
diff
changeset
|
1520 // on the range [0 1] and save integer values. |
2f1729cae08f
Initial support for writing of floating point and uint32 images.
Carnë Draug <carandraug@octave.org>
parents:
17226
diff
changeset
|
1521 // But here, even for formats that would support floating point |
2f1729cae08f
Initial support for writing of floating point and uint32 images.
Carnë Draug <carandraug@octave.org>
parents:
17226
diff
changeset
|
1522 // values, GM seems unable to do that so we at least make them uint32. |
2f1729cae08f
Initial support for writing of floating point and uint32 images.
Carnë Draug <carandraug@octave.org>
parents:
17226
diff
changeset
|
1523 uint32NDArray clip_img; |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1524 uint32NDArray clip_alpha; |
17228
2f1729cae08f
Initial support for writing of floating point and uint32 images.
Carnë Draug <carandraug@octave.org>
parents:
17226
diff
changeset
|
1525 if (img.is_single_type ()) |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1526 { |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1527 clip_img = img_float2uint<FloatNDArray> |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1528 (img.float_array_value ()); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1529 clip_alpha = img_float2uint<FloatNDArray> |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1530 (alpha.float_array_value ()); |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1531 } |
17228
2f1729cae08f
Initial support for writing of floating point and uint32 images.
Carnë Draug <carandraug@octave.org>
parents:
17226
diff
changeset
|
1532 else |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1533 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1534 clip_img = img_float2uint<NDArray> (img.array_value ()); |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1535 clip_alpha = img_float2uint<NDArray> (alpha.array_value ()); |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1536 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1537 encode_uint_image<uint32NDArray> (imvec, clip_img, clip_alpha); |
17228
2f1729cae08f
Initial support for writing of floating point and uint32 images.
Carnë Draug <carandraug@octave.org>
parents:
17226
diff
changeset
|
1538 } |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1539 else |
20825
66cd994d1b79
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20812
diff
changeset
|
1540 error ("__magick_write__: image type not supported"); |
7974 | 1541 } |
1542 else | |
16988
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1543 { |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1544 // We should not get floating point indexed images here because we |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
1545 // converted them in __imwrite__.m. We should probably do it here |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1546 // but it would look much messier. |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1547 if (img.is_uint8_type ()) |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
1548 encode_indexed_images<uint8NDArray> (imvec, img.uint8_array_value (), |
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
1549 cmap); |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1550 else if (img.is_uint16_type ()) |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
1551 encode_indexed_images<uint16NDArray> (imvec, img.uint16_array_value (), |
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
1552 cmap); |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1553 else |
20825
66cd994d1b79
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20812
diff
changeset
|
1554 error ("__magick_write__: indexed image must be uint8, uint16 or float."); |
16988
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1555 } |
17855
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1556 static std::map<std::string, octave_idx_type> disposal_methods |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1557 = init_reverse_disposal_methods (); |
16988
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1558 |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1559 const octave_idx_type nFrames = imvec.size (); |
16988
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1560 |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1561 const octave_idx_type quality = options.getfield ("quality").int_value (); |
27277
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
26488
diff
changeset
|
1562 const ColumnVector delaytime |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
26488
diff
changeset
|
1563 = options.getfield ("delaytime").column_vector_value (); |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
26488
diff
changeset
|
1564 const Array<std::string> disposalmethod |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
26488
diff
changeset
|
1565 = options.getfield ("disposalmethod").cellstr_value (); |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1566 for (octave_idx_type i = 0; i < nFrames; i++) |
17855
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1567 { |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1568 imvec[i].quality (quality); |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1569 imvec[i].animationDelay (delaytime(i)); |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1570 imvec[i].gifDisposeMethod (disposal_methods[disposalmethod(i)]); |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1571 } |
17854
adb0ba0d0c13
imwrite: implement DelayTime option.
Carnë Draug <carandraug@octave.org>
parents:
17853
diff
changeset
|
1572 |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
1573 // If writemode is set to append, read the image and append to it. Even |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1574 // if set to append, make sure that something was read at all. |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1575 const std::string writemode = options.getfield ("writemode").string_value (); |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21732
diff
changeset
|
1576 if (writemode == "append" && octave::sys::file_stat (filename).exists ()) |
16988
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1577 { |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1578 std::vector<Magick::Image> ini_imvec; |
16988
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1579 read_file (filename, ini_imvec); |
20555
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1580 |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1581 if (ini_imvec.size () > 0) |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1582 { |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1583 ini_imvec.insert (ini_imvec.end (), imvec.begin (), imvec.end ()); |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1584 ini_imvec.swap (imvec); |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1585 } |
16988
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1586 } |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1587 |
17861
870f3e12e163
maint: Use phrase "FIXME:" for problem areas in code.
Rik <rik@octave.org>
parents:
17855
diff
changeset
|
1588 // FIXME: LoopCount or animationIterations |
17855
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1589 // How it should work: |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1590 // |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
1591 // This value is only set for the first image in the sequence. Trying |
17855
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1592 // to set this value with the append mode should have no effect, the |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1593 // value used with the first image is the one that counts (that would |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
1594 // also be Matlab compatible). Thus, the right way to do this would be |
17855
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1595 // to have an else block on the condition above, and set this only |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
1596 // when creating a new file. Since Matlab does not interpret a 4D |
17855
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1597 // matrix as sequence of images to write, its users need to use a for |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1598 // loop and set LoopCount only on the first iteration (it actually |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1599 // throws warnings otherwise) |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1600 // |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1601 // Why is this not done the right way: |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1602 // |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1603 // When GM saves a single image, it discards the value if there is only |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1604 // a single image and sets it to "no loop". Since our default is an |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1605 // infinite loop, if the user tries to do it the Matlab way (setting |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1606 // LoopCount only on the first image) that value will go nowhere. |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1607 // See https://sourceforge.net/p/graphicsmagick/bugs/248/ |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1608 // Because of this, we document to set LoopCount on every iteration |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1609 // (in Matlab will cause a lot of warnings), or pass a 4D matrix with |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1610 // all frames (won't work in Matlab at all). |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1611 // Note that this only needs to be set on the first frame |
bfbe5dcc9943
imwrite: implement DisposalMethod option.
Carnë Draug <carandraug@octave.org>
parents:
17854
diff
changeset
|
1612 imvec[0].animationIterations (options.getfield ("loopcount").uint_value ()); |
17853
aacb9da13df6
imwrite: implement LoopCount option.
Carnë Draug <carandraug@octave.org>
parents:
17787
diff
changeset
|
1613 |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
1614 const std::string compression |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
1615 = options.getfield ("compression").string_value (); |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21966
diff
changeset
|
1616 |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21966
diff
changeset
|
1617 #define COMPRESS_MAGICK_IMAGE_VECTOR(GM_TYPE) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21966
diff
changeset
|
1618 for (std::vector<Magick::Image>::size_type i = 0; i < imvec.size (); i++) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21966
diff
changeset
|
1619 imvec[i].compressType (GM_TYPE) |
20406
5b8e4f668c53
Add compression option to imwrite and default to "none" (bug #45565)
Carnë Draug <carandraug@octave.org>
parents:
20338
diff
changeset
|
1620 |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21966
diff
changeset
|
1621 if (compression == "none") |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21966
diff
changeset
|
1622 COMPRESS_MAGICK_IMAGE_VECTOR (Magick::NoCompression); |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21966
diff
changeset
|
1623 else if (compression == "bzip") |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21966
diff
changeset
|
1624 COMPRESS_MAGICK_IMAGE_VECTOR (Magick::BZipCompression); |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21966
diff
changeset
|
1625 else if (compression == "fax3") |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21966
diff
changeset
|
1626 COMPRESS_MAGICK_IMAGE_VECTOR (Magick::FaxCompression); |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21966
diff
changeset
|
1627 else if (compression == "fax4") |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21966
diff
changeset
|
1628 COMPRESS_MAGICK_IMAGE_VECTOR (Magick::Group4Compression); |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21966
diff
changeset
|
1629 else if (compression == "jpeg") |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21966
diff
changeset
|
1630 COMPRESS_MAGICK_IMAGE_VECTOR (Magick::JPEGCompression); |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21966
diff
changeset
|
1631 else if (compression == "lzw") |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21966
diff
changeset
|
1632 COMPRESS_MAGICK_IMAGE_VECTOR (Magick::LZWCompression); |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21966
diff
changeset
|
1633 else if (compression == "rle") |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21966
diff
changeset
|
1634 COMPRESS_MAGICK_IMAGE_VECTOR (Magick::RLECompression); |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21966
diff
changeset
|
1635 else if (compression == "deflate") |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21966
diff
changeset
|
1636 COMPRESS_MAGICK_IMAGE_VECTOR (Magick::ZipCompression); |
20406
5b8e4f668c53
Add compression option to imwrite and default to "none" (bug #45565)
Carnë Draug <carandraug@octave.org>
parents:
20338
diff
changeset
|
1637 |
5b8e4f668c53
Add compression option to imwrite and default to "none" (bug #45565)
Carnë Draug <carandraug@octave.org>
parents:
20338
diff
changeset
|
1638 #undef COMPRESS_MAGICK_IMAGE_VECTOR |
5b8e4f668c53
Add compression option to imwrite and default to "none" (bug #45565)
Carnë Draug <carandraug@octave.org>
parents:
20338
diff
changeset
|
1639 |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1640 write_file (filename, ext, imvec); |
7974 | 1641 |
20941
a4f5da7c5463
maint: Replace "octave_value_list ()" with "ovl ()".
Rik <rik@octave.org>
parents:
20939
diff
changeset
|
1642 return ovl (); |
7974 | 1643 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20869
diff
changeset
|
1644 #else |
21691
263d18409fdf
Eliminate unused variable warnings for conditionally compiled code.
John W. Eaton <jwe@octave.org>
parents:
21680
diff
changeset
|
1645 |
263d18409fdf
Eliminate unused variable warnings for conditionally compiled code.
John W. Eaton <jwe@octave.org>
parents:
21680
diff
changeset
|
1646 octave_unused_parameter (args); |
263d18409fdf
Eliminate unused variable warnings for conditionally compiled code.
John W. Eaton <jwe@octave.org>
parents:
21680
diff
changeset
|
1647 |
21100
e39e05d90788
Switch gripe_XXX to either err_XXX or warn_XXX naming scheme.
Rik <rik@octave.org>
parents:
21033
diff
changeset
|
1648 err_disabled_feature ("imwrite", "Image IO"); |
7974 | 1649 |
1650 #endif | |
1651 } | |
1652 | |
12805
3641167e5b75
codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents:
11590
diff
changeset
|
1653 /* |
3641167e5b75
codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents:
11590
diff
changeset
|
1654 ## 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
|
1655 %!assert (1) |
3641167e5b75
codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents:
11590
diff
changeset
|
1656 */ |
3641167e5b75
codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents:
11590
diff
changeset
|
1657 |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
1658 // Gets the minimum information from images such as its size and format. Much |
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
1659 // faster than using imfinfo, which slows down a lot since. Note than without |
17351
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1660 // this, we need to read the image once for imfinfo to set defaults (which is |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1661 // done in Octave language), and then again for the actual reading. |
21679
44f7664689f2
make __magick_read__ a built-in function (bug #41699)
John W. Eaton <jwe@octave.org>
parents:
21142
diff
changeset
|
1662 DEFUN (__magick_ping__, args, , |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
1663 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
1664 @deftypefn {} {} __magick_ping__ (@var{fname}, @var{idx}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
1665 Ping image information with GraphicsMagick or ImageMagick. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
1666 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
1667 This is a private internal function not intended for direct use. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
1668 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
1669 @seealso{imfinfo} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
1670 @end deftypefn */) |
17351
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1671 { |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21691
diff
changeset
|
1672 #if defined (HAVE_MAGICK) |
21691
263d18409fdf
Eliminate unused variable warnings for conditionally compiled code.
John W. Eaton <jwe@octave.org>
parents:
21680
diff
changeset
|
1673 |
17351
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1674 if (args.length () < 1 || ! args(0).is_string ()) |
20790
c2d9556d51d0
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20729
diff
changeset
|
1675 print_usage (); |
c2d9556d51d0
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20729
diff
changeset
|
1676 |
17351
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1677 maybe_initialize_magick (); |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1678 |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1679 const std::string filename = args(0).string_value (); |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20869
diff
changeset
|
1680 |
17351
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1681 int idx; |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1682 if (args.length () > 1) |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1683 idx = args(1).int_value () -1; |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1684 else |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1685 idx = 0; |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1686 |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1687 Magick::Image img; |
17705
292319fb7fcc
Catch Magick++ errors and warnings when pinging image (bug #40267)
Carnë Draug <carandraug@octave.org>
parents:
17561
diff
changeset
|
1688 img.subImage (idx); // start ping from this image (in case of multi-page) |
292319fb7fcc
Catch Magick++ errors and warnings when pinging image (bug #40267)
Carnë Draug <carandraug@octave.org>
parents:
17561
diff
changeset
|
1689 img.subRange (1); // ping only one of them |
292319fb7fcc
Catch Magick++ errors and warnings when pinging image (bug #40267)
Carnë Draug <carandraug@octave.org>
parents:
17561
diff
changeset
|
1690 try |
292319fb7fcc
Catch Magick++ errors and warnings when pinging image (bug #40267)
Carnë Draug <carandraug@octave.org>
parents:
17561
diff
changeset
|
1691 { |
292319fb7fcc
Catch Magick++ errors and warnings when pinging image (bug #40267)
Carnë Draug <carandraug@octave.org>
parents:
17561
diff
changeset
|
1692 img.ping (filename); |
292319fb7fcc
Catch Magick++ errors and warnings when pinging image (bug #40267)
Carnë Draug <carandraug@octave.org>
parents:
17561
diff
changeset
|
1693 } |
292319fb7fcc
Catch Magick++ errors and warnings when pinging image (bug #40267)
Carnë Draug <carandraug@octave.org>
parents:
17561
diff
changeset
|
1694 catch (Magick::Warning& w) |
292319fb7fcc
Catch Magick++ errors and warnings when pinging image (bug #40267)
Carnë Draug <carandraug@octave.org>
parents:
17561
diff
changeset
|
1695 { |
292319fb7fcc
Catch Magick++ errors and warnings when pinging image (bug #40267)
Carnë Draug <carandraug@octave.org>
parents:
17561
diff
changeset
|
1696 warning ("Magick++ warning: %s", w.what ()); |
292319fb7fcc
Catch Magick++ errors and warnings when pinging image (bug #40267)
Carnë Draug <carandraug@octave.org>
parents:
17561
diff
changeset
|
1697 } |
292319fb7fcc
Catch Magick++ errors and warnings when pinging image (bug #40267)
Carnë Draug <carandraug@octave.org>
parents:
17561
diff
changeset
|
1698 catch (Magick::Exception& e) |
292319fb7fcc
Catch Magick++ errors and warnings when pinging image (bug #40267)
Carnë Draug <carandraug@octave.org>
parents:
17561
diff
changeset
|
1699 { |
292319fb7fcc
Catch Magick++ errors and warnings when pinging image (bug #40267)
Carnë Draug <carandraug@octave.org>
parents:
17561
diff
changeset
|
1700 error ("Magick++ exception: %s", e.what ()); |
292319fb7fcc
Catch Magick++ errors and warnings when pinging image (bug #40267)
Carnë Draug <carandraug@octave.org>
parents:
17561
diff
changeset
|
1701 } |
292319fb7fcc
Catch Magick++ errors and warnings when pinging image (bug #40267)
Carnë Draug <carandraug@octave.org>
parents:
17561
diff
changeset
|
1702 |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23585
diff
changeset
|
1703 static const char *fields[] = {"rows", "columns", "format", nullptr}; |
17351
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1704 octave_scalar_map ping = octave_scalar_map (string_vector (fields)); |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1705 ping.setfield ("rows", octave_value (img.rows ())); |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1706 ping.setfield ("columns", octave_value (img.columns ())); |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1707 ping.setfield ("format", octave_value (img.magick ())); |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20869
diff
changeset
|
1708 |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20869
diff
changeset
|
1709 return ovl (ping); |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20869
diff
changeset
|
1710 |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20869
diff
changeset
|
1711 #else |
21691
263d18409fdf
Eliminate unused variable warnings for conditionally compiled code.
John W. Eaton <jwe@octave.org>
parents:
21680
diff
changeset
|
1712 |
263d18409fdf
Eliminate unused variable warnings for conditionally compiled code.
John W. Eaton <jwe@octave.org>
parents:
21680
diff
changeset
|
1713 octave_unused_parameter (args); |
263d18409fdf
Eliminate unused variable warnings for conditionally compiled code.
John W. Eaton <jwe@octave.org>
parents:
21680
diff
changeset
|
1714 |
21100
e39e05d90788
Switch gripe_XXX to either err_XXX or warn_XXX naming scheme.
Rik <rik@octave.org>
parents:
21033
diff
changeset
|
1715 err_disabled_feature ("imfinfo", "Image IO"); |
21691
263d18409fdf
Eliminate unused variable warnings for conditionally compiled code.
John W. Eaton <jwe@octave.org>
parents:
21680
diff
changeset
|
1716 |
17351
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1717 #endif |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1718 } |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1719 |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21691
diff
changeset
|
1720 #if defined (HAVE_MAGICK) |
21691
263d18409fdf
Eliminate unused variable warnings for conditionally compiled code.
John W. Eaton <jwe@octave.org>
parents:
21680
diff
changeset
|
1721 |
8144
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1722 static octave_value |
17350 | 1723 magick_to_octave_value (const Magick::CompressionType& magick) |
8144
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1724 { |
17350 | 1725 switch (magick) |
1726 { | |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1727 case Magick::NoCompression: |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1728 return octave_value ("none"); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1729 case Magick::BZipCompression: |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1730 return octave_value ("bzip"); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1731 case Magick::FaxCompression: |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1732 return octave_value ("fax3"); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1733 case Magick::Group4Compression: |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1734 return octave_value ("fax4"); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1735 case Magick::JPEGCompression: |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1736 return octave_value ("jpeg"); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1737 case Magick::LZWCompression: |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1738 return octave_value ("lzw"); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1739 case Magick::RLECompression: |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1740 // This is named "rle" for the HDF, but the same thing is named |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1741 // "ccitt" and "PackBits" for binary and non-binary images in TIFF. |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1742 return octave_value ("rle"); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1743 case Magick::ZipCompression: |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1744 return octave_value ("deflate"); |
17362
6e1a3b8fc312
__magick_finfo__: remove recent Magick compression types (bug #39913)
Carnë Draug <carandraug@octave.org>
parents:
17359
diff
changeset
|
1745 |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
1746 // The following are present only in recent versions of GraphicsMagick. |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
1747 // At the moment the only use of this would be to have imfinfo report |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
1748 // the compression method. In the future, someone could implement |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
1749 // the Compression option for imwrite in which case a macro in |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
1750 // configure.ac will have to check for their presence of this. |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
1751 // See bug #39913 |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
1752 // case Magick::LZMACompression: |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
1753 // return octave_value ("lzma"); |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
1754 // case Magick::JPEG2000Compression: |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
1755 // return octave_value ("jpeg2000"); |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
1756 // case Magick::JBIG1Compression: |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
1757 // return octave_value ("jbig1"); |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
1758 // case Magick::JBIG2Compression: |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
1759 // return octave_value ("jbig2"); |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
1760 |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1761 default: |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1762 return octave_value ("undefined"); |
17350 | 1763 } |
8144
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1764 } |
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1765 |
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1766 static octave_value |
17350 | 1767 magick_to_octave_value (const Magick::EndianType& magick) |
8144
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1768 { |
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1769 switch (magick) |
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1770 { |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1771 case Magick::LSBEndian: |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1772 return octave_value ("little-endian"); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1773 case Magick::MSBEndian: |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1774 return octave_value ("big-endian"); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1775 default: |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1776 return octave_value ("undefined"); |
8144
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1777 } |
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1778 } |
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1779 |
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1780 static octave_value |
17350 | 1781 magick_to_octave_value (const Magick::OrientationType& magick) |
1782 { | |
1783 switch (magick) | |
1784 { | |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
1785 // Values come from the TIFF6 spec |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1786 case Magick::TopLeftOrientation: |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1787 return octave_value (1); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1788 case Magick::TopRightOrientation: |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1789 return octave_value (2); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1790 case Magick::BottomRightOrientation: |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1791 return octave_value (3); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1792 case Magick::BottomLeftOrientation: |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1793 return octave_value (4); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1794 case Magick::LeftTopOrientation: |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1795 return octave_value (5); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1796 case Magick::RightTopOrientation: |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1797 return octave_value (6); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1798 case Magick::RightBottomOrientation: |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1799 return octave_value (7); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1800 case Magick::LeftBottomOrientation: |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1801 return octave_value (8); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1802 default: |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1803 return octave_value (1); |
17350 | 1804 } |
1805 } | |
1806 | |
1807 static octave_value | |
1808 magick_to_octave_value (const Magick::ResolutionType& magick) | |
8144
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1809 { |
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1810 switch (magick) |
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1811 { |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1812 case Magick::PixelsPerInchResolution: |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1813 return octave_value ("Inch"); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1814 case Magick::PixelsPerCentimeterResolution: |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1815 return octave_value ("Centimeter"); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1816 default: |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1817 return octave_value ("undefined"); |
8144
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1818 } |
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1819 } |
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1820 |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1821 static bool |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1822 is_valid_exif (const std::string& val) |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1823 { |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1824 // Sometimes GM will return the string "unknown" instead of empty |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1825 // for an empty value. |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1826 return (! val.empty () && val != "unknown"); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1827 } |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1828 |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1829 static void |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1830 fill_exif (octave_scalar_map& map, Magick::Image& img, |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1831 const std::string& key) |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1832 { |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1833 const std::string attr = img.attribute ("EXIF:" + key); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1834 if (is_valid_exif (attr)) |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1835 map.setfield (key, octave_value (attr)); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1836 return; |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1837 } |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1838 |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1839 static void |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1840 fill_exif_ints (octave_scalar_map& map, Magick::Image& img, |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1841 const std::string& key) |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1842 { |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1843 const std::string attr = img.attribute ("EXIF:" + key); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1844 if (is_valid_exif (attr)) |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1845 { |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1846 // string of the type "float,float,float....." |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1847 float number; |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1848 ColumnVector values (std::count (attr.begin (), attr.end (), ',') +1); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1849 std::string sub; |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1850 std::istringstream sstream (attr); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1851 octave_idx_type n = 0; |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1852 while (std::getline (sstream, sub, char (','))) |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1853 { |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1854 sscanf (sub.c_str (), "%f", &number); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1855 values(n++) = number; |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1856 } |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1857 map.setfield (key, octave_value (values)); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1858 } |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1859 return; |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1860 } |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1861 |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1862 static void |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1863 fill_exif_floats (octave_scalar_map& map, Magick::Image& img, |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1864 const std::string& key) |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1865 { |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1866 const std::string attr = img.attribute ("EXIF:" + key); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1867 if (is_valid_exif (attr)) |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1868 { |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1869 // string of the type "int/int,int/int,int/int....." |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1870 int numerator; |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1871 int denominator; |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1872 ColumnVector values (std::count (attr.begin (), attr.end (), ',') +1); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1873 std::string sub; |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1874 std::istringstream sstream (attr); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1875 octave_idx_type n = 0; |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1876 while (std::getline (sstream, sub, ',')) |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1877 { |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1878 sscanf (sub.c_str (), "%i/%i", &numerator, &denominator); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1879 values(n++) = double (numerator) / double (denominator); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1880 } |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1881 map.setfield (key, octave_value (values)); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1882 } |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1883 return; |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1884 } |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1885 |
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
|
1886 #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
|
1887 |
21679
44f7664689f2
make __magick_read__ a built-in function (bug #41699)
John W. Eaton <jwe@octave.org>
parents:
21142
diff
changeset
|
1888 DEFUN (__magick_finfo__, args, , |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
1889 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
1890 @deftypefn {} {} __magick_finfo__ (@var{fname}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
1891 Read image information with GraphicsMagick or ImageMagick. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
1892 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
1893 This is a private internal function not intended for direct use. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
1894 Use @code{imfinfo} instead. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
1895 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
1896 @seealso{imfinfo, imformats, imread, imwrite} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
1897 @end deftypefn */) |
8144
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1898 { |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21691
diff
changeset
|
1899 #if defined (HAVE_MAGICK) |
8144
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1900 |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
1901 if (args.length () < 1 || ! args(0).is_string ()) |
20790
c2d9556d51d0
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20729
diff
changeset
|
1902 print_usage (); |
8144
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1903 |
10947
dc74ce93cfc4
initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
1904 maybe_initialize_magick (); |
dc74ce93cfc4
initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
1905 |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
1906 const std::string filename = args(0).string_value (); |
8144
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1907 |
17350 | 1908 std::vector<Magick::Image> imvec; |
1909 read_file (filename, imvec); | |
20555
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1910 |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1911 const octave_idx_type nFrames = imvec.size (); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1912 const std::string format = imvec[0].magick (); |
17350 | 1913 |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
1914 // Here's how this function works. We need to return a struct array, one |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1915 // struct for each image in the file (remember, there are image |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
1916 // that allow for multiple images in the same file). Now, Matlab seems |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1917 // to have format specific code so the fields on the struct are different |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
1918 // for each format. It only has a small subset that is common to all |
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
1919 // of them, the others are undocumented. Because we try to abstract from |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1920 // the formats we always return the same list of fields (note that with |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
1921 // GM we support more than 88 formats. That's way more than Matlab, and |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1922 // I don't want to write specific code for each of them). |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1923 // |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1924 // So what we do is we create an octave_scalar_map, fill it with the |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1925 // information for that image, and then insert it into an octave_map. |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1926 // Because in the same file, different images may have values for |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1927 // different fields, we can't create a field only if there's a value. |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1928 // Bad things happen if we merge octave_scalar_maps with different |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1929 // fields from the others (suppose for example a TIFF file with 4 images, |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1930 // where only the third image has a colormap. |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1931 |
17350 | 1932 static const char *fields[] = |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1933 { |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1934 // These are fields that must always appear for Matlab. |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1935 "Filename", |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1936 "FileModDate", |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1937 "FileSize", |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1938 "Format", |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1939 "FormatVersion", |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1940 "Width", |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1941 "Height", |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1942 "BitDepth", |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1943 "ColorType", |
10333
0c42b6b7da24
imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents:
10298
diff
changeset
|
1944 |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
1945 // These are format specific or not existent in Matlab. The most |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1946 // annoying thing is that Matlab may have different names for the |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1947 // same thing in different formats. |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1948 "DelayTime", |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1949 "DisposalMethod", |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1950 "LoopCount", |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1951 "ByteOrder", |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1952 "Gamma", |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1953 "Chromaticities", |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1954 "Comment", |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1955 "Quality", |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1956 "Compression", // same as CompressionType |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1957 "Colormap", // same as ColorTable (in PNG) |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1958 "Orientation", |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1959 "ResolutionUnit", |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1960 "XResolution", |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1961 "YResolution", |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1962 "Software", // sometimes is an Exif tag |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1963 "Make", // actually an Exif tag |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1964 "Model", // actually an Exif tag |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1965 "DateTime", // actually an Exif tag |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1966 "ImageDescription", // actually an Exif tag |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1967 "Artist", // actually an Exif tag |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1968 "Copyright", // actually an Exif tag |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1969 "DigitalCamera", |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1970 "GPSInfo", |
20097
1f9ed81bd173
maint: Fix spelling and grammar mistakes in docs and comments (bug #44878)
Rafael Laboissiere <rafael@laboissiere.net>
parents:
19885
diff
changeset
|
1971 // Notes for the future: GM allows one to get many attributes, and even has |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1972 // attribute() to obtain arbitrary ones, that may exist in only some |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
1973 // cases. The following is a list of some methods and into what possible |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1974 // Matlab compatible values they may be converted. |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1975 // |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1976 // colorSpace() -> PhotometricInterpretation |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1977 // backgroundColor() -> BackgroundColor |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1978 // interlaceType() -> Interlaced, InterlaceType, and PlanarConfiguration |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1979 // label() -> Title |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23585
diff
changeset
|
1980 nullptr |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1981 }; |
10333
0c42b6b7da24
imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents:
10298
diff
changeset
|
1982 |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1983 // The one we will return at the end |
17350 | 1984 octave_map info (dim_vector (nFrames, 1), string_vector (fields)); |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11585
diff
changeset
|
1985 |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1986 // Some of the fields in the struct are about file information and will be |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
1987 // the same for all images in the file. So we create a template, fill in |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1988 // those values, and make a copy of the template for each image. |
17350 | 1989 octave_scalar_map template_info = (string_vector (fields)); |
1990 | |
1991 template_info.setfield ("Format", octave_value (format)); | |
1992 // We can't actually get FormatVersion but even Matlab sometimes can't. | |
1993 template_info.setfield ("FormatVersion", octave_value ("")); | |
10333
0c42b6b7da24
imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents:
10298
diff
changeset
|
1994 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21732
diff
changeset
|
1995 const octave::sys::file_stat fs (filename); |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20869
diff
changeset
|
1996 if (! fs) |
20825
66cd994d1b79
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20812
diff
changeset
|
1997 error ("imfinfo: error reading '%s': %s", filename.c_str (), |
66cd994d1b79
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20812
diff
changeset
|
1998 fs.error ().c_str ()); |
17350 | 1999 |
21730
30c53770f47e
use namespace for system time classes
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
2000 const octave::sys::localtime mtime (fs.mtime ()); |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20869
diff
changeset
|
2001 const std::string filetime = mtime.strftime ("%e-%b-%Y %H:%M:%S"); |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20869
diff
changeset
|
2002 template_info.setfield ("Filename", octave_value (filename)); |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20869
diff
changeset
|
2003 template_info.setfield ("FileModDate", octave_value (filetime)); |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20869
diff
changeset
|
2004 template_info.setfield ("FileSize", octave_value (fs.size ())); |
17350 | 2005 |
2006 for (octave_idx_type frame = 0; frame < nFrames; frame++) | |
2007 { | |
22860
0b1e25cc4457
eliminate use of OCTAVE_QUIT macro in C++ sources
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
2008 octave_quit (); |
0b1e25cc4457
eliminate use of OCTAVE_QUIT macro in C++ sources
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
2009 |
17350 | 2010 octave_scalar_map info_frame (template_info); |
2011 const Magick::Image img = imvec[frame]; | |
2012 | |
2013 info_frame.setfield ("Width", octave_value (img.columns ())); | |
2014 info_frame.setfield ("Height", octave_value (img.rows ())); | |
2015 info_frame.setfield ("BitDepth", | |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2016 octave_value (get_depth (const_cast<Magick::Image&> (img)))); |
17350 | 2017 |
2018 // Stuff related to colormap, image class and type | |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
2019 // Because GM is too smart for us... Read the comments in is_indexed() |
17350 | 2020 { |
2021 std::string color_type; | |
2022 Matrix cmap; | |
2023 if (is_indexed (img)) | |
2024 { | |
2025 color_type = "indexed"; | |
27277
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
26488
diff
changeset
|
2026 cmap = read_maps (const_cast<Magick::Image&> (img))(0).matrix_value (); |
17350 | 2027 } |
2028 else | |
2029 { | |
2030 switch (img.type ()) | |
2031 { | |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2032 case Magick::BilevelType: |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2033 case Magick::GrayscaleType: |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2034 case Magick::GrayscaleMatteType: |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2035 color_type = "grayscale"; |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2036 break; |
17350 | 2037 |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2038 case Magick::TrueColorType: |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2039 case Magick::TrueColorMatteType: |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2040 color_type = "truecolor"; |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2041 break; |
17350 | 2042 |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2043 case Magick::PaletteType: |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2044 case Magick::PaletteMatteType: |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2045 // we should never get here or is_indexed needs to be fixed |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2046 color_type = "indexed"; |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2047 break; |
17350 | 2048 |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2049 case Magick::ColorSeparationType: |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2050 case Magick::ColorSeparationMatteType: |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2051 color_type = "CMYK"; |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2052 break; |
17350 | 2053 |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2054 default: |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2055 color_type = "undefined"; |
17350 | 2056 } |
2057 } | |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2058 info_frame.setfield ("ColorType", octave_value (color_type)); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2059 info_frame.setfield ("Colormap", octave_value (cmap)); |
17350 | 2060 } |
2061 | |
2062 { | |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
2063 // Not all images have chroma values. In such cases, they'll |
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
2064 // be all zeros. So rather than send a matrix of zeros, we will |
17350 | 2065 // check for that, and send an empty vector instead. |
2066 RowVector chromaticities (8); | |
23449
c763214a8260
maint: Use convention 'int *x' for naming pointers.
Rik <rik@octave.org>
parents:
23416
diff
changeset
|
2067 double *chroma_fvec = chromaticities.fortran_vec (); |
17350 | 2068 img.chromaWhitePoint (&chroma_fvec[0], &chroma_fvec[1]); |
2069 img.chromaRedPrimary (&chroma_fvec[2], &chroma_fvec[3]); | |
2070 img.chromaGreenPrimary (&chroma_fvec[4], &chroma_fvec[5]); | |
2071 img.chromaBluePrimary (&chroma_fvec[6], &chroma_fvec[7]); | |
2072 if (chromaticities.nnz () == 0) | |
2073 chromaticities = RowVector (0); | |
2074 info_frame.setfield ("Chromaticities", octave_value (chromaticities)); | |
2075 } | |
2076 | |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2077 info_frame.setfield ("Gamma", octave_value (img.gamma ())); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2078 info_frame.setfield ("XResolution", octave_value (img.xResolution ())); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2079 info_frame.setfield ("YResolution", octave_value (img.yResolution ())); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2080 info_frame.setfield ("DelayTime", octave_value (img.animationDelay ())); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2081 info_frame.setfield ("LoopCount", |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2082 octave_value (img.animationIterations ())); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2083 info_frame.setfield ("Quality", octave_value (img.quality ())); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2084 info_frame.setfield ("Comment", octave_value (img.comment ())); |
17350 | 2085 |
2086 info_frame.setfield ("Compression", | |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2087 magick_to_octave_value (img.compressType ())); |
17350 | 2088 info_frame.setfield ("Orientation", |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2089 magick_to_octave_value (img.orientation ())); |
17350 | 2090 info_frame.setfield ("ResolutionUnit", |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2091 magick_to_octave_value (img.resolutionUnits ())); |
17350 | 2092 info_frame.setfield ("ByteOrder", |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2093 magick_to_octave_value (img.endian ())); |
17350 | 2094 |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2095 // It is not possible to know if there's an Exif field so we just |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
2096 // check for the Exif Version value. If it does exists, then we |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2097 // bother about looking for specific fields. |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2098 { |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2099 Magick::Image& cimg = const_cast<Magick::Image&> (img); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2100 |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2101 // These will be in Exif tags but must appear as fields in the |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2102 // base struct array, not as another struct in one of its fields. |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2103 // This is likely because they belong to the Baseline TIFF specs |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
2104 // and may appear out of the Exif tag. So first we check if it |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2105 // exists outside the Exif tag. |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2106 // See Section 4.6.4, table 4, page 28 of Exif specs version 2.3 |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2107 // (CIPA DC- 008-Translation- 2010) |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2108 static const char *base_exif_str_fields[] = |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2109 { |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2110 "DateTime", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2111 "ImageDescription", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2112 "Make", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2113 "Model", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2114 "Software", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2115 "Artist", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2116 "Copyright", |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23585
diff
changeset
|
2117 nullptr, |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2118 }; |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2119 static const string_vector base_exif_str (base_exif_str_fields); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2120 static const octave_idx_type n_base_exif_str = base_exif_str.numel (); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2121 for (octave_idx_type field = 0; field < n_base_exif_str; field++) |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2122 { |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2123 info_frame.setfield (base_exif_str[field], |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2124 octave_value (cimg.attribute (base_exif_str[field]))); |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2125 fill_exif (info_frame, cimg, base_exif_str[field]); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2126 } |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2127 |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2128 octave_scalar_map camera; |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2129 octave_scalar_map gps; |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2130 if (! cimg.attribute ("EXIF:ExifVersion").empty ()) |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2131 { |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2132 // See Section 4.6.5, table 7 and 8, over pages page 42 to 43 |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2133 // of Exif specs version 2.3 (CIPA DC- 008-Translation- 2010) |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2134 |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2135 // Listed on the Exif specs as being of type ASCII. |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2136 static const char *exif_str_fields[] = |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2137 { |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2138 "RelatedSoundFile", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2139 "DateTimeOriginal", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2140 "DateTimeDigitized", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2141 "SubSecTime", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2142 "DateTimeOriginal", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2143 "SubSecTimeOriginal", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2144 "SubSecTimeDigitized", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2145 "ImageUniqueID", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2146 "CameraOwnerName", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2147 "BodySerialNumber", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2148 "LensMake", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2149 "LensModel", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2150 "LensSerialNumber", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2151 "SpectralSensitivity", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2152 // These last two are of type undefined but most likely will |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
2153 // be strings. Even if they're not GM returns a string anyway. |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2154 "UserComment", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2155 "MakerComment", |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23585
diff
changeset
|
2156 nullptr |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2157 }; |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2158 static const string_vector exif_str (exif_str_fields); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2159 static const octave_idx_type n_exif_str = exif_str.numel (); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2160 for (octave_idx_type field = 0; field < n_exif_str; field++) |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2161 fill_exif (camera, cimg, exif_str[field]); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2162 |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2163 // Listed on the Exif specs as being of type SHORT or LONG. |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2164 static const char *exif_int_fields[] = |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2165 { |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2166 "ColorSpace", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2167 "ExifImageWidth", // PixelXDimension (CPixelXDimension in Matlab) |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2168 "ExifImageHeight", // PixelYDimension (CPixelYDimension in Matlab) |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2169 "PhotographicSensitivity", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2170 "StandardOutputSensitivity", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2171 "RecommendedExposureIndex", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2172 "ISOSpeed", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2173 "ISOSpeedLatitudeyyy", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2174 "ISOSpeedLatitudezzz", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2175 "FocalPlaneResolutionUnit", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2176 "FocalLengthIn35mmFilm", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2177 // Listed as SHORT or LONG but with more than 1 count. |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2178 "SubjectArea", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2179 "SubjectLocation", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2180 // While the following are an integer, their value have a meaning |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2181 // that must be represented as a string for Matlab compatibility. |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2182 // For example, a 3 on ExposureProgram, would return |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2183 // "Aperture priority" as defined on the Exif specs. |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2184 "ExposureProgram", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2185 "SensitivityType", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2186 "MeteringMode", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2187 "LightSource", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2188 "Flash", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2189 "SensingMethod", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2190 "FileSource", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2191 "CustomRendered", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2192 "ExposureMode", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2193 "WhiteBalance", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2194 "SceneCaptureType", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2195 "GainControl", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2196 "Contrast", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2197 "Saturation", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2198 "Sharpness", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2199 "SubjectDistanceRange", |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23585
diff
changeset
|
2200 nullptr |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2201 }; |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2202 static const string_vector exif_int (exif_int_fields); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2203 static const octave_idx_type n_exif_int = exif_int.numel (); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2204 for (octave_idx_type field = 0; field < n_exif_int; field++) |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2205 fill_exif_ints (camera, cimg, exif_int[field]); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2206 |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2207 // Listed as RATIONAL or SRATIONAL |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2208 static const char *exif_float_fields[] = |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2209 { |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2210 "Gamma", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2211 "CompressedBitsPerPixel", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2212 "ExposureTime", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2213 "FNumber", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2214 "ShutterSpeedValue", // SRATIONAL |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2215 "ApertureValue", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2216 "BrightnessValue", // SRATIONAL |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2217 "ExposureBiasValue", // SRATIONAL |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2218 "MaxApertureValue", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2219 "SubjectDistance", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2220 "FocalLength", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2221 "FlashEnergy", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2222 "FocalPlaneXResolution", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2223 "FocalPlaneYResolution", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2224 "ExposureIndex", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2225 "DigitalZoomRatio", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2226 // Listed as RATIONAL or SRATIONAL with more than 1 count. |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2227 "LensSpecification", |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23585
diff
changeset
|
2228 nullptr |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2229 }; |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2230 static const string_vector exif_float (exif_float_fields); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2231 static const octave_idx_type n_exif_float = exif_float.numel (); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2232 for (octave_idx_type field = 0; field < n_exif_float; field++) |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2233 fill_exif_floats (camera, cimg, exif_float[field]); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2234 |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2235 // Inside a Exif field, it is possible that there is also a |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
2236 // GPS field. This is not the same as ExifVersion but seems |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2237 // to be how we have to check for it. |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2238 if (cimg.attribute ("EXIF:GPSInfo") != "unknown") |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2239 { |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2240 // The story here is the same as with Exif. |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2241 // See Section 4.6.6, table 15 on page 68 of Exif specs |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2242 // version 2.3 (CIPA DC- 008-Translation- 2010) |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2243 |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2244 static const char *gps_str_fields[] = |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2245 { |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2246 "GPSLatitudeRef", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2247 "GPSLongitudeRef", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2248 "GPSAltitudeRef", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2249 "GPSSatellites", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2250 "GPSStatus", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2251 "GPSMeasureMode", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2252 "GPSSpeedRef", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2253 "GPSTrackRef", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2254 "GPSImgDirectionRef", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2255 "GPSMapDatum", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2256 "GPSDestLatitudeRef", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2257 "GPSDestLongitudeRef", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2258 "GPSDestBearingRef", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2259 "GPSDestDistanceRef", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2260 "GPSDateStamp", |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23585
diff
changeset
|
2261 nullptr |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2262 }; |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2263 static const string_vector gps_str (gps_str_fields); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2264 static const octave_idx_type n_gps_str = gps_str.numel (); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2265 for (octave_idx_type field = 0; field < n_gps_str; field++) |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2266 fill_exif (gps, cimg, gps_str[field]); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2267 |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2268 static const char *gps_int_fields[] = |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2269 { |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2270 "GPSDifferential", |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23585
diff
changeset
|
2271 nullptr |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2272 }; |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2273 static const string_vector gps_int (gps_int_fields); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2274 static const octave_idx_type n_gps_int = gps_int.numel (); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2275 for (octave_idx_type field = 0; field < n_gps_int; field++) |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2276 fill_exif_ints (gps, cimg, gps_int[field]); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2277 |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2278 static const char *gps_float_fields[] = |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2279 { |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2280 "GPSAltitude", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2281 "GPSDOP", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2282 "GPSSpeed", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2283 "GPSTrack", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2284 "GPSImgDirection", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2285 "GPSDestBearing", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2286 "GPSDestDistance", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2287 "GPSHPositioningError", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2288 // Listed as RATIONAL or SRATIONAL with more than 1 count. |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2289 "GPSLatitude", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2290 "GPSLongitude", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2291 "GPSTimeStamp", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2292 "GPSDestLatitude", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2293 "GPSDestLongitude", |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23585
diff
changeset
|
2294 nullptr |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2295 }; |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2296 static const string_vector gps_float (gps_float_fields); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2297 static const octave_idx_type n_gps_float = gps_float.numel (); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2298 for (octave_idx_type field = 0; field < n_gps_float; field++) |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2299 fill_exif_floats (gps, cimg, gps_float[field]); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2300 |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2301 } |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2302 } |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2303 info_frame.setfield ("DigitalCamera", octave_value (camera)); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2304 info_frame.setfield ("GPSInfo", octave_value (gps)); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2305 } |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2306 |
17350 | 2307 info.fast_elem_insert (frame, info_frame); |
2308 } | |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2309 |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2310 if (format == "GIF") |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2311 { |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2312 static std::map<octave_idx_type, std::string> disposal_methods |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2313 = init_disposal_methods (); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2314 string_vector methods (nFrames); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2315 for (octave_idx_type frame = 0; frame < nFrames; frame++) |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2316 methods[frame] = disposal_methods[imvec[frame].gifDisposeMethod ()]; |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2317 info.setfield ("DisposalMethod", Cell (methods)); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2318 } |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2319 else |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2320 info.setfield ("DisposalMethod", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2321 Cell (dim_vector (nFrames, 1), octave_value (""))); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2322 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20869
diff
changeset
|
2323 return ovl (info); |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20869
diff
changeset
|
2324 |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20869
diff
changeset
|
2325 #else |
21691
263d18409fdf
Eliminate unused variable warnings for conditionally compiled code.
John W. Eaton <jwe@octave.org>
parents:
21680
diff
changeset
|
2326 |
263d18409fdf
Eliminate unused variable warnings for conditionally compiled code.
John W. Eaton <jwe@octave.org>
parents:
21680
diff
changeset
|
2327 octave_unused_parameter (args); |
263d18409fdf
Eliminate unused variable warnings for conditionally compiled code.
John W. Eaton <jwe@octave.org>
parents:
21680
diff
changeset
|
2328 |
21100
e39e05d90788
Switch gripe_XXX to either err_XXX or warn_XXX naming scheme.
Rik <rik@octave.org>
parents:
21033
diff
changeset
|
2329 err_disabled_feature ("imfinfo", "Image IO"); |
21691
263d18409fdf
Eliminate unused variable warnings for conditionally compiled code.
John W. Eaton <jwe@octave.org>
parents:
21680
diff
changeset
|
2330 |
8144
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
2331 #endif |
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
2332 } |
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
2333 |
12805
3641167e5b75
codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents:
11590
diff
changeset
|
2334 /* |
3641167e5b75
codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents:
11590
diff
changeset
|
2335 ## 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
|
2336 %!assert (1) |
3641167e5b75
codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents:
11590
diff
changeset
|
2337 */ |
3641167e5b75
codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents:
11590
diff
changeset
|
2338 |
21679
44f7664689f2
make __magick_read__ a built-in function (bug #41699)
John W. Eaton <jwe@octave.org>
parents:
21142
diff
changeset
|
2339 DEFUN (__magick_formats__, args, , |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
2340 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
2341 @deftypefn {} {} __magick_imformats__ (@var{formats}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
2342 Fill formats info with GraphicsMagick CoderInfo. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
2343 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
2344 @seealso{imfinfo, imformats, imread, imwrite} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
2345 @end deftypefn */) |
16901
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2346 { |
23584
7ed6b258db91
maint: Deprecate is_map and replace with isstruct.
Rik <rik@octave.org>
parents:
23579
diff
changeset
|
2347 if (args.length () != 1 || ! args(0).isstruct ()) |
20790
c2d9556d51d0
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20729
diff
changeset
|
2348 print_usage (); |
c2d9556d51d0
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20729
diff
changeset
|
2349 |
16901
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2350 octave_map formats = args(0).map_value (); |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2351 |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21691
diff
changeset
|
2352 #if defined (HAVE_MAGICK) |
21691
263d18409fdf
Eliminate unused variable warnings for conditionally compiled code.
John W. Eaton <jwe@octave.org>
parents:
21680
diff
changeset
|
2353 |
16901
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2354 maybe_initialize_magick (); |
21489
ea81c2fdd568
imformats: return empty instead of error if there's no support for image IO.
Carnë Draug <carandraug@octave.org>
parents:
21358
diff
changeset
|
2355 |
16901
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2356 for (octave_idx_type idx = 0; idx < formats.numel (); idx++) |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2357 { |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2358 try |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2359 { |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2360 octave_scalar_map fmt = formats.checkelem (idx); |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2361 Magick::CoderInfo coder (fmt.getfield ("coder").string_value ()); |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2362 |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2363 fmt.setfield ("description", octave_value (coder.description ())); |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2364 fmt.setfield ("multipage", coder.isMultiFrame () ? true : false); |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
2365 // default for read and write is a function handle. If we can't |
16901
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2366 // read or write them, them set it to an empty value |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2367 if (! coder.isReadable ()) |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2368 fmt.setfield ("read", Matrix ()); |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2369 if (! coder.isWritable ()) |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2370 fmt.setfield ("write", Matrix ()); |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2371 formats.fast_elem_insert (idx, fmt); |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2372 } |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2373 catch (Magick::Exception& e) |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2374 { |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21736
diff
changeset
|
2375 // Exception here are missing formats. So we remove the format |
16901
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2376 // from the structure and reduce idx. |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2377 formats.delete_elements (idx); |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2378 idx--; |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2379 } |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2380 } |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20869
diff
changeset
|
2381 |
21489
ea81c2fdd568
imformats: return empty instead of error if there's no support for image IO.
Carnë Draug <carandraug@octave.org>
parents:
21358
diff
changeset
|
2382 #else |
21691
263d18409fdf
Eliminate unused variable warnings for conditionally compiled code.
John W. Eaton <jwe@octave.org>
parents:
21680
diff
changeset
|
2383 |
21489
ea81c2fdd568
imformats: return empty instead of error if there's no support for image IO.
Carnë Draug <carandraug@octave.org>
parents:
21358
diff
changeset
|
2384 formats = octave_map (dim_vector (1, 0), formats.fieldnames ()); |
21691
263d18409fdf
Eliminate unused variable warnings for conditionally compiled code.
John W. Eaton <jwe@octave.org>
parents:
21680
diff
changeset
|
2385 |
16901
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2386 #endif |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20869
diff
changeset
|
2387 |
21489
ea81c2fdd568
imformats: return empty instead of error if there's no support for image IO.
Carnë Draug <carandraug@octave.org>
parents:
21358
diff
changeset
|
2388 return ovl (formats); |
16901
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2389 } |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2390 |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2391 /* |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2392 ## No test needed for internal helper function. |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2393 %!assert (1) |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2394 */ |