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