Mercurial > octave-nkf
annotate libinterp/dldfcn/__magick_read__.cc @ 17455:b76b14e386b3
Replace ambiguous call to pow with bit shift
* __magick_read__.cc (encode_uint_image<T>): Replace ambiguous call to pow
with bit shift for computing integer powers of two.
author | Mike Miller <mtmiller@ieee.org> |
---|---|
date | Fri, 20 Sep 2013 18:43:43 -0400 |
parents | 8508b8ae46a8 |
children | b41860a0bc24 |
rev | line source |
---|---|
7925
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
1 /* |
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
2 |
16984
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
3 Copyright (C) 2013 Carnë Draug |
14138
72c96de7a403
maint: update copyright notices for 2012
John W. Eaton <jwe@octave.org>
parents:
13029
diff
changeset
|
4 Copyright (C) 2002-2012 Andy Adler |
7932 | 5 Copyright (C) 2008 Thomas L. Scofield |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
6 Copyright (C) 2010 David Grundberg |
7925
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
7 |
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
8 This file is part of Octave. |
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
9 |
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
10 Octave is free software; you can redistribute it and/or modify it |
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
11 under the terms of the GNU General Public License as published by the |
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
12 Free Software Foundation; either version 3 of the License, or (at your |
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
13 option) any later version. |
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
14 |
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
15 Octave is distributed in the hope that it will be useful, but WITHOUT |
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
16 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
17 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
18 for more details. |
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
19 |
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
20 You should have received a copy of the GNU General Public License |
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
21 along with Octave; see the file COPYING. If not, see |
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
22 <http://www.gnu.org/licenses/>. |
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
23 |
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
24 */ |
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
25 |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
26 #ifdef HAVE_CONFIG_H |
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
27 #include <config.h> |
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
28 #endif |
7925
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
29 |
10333
0c42b6b7da24
imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents:
10298
diff
changeset
|
30 #include "file-stat.h" |
10390
ad0b54ae206a
__magick_read__ (F__magick_read__): call Magick::InitializeMagick
John W. Eaton <jwe@octave.org>
parents:
10350
diff
changeset
|
31 #include "oct-env.h" |
10333
0c42b6b7da24
imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents:
10298
diff
changeset
|
32 #include "oct-time.h" |
0c42b6b7da24
imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents:
10298
diff
changeset
|
33 |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
34 #include "defun-dld.h" |
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
35 #include "error.h" |
8054 | 36 #include "ov-struct.h" |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
37 |
16925
5c25f7ed080c
*__magick_read__.cc: add missing include of gripes.h
Torsten <ttl@justmail.de>
parents:
16901
diff
changeset
|
38 #include "gripes.h" |
5c25f7ed080c
*__magick_read__.cc: add missing include of gripes.h
Torsten <ttl@justmail.de>
parents:
16901
diff
changeset
|
39 |
7937
6661387827d6
Allow build without GraphicsMagick installed
David Bateman <dbateman@free.fr>
parents:
7933
diff
changeset
|
40 #ifdef HAVE_MAGICK |
6661387827d6
Allow build without GraphicsMagick installed
David Bateman <dbateman@free.fr>
parents:
7933
diff
changeset
|
41 |
9575
55ecaefb7d0f
Use pkg-config to configure GraphicsMagick++.
David Grundberg <individ@acc.umu.se>
parents:
9439
diff
changeset
|
42 #include <Magick++.h> |
10739
d27bd2f74137
src/DLD_FUNCTIONS/__magick_read__.cc: restore locale after GraphicsMagick initialisation
Soren Hauberg <hauberg@gmail.com>
parents:
10390
diff
changeset
|
43 #include <clocale> |
7925
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
44 |
17350 | 45 // In theory, it should be enough to check the class: |
46 // Magick::ClassType | |
47 // PseudoClass: | |
48 // Image is composed of pixels which specify an index in a color palette. | |
49 // DirectClass: | |
50 // Image is composed of pixels which represent literal color values. | |
51 // | |
52 // GraphicsMagick does not really distinguishes between indexed and | |
53 // normal images. After reading a file, it decides itself the optimal | |
54 // way to store the image in memory, independently of the how the | |
55 // image was stored in the file. That's what ClassType returns. While | |
56 // it seems to match the original file most of the times, this is | |
57 // not necessarily true all the times. See | |
58 // https://sourceforge.net/mailarchive/message.php?msg_id=31180507 | |
59 // In addition to the ClassType, there is also ImageType which has a | |
60 // type for indexed images (PaletteType and PaletteMatteType). However, | |
61 // they also don't represent the original image. Not only does DirectClass | |
62 // can have a PaletteType, but also does a PseudoClass have non Palette | |
63 // types. | |
64 // | |
65 // We can't do better without having format specific code which is | |
66 // what we are trying to avoid by using a library such as GM. We at | |
67 // least create workarounds for the most common problems. | |
68 // | |
69 // 1) A grayscale jpeg image can report being indexed even though the | |
70 // JPEG format has no support for indexed images. We can at least | |
71 // fix this one. | |
17373
8508b8ae46a8
imread: fix identification of PNG files as indexed.
Carnë Draug <carandraug@octave.org>
parents:
17372
diff
changeset
|
72 // 2) A PNG file is only an indexed image if color type orig is 3 (value comes |
8508b8ae46a8
imread: fix identification of PNG files as indexed.
Carnë Draug <carandraug@octave.org>
parents:
17372
diff
changeset
|
73 // from libpng) |
17350 | 74 static bool |
75 is_indexed (const Magick::Image& img) | |
76 { | |
77 bool retval = false; | |
17373
8508b8ae46a8
imread: fix identification of PNG files as indexed.
Carnë Draug <carandraug@octave.org>
parents:
17372
diff
changeset
|
78 const std::string format = img.magick (); |
8508b8ae46a8
imread: fix identification of PNG files as indexed.
Carnë Draug <carandraug@octave.org>
parents:
17372
diff
changeset
|
79 if (img.classType () == Magick::PseudoClass |
8508b8ae46a8
imread: fix identification of PNG files as indexed.
Carnë Draug <carandraug@octave.org>
parents:
17372
diff
changeset
|
80 && format != "JPEG" |
8508b8ae46a8
imread: fix identification of PNG files as indexed.
Carnë Draug <carandraug@octave.org>
parents:
17372
diff
changeset
|
81 && (format != "PNG" |
8508b8ae46a8
imread: fix identification of PNG files as indexed.
Carnë Draug <carandraug@octave.org>
parents:
17372
diff
changeset
|
82 || const_cast<Magick::Image&> (img).attribute ("PNG:IHDR.color-type-orig") == "3")) |
17350 | 83 retval = true; |
84 | |
85 return retval; | |
86 } | |
87 | |
88 // The depth from depth() is not always correct for us but seems to be the | |
89 // best value we can get. For example, a grayscale png image with 1 bit | |
90 // per channel should return a depth of 1 but instead we get 8. | |
91 // We could check channelDepth() but then, which channel has the data | |
92 // is not straightforward. So we'd have to check all | |
93 // the channels and select the highest value. But then, I also | |
94 // have a 16bit TIFF whose depth returns 16 (correct), but all of the | |
95 // channels gives 8 (wrong). No idea why, maybe a bug in GM? | |
96 // Anyway, using depth() seems that only causes problems for binary | |
97 // images, and the problem with channelDepth() is not making set them | |
98 // all to 1. So we will guess that if all channels have depth of 1, | |
99 // then we must have a binary image. | |
100 // Note that we can't use AllChannels it doesn't work for this. | |
101 // Instead of checking all of the individual channels, we check one | |
102 // from RGB, CMYK, grayscale, and transparency. | |
103 static octave_idx_type | |
104 get_depth (Magick::Image& img) | |
105 { | |
106 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
|
107 if (depth == 8 |
17350 | 108 && img.channelDepth (Magick::RedChannel) == 1 |
109 && img.channelDepth (Magick::CyanChannel) == 1 | |
110 && img.channelDepth (Magick::OpacityChannel) == 1 | |
111 && img.channelDepth (Magick::GrayChannel) == 1) | |
112 depth = 1; | |
113 | |
114 return depth; | |
115 } | |
116 | |
17335
583306fe7e4f
Fix reading of images with height or width of 1 pixel.
Carnë Draug <carandraug@octave.org>
parents:
17334
diff
changeset
|
117 // We need this in case one of the sides of the image being read has |
583306fe7e4f
Fix reading of images with height or width of 1 pixel.
Carnë Draug <carandraug@octave.org>
parents:
17334
diff
changeset
|
118 // width 1. In those cases, the type will come as scalar instead of range |
583306fe7e4f
Fix reading of images with height or width of 1 pixel.
Carnë Draug <carandraug@octave.org>
parents:
17334
diff
changeset
|
119 // since that's the behaviour of the colon operator (1:1:1 will be a scalar, |
583306fe7e4f
Fix reading of images with height or width of 1 pixel.
Carnë Draug <carandraug@octave.org>
parents:
17334
diff
changeset
|
120 // not a range). |
583306fe7e4f
Fix reading of images with height or width of 1 pixel.
Carnë Draug <carandraug@octave.org>
parents:
17334
diff
changeset
|
121 static Range |
583306fe7e4f
Fix reading of images with height or width of 1 pixel.
Carnë Draug <carandraug@octave.org>
parents:
17334
diff
changeset
|
122 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
|
123 { |
583306fe7e4f
Fix reading of images with height or width of 1 pixel.
Carnë Draug <carandraug@octave.org>
parents:
17334
diff
changeset
|
124 Range output; |
583306fe7e4f
Fix reading of images with height or width of 1 pixel.
Carnë Draug <carandraug@octave.org>
parents:
17334
diff
changeset
|
125 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
|
126 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
|
127 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
|
128 { |
583306fe7e4f
Fix reading of images with height or width of 1 pixel.
Carnë Draug <carandraug@octave.org>
parents:
17334
diff
changeset
|
129 double value = region.scalar_value (); |
583306fe7e4f
Fix reading of images with height or width of 1 pixel.
Carnë Draug <carandraug@octave.org>
parents:
17334
diff
changeset
|
130 output = Range (value, value); |
583306fe7e4f
Fix reading of images with height or width of 1 pixel.
Carnë Draug <carandraug@octave.org>
parents:
17334
diff
changeset
|
131 } |
583306fe7e4f
Fix reading of images with height or width of 1 pixel.
Carnë Draug <carandraug@octave.org>
parents:
17334
diff
changeset
|
132 else |
583306fe7e4f
Fix reading of images with height or width of 1 pixel.
Carnë Draug <carandraug@octave.org>
parents:
17334
diff
changeset
|
133 error ("__magick_read__: unknow datatype for Region option"); |
583306fe7e4f
Fix reading of images with height or width of 1 pixel.
Carnë Draug <carandraug@octave.org>
parents:
17334
diff
changeset
|
134 |
583306fe7e4f
Fix reading of images with height or width of 1 pixel.
Carnë Draug <carandraug@octave.org>
parents:
17334
diff
changeset
|
135 return output; |
583306fe7e4f
Fix reading of images with height or width of 1 pixel.
Carnë Draug <carandraug@octave.org>
parents:
17334
diff
changeset
|
136 } |
583306fe7e4f
Fix reading of images with height or width of 1 pixel.
Carnë Draug <carandraug@octave.org>
parents:
17334
diff
changeset
|
137 |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
138 static std::map<std::string, octave_idx_type> |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
139 calculate_region (const octave_scalar_map& options) |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
140 { |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
141 std::map<std::string, octave_idx_type> region; |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
142 const Cell pixel_region = options.getfield ("region").cell_value (); |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
143 |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
144 // Subtract 1 to account for 0 indexing. |
17335
583306fe7e4f
Fix reading of images with height or width of 1 pixel.
Carnë Draug <carandraug@octave.org>
parents:
17334
diff
changeset
|
145 const Range rows = get_region_range (pixel_region (0)); |
583306fe7e4f
Fix reading of images with height or width of 1 pixel.
Carnë Draug <carandraug@octave.org>
parents:
17334
diff
changeset
|
146 const Range cols = get_region_range (pixel_region (1)); |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
147 region["row_start"] = rows.base () -1; |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
148 region["col_start"] = cols.base () -1; |
17138
96526baf7423
Fix reading of images using PixelRegion with ranges ending before the limit.
Carnë Draug <carandraug@octave.org>
parents:
17134
diff
changeset
|
149 region["row_end"] = rows.max () -1; |
96526baf7423
Fix reading of images using PixelRegion with ranges ending before the limit.
Carnë Draug <carandraug@octave.org>
parents:
17134
diff
changeset
|
150 region["col_end"] = cols.max () -1; |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
151 |
17138
96526baf7423
Fix reading of images using PixelRegion with ranges ending before the limit.
Carnë Draug <carandraug@octave.org>
parents:
17134
diff
changeset
|
152 // 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
|
153 // 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
|
154 region["row_cache"] = region["row_end"] - region["row_start"] +1; |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
155 region["col_cache"] = region["col_end"] - region["col_start"] +1; |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
156 |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
157 // How much we have to shift in the memory when doing the loops. |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
158 region["row_shift"] = region["col_cache"] * rows.inc (); |
17138
96526baf7423
Fix reading of images using PixelRegion with ranges ending before the limit.
Carnë Draug <carandraug@octave.org>
parents:
17134
diff
changeset
|
159 region["col_shift"] = region["col_cache"] * |
96526baf7423
Fix reading of images using PixelRegion with ranges ending before the limit.
Carnë Draug <carandraug@octave.org>
parents:
17134
diff
changeset
|
160 (region["row_cache"] + rows.inc () -1) - cols.inc (); |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
161 |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
162 // The actual height and width of the output image |
17138
96526baf7423
Fix reading of images using PixelRegion with ranges ending before the limit.
Carnë Draug <carandraug@octave.org>
parents:
17134
diff
changeset
|
163 region["row_out"] = rows.nelem (); |
96526baf7423
Fix reading of images using PixelRegion with ranges ending before the limit.
Carnë Draug <carandraug@octave.org>
parents:
17134
diff
changeset
|
164 region["col_out"] = cols.nelem (); |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
165 |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
166 return region; |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
167 } |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
168 |
17350 | 169 static octave_value_list |
170 read_maps (Magick::Image& img) | |
171 { | |
172 // can't call colorMapSize on const Magick::Image | |
173 const octave_idx_type mapsize = img.colorMapSize (); | |
174 Matrix cmap = Matrix (mapsize, 3); // colormap | |
17372
63b53ea33a8b
imread: fix returning multiple variables.
Carnë Draug <carandraug@octave.org>
parents:
17362
diff
changeset
|
175 ColumnVector amap = ColumnVector (mapsize); // alpha map |
17350 | 176 for (octave_idx_type i = 0; i < mapsize; i++) |
177 { | |
178 const Magick::ColorRGB c = img.colorMap (i); | |
179 cmap(i,0) = c.red (); | |
180 cmap(i,1) = c.green (); | |
181 cmap(i,2) = c.blue (); | |
17372
63b53ea33a8b
imread: fix returning multiple variables.
Carnë Draug <carandraug@octave.org>
parents:
17362
diff
changeset
|
182 amap(i) = c.alpha (); |
17350 | 183 } |
184 octave_value_list maps; | |
185 maps(0) = cmap; | |
186 maps(1) = amap; | |
187 return maps; | |
188 } | |
189 | |
16996
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
190 template <class T> |
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
191 static octave_value_list |
17350 | 192 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
|
193 const Array<octave_idx_type>& frameidx, |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
194 const octave_idx_type& nargout, |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
195 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
|
196 { |
16996
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
197 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
|
198 |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
199 octave_value_list retval (3, Matrix ()); |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
200 |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
201 std::map<std::string, octave_idx_type> region = calculate_region (options); |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
202 const octave_idx_type nFrames = frameidx.length (); |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
203 const octave_idx_type nRows = region["row_out"]; |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
204 const octave_idx_type nCols = region["col_out"]; |
8054 | 205 |
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
|
206 // imvec has all of the pages of a file, even the ones we are not |
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
|
207 // interested in. We will use the first image that we will be actually |
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
|
208 // 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
|
209 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
|
210 |
16996
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
211 T img = T (dim_vector (nRows, nCols, 1, nFrames)); |
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
212 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
|
213 |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
214 const octave_idx_type row_start = region["row_start"]; |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
215 const octave_idx_type col_start = region["col_start"]; |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
216 const octave_idx_type row_shift = region["row_shift"]; |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
217 const octave_idx_type col_shift = region["col_shift"]; |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
218 const octave_idx_type row_cache = region["row_cache"]; |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
219 const octave_idx_type col_cache = region["col_cache"]; |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
220 |
16996
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
221 // When reading PixelPackets from the Image Pixel Cache, they come in |
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
222 // row major order. So we keep moving back and forth there so we can |
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
223 // 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
|
224 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
|
225 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
|
226 { |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
227 imvec[frameidx(frame)].getConstPixels (col_start, row_start, |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
228 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
|
229 |
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
230 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
|
231 = imvec[frameidx(frame)].getConstIndexes (); |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
232 |
16996
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
233 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
|
234 { |
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
235 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
|
236 { |
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
237 img_fvec[idx++] = static_cast<P> (*pix); |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
238 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
|
239 } |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
240 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
|
241 } |
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
242 } |
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
243 retval(0) = octave_value (img); |
7933 | 244 |
17350 | 245 // 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
|
246 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
|
247 { |
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
248 // 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
|
249 // have different colormaps but for Matlab compatibility, we only |
17350 | 250 // return the colormap of the first frame. To obtain the colormaps |
251 // of different frames, one needs can either use imfinfo or a for | |
252 // loop around imread. | |
253 const octave_value_list maps = | |
254 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
|
255 |
17350 | 256 retval(1) = maps(0); |
257 | |
258 // 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
|
259 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
|
260 { |
17350 | 261 const Matrix amap = maps(1).matrix_value (); |
262 const double* amap_fvec = amap.fortran_vec (); | |
7933 | 263 |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
264 NDArray alpha (dim_vector (nRows, nCols, 1, nFrames)); |
16996
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
265 double* alpha_fvec = alpha.fortran_vec (); |
7933 | 266 |
17350 | 267 // GraphicsMagick stores the alpha values inverted, i.e., |
268 // 1 for transparent and 0 for opaque so we fix that here. | |
269 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
|
270 for (octave_idx_type pix = 0; pix < nPixels; pix++) |
17350 | 271 alpha_fvec[pix] = 1 - amap_fvec[static_cast<int> (img_fvec[3])]; |
272 | |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
273 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
|
274 } |
7925
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
275 } |
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
276 |
16996
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
277 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
|
278 } |
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
279 |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
280 // This function is highly repetitive, a bunch of for loops that are |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
281 // very similar to account for different image types. They are different |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
282 // 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
|
283 // readability too much. |
10193
1a4074e277fe
undo unintended change to __magick_read__.cc
John W. Eaton <jwe@octave.org>
parents:
10191
diff
changeset
|
284 template <class T> |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
285 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
|
286 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
|
287 const Array<octave_idx_type>& frameidx, |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
288 const octave_idx_type& nargout, |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
289 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
|
290 { |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
291 typedef typename T::element_type P; |
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
292 |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
293 octave_value_list retval (3, Matrix ()); |
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
294 |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
295 std::map<std::string, octave_idx_type> region = calculate_region (options); |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
296 const octave_idx_type nFrames = frameidx.length (); |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
297 const octave_idx_type nRows = region["row_out"]; |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
298 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
|
299 T img; |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
300 |
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
|
301 // imvec has all of the pages of a file, even the ones we are not |
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
|
302 // interested in. We will use the first image that we will be actually |
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
|
303 // 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
|
304 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
|
305 |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
306 const octave_idx_type row_start = region["row_start"]; |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
307 const octave_idx_type col_start = region["col_start"]; |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
308 const octave_idx_type row_shift = region["row_shift"]; |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
309 const octave_idx_type col_shift = region["col_shift"]; |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
310 const octave_idx_type row_cache = region["row_cache"]; |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
311 const octave_idx_type col_cache = region["col_cache"]; |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
312 |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
313 // 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
|
314 // QuantumDepth it was built with independently of the original image |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
315 // bitdepth. Basically this means that if GM was built with quantum 16 |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
316 // all values are scaled in the uint16 range. If the original image |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
317 // 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
|
318 // However, if the image had a bitdepth of 32, then we will be returning |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
319 // a floating point image. In this case, the values need to be rescaled |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
320 // 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
|
321 // 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
|
322 // See bug #39249). |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
323 // 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
|
324 // using quantumOperator for the cases where we will be returning floating |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
325 // point and want things in the range [0 1]. This is the same reason why |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
326 // 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
|
327 // 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
|
328 // when depth() is 32. |
17147
35a1bd41aa02
Fix reading of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17139
diff
changeset
|
329 // TODO in the next release of GraphicsMagick, MaxRGB should be replaced |
35a1bd41aa02
Fix reading of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17139
diff
changeset
|
330 // 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
|
331 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
|
332 if (imvec[def_elem].depth () == 32) |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
333 divisor = std::numeric_limits<uint32_t>::max (); |
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
334 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
|
335 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
|
336 |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
337 // 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
|
338 // new ImageType BilevelMatteType |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
339 // Despite what GM documentation claims, opacity is not only on the types |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
340 // with Matte on the name. It is possible that an image is completely |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
341 // black (1 color), and have a second channel set for transparency (2nd |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
342 // color). Its type will be bilevel since there is no BilevelMatte. The |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
343 // 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
|
344 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
|
345 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
|
346 type = Magick::GrayscaleMatteType; |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
347 |
17149
73a3c1580974
Correctly identify PNG image types (bug #32986, bug #36820 and bug #37689)
Carnë Draug <carandraug@octave.org>
parents:
17147
diff
changeset
|
348 // FIXME: ImageType is the type being used to represent the image in memory |
73a3c1580974
Correctly identify PNG image types (bug #32986, bug #36820 and bug #37689)
Carnë Draug <carandraug@octave.org>
parents:
17147
diff
changeset
|
349 // by GM. The real type may be different (see among others bug #36820). For |
73a3c1580974
Correctly identify PNG image types (bug #32986, bug #36820 and bug #37689)
Carnë Draug <carandraug@octave.org>
parents:
17147
diff
changeset
|
350 // example, a png file where all channels are equal may report being |
73a3c1580974
Correctly identify PNG image types (bug #32986, bug #36820 and bug #37689)
Carnë Draug <carandraug@octave.org>
parents:
17147
diff
changeset
|
351 // grayscale or even bilevel. But we must always return the real image in |
73a3c1580974
Correctly identify PNG image types (bug #32986, bug #36820 and bug #37689)
Carnë Draug <carandraug@octave.org>
parents:
17147
diff
changeset
|
352 // file. In some cases, the original image attributes are stored in the |
73a3c1580974
Correctly identify PNG image types (bug #32986, bug #36820 and bug #37689)
Carnë Draug <carandraug@octave.org>
parents:
17147
diff
changeset
|
353 // attributes but this is undocumented. This should be fixed in GM so that |
73a3c1580974
Correctly identify PNG image types (bug #32986, bug #36820 and bug #37689)
Carnë Draug <carandraug@octave.org>
parents:
17147
diff
changeset
|
354 // 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
|
355 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
|
356 { |
73a3c1580974
Correctly identify PNG image types (bug #32986, bug #36820 and bug #37689)
Carnë Draug <carandraug@octave.org>
parents:
17147
diff
changeset
|
357 // 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
|
358 // Grayscale = 0 |
73a3c1580974
Correctly identify PNG image types (bug #32986, bug #36820 and bug #37689)
Carnë Draug <carandraug@octave.org>
parents:
17147
diff
changeset
|
359 // 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
|
360 // RGB = 2 |
73a3c1580974
Correctly identify PNG image types (bug #32986, bug #36820 and bug #37689)
Carnë Draug <carandraug@octave.org>
parents:
17147
diff
changeset
|
361 // 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
|
362 // 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
|
363 // 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
|
364 // read by the function to read indexed images |
73a3c1580974
Correctly identify PNG image types (bug #32986, bug #36820 and bug #37689)
Carnë Draug <carandraug@octave.org>
parents:
17147
diff
changeset
|
365 const std::string type_str = imvec[0].attribute ("PNG:IHDR.color-type-orig"); |
73a3c1580974
Correctly identify PNG image types (bug #32986, bug #36820 and bug #37689)
Carnë Draug <carandraug@octave.org>
parents:
17147
diff
changeset
|
366 if (type_str == "0") |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
367 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
|
368 else if (type_str == "2") |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
369 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
|
370 else if (type_str == "6") |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
371 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
|
372 else if (type_str == "4") |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
373 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
|
374 // 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
|
375 // 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
|
376 // binary transparency, while 3 can have any level of alpha per |
d6467d6dfb83
Fix reading of alpha channel stored as tRNS chunk in PNG files.
Carnë Draug <carandraug@octave.org>
parents:
17235
diff
changeset
|
377 // palette entry. We thus must check matte() to see if the image |
d6467d6dfb83
Fix reading of alpha channel stored as tRNS chunk in PNG files.
Carnë Draug <carandraug@octave.org>
parents:
17235
diff
changeset
|
378 // 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
|
379 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
|
380 { |
d6467d6dfb83
Fix reading of alpha channel stored as tRNS chunk in PNG files.
Carnë Draug <carandraug@octave.org>
parents:
17235
diff
changeset
|
381 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
|
382 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
|
383 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
|
384 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
|
385 } |
17149
73a3c1580974
Correctly identify PNG image types (bug #32986, bug #36820 and bug #37689)
Carnë Draug <carandraug@octave.org>
parents:
17147
diff
changeset
|
386 } |
73a3c1580974
Correctly identify PNG image types (bug #32986, bug #36820 and bug #37689)
Carnë Draug <carandraug@octave.org>
parents:
17147
diff
changeset
|
387 |
17116
59acfe9209dd
Do not read alpha channel from image if output not requested.
Carnë Draug <carandraug@octave.org>
parents:
17110
diff
changeset
|
388 // 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
|
389 // 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
|
390 if (nargout < 3) |
59acfe9209dd
Do not read alpha channel from image if output not requested.
Carnë Draug <carandraug@octave.org>
parents:
17110
diff
changeset
|
391 { |
59acfe9209dd
Do not read alpha channel from image if output not requested.
Carnë Draug <carandraug@octave.org>
parents:
17110
diff
changeset
|
392 switch (type) |
59acfe9209dd
Do not read alpha channel from image if output not requested.
Carnë Draug <carandraug@octave.org>
parents:
17110
diff
changeset
|
393 { |
59acfe9209dd
Do not read alpha channel from image if output not requested.
Carnë Draug <carandraug@octave.org>
parents:
17110
diff
changeset
|
394 case Magick::GrayscaleMatteType: |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
395 type = Magick::GrayscaleType; |
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
396 break; |
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
397 |
17116
59acfe9209dd
Do not read alpha channel from image if output not requested.
Carnë Draug <carandraug@octave.org>
parents:
17110
diff
changeset
|
398 case Magick::PaletteMatteType: |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
399 type = Magick::PaletteType; |
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
400 break; |
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
401 |
17116
59acfe9209dd
Do not read alpha channel from image if output not requested.
Carnë Draug <carandraug@octave.org>
parents:
17110
diff
changeset
|
402 case Magick::TrueColorMatteType: |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
403 type = Magick::TrueColorType; |
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
404 break; |
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
405 |
17116
59acfe9209dd
Do not read alpha channel from image if output not requested.
Carnë Draug <carandraug@octave.org>
parents:
17110
diff
changeset
|
406 case Magick::ColorSeparationMatteType: |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
407 type = Magick::ColorSeparationType; |
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
408 break; |
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
409 |
17116
59acfe9209dd
Do not read alpha channel from image if output not requested.
Carnë Draug <carandraug@octave.org>
parents:
17110
diff
changeset
|
410 default: |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
411 // Do nothing other than silencing warnings about enumeration |
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
412 // values not being handled in switch. |
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
413 ; |
17116
59acfe9209dd
Do not read alpha channel from image if output not requested.
Carnë Draug <carandraug@octave.org>
parents:
17110
diff
changeset
|
414 } |
59acfe9209dd
Do not read alpha channel from image if output not requested.
Carnë Draug <carandraug@octave.org>
parents:
17110
diff
changeset
|
415 } |
59acfe9209dd
Do not read alpha channel from image if output not requested.
Carnë Draug <carandraug@octave.org>
parents:
17110
diff
changeset
|
416 |
7925
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
417 switch (type) |
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
418 { |
16984
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
419 case Magick::BilevelType: // Monochrome bi-level image |
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
420 case Magick::GrayscaleType: // Grayscale image |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
421 { |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
422 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
|
423 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
|
424 |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
425 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
|
426 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
|
427 { |
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
428 const Magick::PixelPacket *pix |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
429 = imvec[frameidx(frame)].getConstPixels (col_start, row_start, |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
430 col_cache, row_cache); |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
431 |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
432 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
|
433 { |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
434 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
|
435 { |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
436 img_fvec[idx++] = pix->red / divisor; |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
437 pix += row_shift; |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
438 } |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
439 pix -= col_shift; |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
440 } |
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
441 } |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
442 break; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
443 } |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
444 |
16984
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
445 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
|
446 { |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
447 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
|
448 T alpha (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
|
449 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
|
450 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
|
451 |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
452 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
|
453 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
|
454 { |
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
455 const Magick::PixelPacket *pix |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
456 = imvec[frameidx(frame)].getConstPixels (col_start, row_start, |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
457 col_cache, row_cache); |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
458 |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
459 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
|
460 { |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
461 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
|
462 { |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
463 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
|
464 a_fvec[idx] = (MaxRGB - pix->opacity) / divisor; |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
465 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
|
466 idx++; |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
467 } |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
468 pix -= col_shift; |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
469 } |
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
470 } |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
471 retval(2) = alpha; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
472 break; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
473 } |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
474 |
16984
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
475 case Magick::PaletteType: // Indexed color (palette) image |
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
476 case Magick::TrueColorType: // Truecolor image |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
477 { |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
478 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
|
479 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
|
480 |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
481 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
|
482 { |
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
483 const Magick::PixelPacket *pix |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
484 = imvec[frameidx(frame)].getConstPixels (col_start, row_start, |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
485 col_cache, row_cache); |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
486 |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
487 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
|
488 img_fvec += nRows * nCols * frame; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
489 P *rbuf = img_fvec; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
490 P *gbuf = img_fvec + nRows * nCols; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
491 P *bbuf = img_fvec + nRows * nCols * 2; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
492 |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
493 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
|
494 { |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
495 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
|
496 { |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
497 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
|
498 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
|
499 bbuf[idx] = pix->blue / divisor; |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
500 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
|
501 idx++; |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
502 } |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
503 pix -= col_shift; |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
504 } |
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
505 } |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
506 break; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
507 } |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
508 |
16984
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
509 case Magick::PaletteMatteType: // Indexed color (palette) image with opacity |
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
510 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
|
511 { |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
512 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
|
513 T alpha (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
|
514 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
|
515 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
|
516 |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
517 // 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
|
518 // 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
|
519 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
|
520 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
|
521 { |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
522 const Magick::PixelPacket *pix |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
523 = imvec[frameidx(frame)].getConstPixels (col_start, row_start, |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
524 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
|
525 |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
526 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
|
527 img_fvec += nRows * nCols * frame; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
528 P *rbuf = img_fvec; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
529 P *gbuf = img_fvec + nRows * nCols; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
530 P *bbuf = img_fvec + nRows * nCols * 2; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
531 |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
532 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
|
533 { |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
534 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
|
535 { |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
536 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
|
537 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
|
538 bbuf[idx] = pix->blue / divisor; |
17147
35a1bd41aa02
Fix reading of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17139
diff
changeset
|
539 a_fvec[a_idx++] = (MaxRGB - pix->opacity) / divisor; |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
540 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
|
541 idx++; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
542 } |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
543 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
|
544 } |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
545 } |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
546 retval(2) = alpha; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
547 break; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
548 } |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
549 |
16984
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
550 case Magick::ColorSeparationType: // Cyan/Yellow/Magenta/Black (CYMK) image |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
551 { |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
552 img = T (dim_vector (nRows, nCols, 4, nFrames)); |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
553 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
|
554 |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
555 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
|
556 { |
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
557 const Magick::PixelPacket *pix |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
558 = imvec[frameidx(frame)].getConstPixels (col_start, row_start, |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
559 col_cache, row_cache); |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
560 |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
561 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
|
562 img_fvec += nRows * nCols * frame; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
563 P *cbuf = img_fvec; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
564 P *mbuf = img_fvec + nRows * nCols; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
565 P *ybuf = img_fvec + nRows * nCols * 2; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
566 P *kbuf = img_fvec + nRows * nCols * 3; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
567 |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
568 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
|
569 { |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
570 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
|
571 { |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
572 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
|
573 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
|
574 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
|
575 kbuf[idx] = pix->opacity / divisor; |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
576 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
|
577 idx++; |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
578 } |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
579 pix -= col_shift; |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
580 } |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
581 } |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
582 break; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
583 } |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
584 |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
585 // 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
|
586 case Magick::ColorSeparationMatteType: |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
587 { |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
588 img = T (dim_vector (nRows, nCols, 4, nFrames)); |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
589 T alpha (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
|
590 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
|
591 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
|
592 |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
593 // 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
|
594 // 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
|
595 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
|
596 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
|
597 { |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
598 const Magick::PixelPacket *pix |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
599 = imvec[frameidx(frame)].getConstPixels (col_start, row_start, |
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
600 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
|
601 // Note that for CMYKColorspace + matte (CMYKA), the opacity is |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
602 // stored in the assocated IndexPacket. |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
603 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
|
604 = imvec[frameidx(frame)].getConstIndexes (); |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
605 |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
606 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
|
607 img_fvec += nRows * nCols * frame; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
608 P *cbuf = img_fvec; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
609 P *mbuf = img_fvec + nRows * nCols; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
610 P *ybuf = img_fvec + nRows * nCols * 2; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
611 P *kbuf = img_fvec + nRows * nCols * 3; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
612 |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
613 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
|
614 { |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
615 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
|
616 { |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
617 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
|
618 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
|
619 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
|
620 kbuf[idx] = pix->opacity / divisor; |
17147
35a1bd41aa02
Fix reading of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17139
diff
changeset
|
621 a_fvec[a_idx++] = (MaxRGB - *apix) / divisor; |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
622 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
|
623 idx++; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
624 } |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
625 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
|
626 } |
10295
13d382fc758b
imread: Make reading non-indexed images faster
David Grundberg <davidg@cs.umu.se>
parents:
10193
diff
changeset
|
627 } |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
628 retval(2) = alpha; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
629 break; |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
630 } |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
631 |
7925
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
632 default: |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
633 error ("__magick_read__: unknown Magick++ image type"); |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
634 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
|
635 } |
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
636 |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
637 retval(0) = img; |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
638 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
|
639 } |
7974 | 640 |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
641 // Read a file into vector of image objects. |
16988
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
642 void static |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
643 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
|
644 { |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
645 try |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
646 { |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
647 Magick::readImages (&imvec, filename); |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
648 } |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
649 catch (Magick::Warning& w) |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
650 { |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
651 warning ("Magick++ warning: %s", w.what ()); |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
652 } |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
653 catch (Magick::ErrorCoder& e) |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
654 { |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
655 // FIXME: there's a WarningCoder and ErrorCoder. Shouldn't this |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
656 // exception cause an error? |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
657 warning ("Magick++ coder error: %s", e.what ()); |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
658 } |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
659 catch (Magick::Exception& e) |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
660 { |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
661 error ("Magick++ exception: %s", e.what ()); |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
662 error_state = 1; |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
663 } |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
664 } |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
665 |
10947
dc74ce93cfc4
initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
666 static void |
dc74ce93cfc4
initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
667 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
|
668 { |
10390
ad0b54ae206a
__magick_read__ (F__magick_read__): call Magick::InitializeMagick
John W. Eaton <jwe@octave.org>
parents:
10350
diff
changeset
|
669 static bool initialized = false; |
ad0b54ae206a
__magick_read__ (F__magick_read__): call Magick::InitializeMagick
John W. Eaton <jwe@octave.org>
parents:
10350
diff
changeset
|
670 |
ad0b54ae206a
__magick_read__ (F__magick_read__): call Magick::InitializeMagick
John W. Eaton <jwe@octave.org>
parents:
10350
diff
changeset
|
671 if (! initialized) |
ad0b54ae206a
__magick_read__ (F__magick_read__): call Magick::InitializeMagick
John W. Eaton <jwe@octave.org>
parents:
10350
diff
changeset
|
672 { |
16988
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
673 // Save locale as GraphicsMagick might change this (fixed in |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
674 // GraphicsMagick since version 1.3.13 released on December 24, 2011) |
10739
d27bd2f74137
src/DLD_FUNCTIONS/__magick_read__.cc: restore locale after GraphicsMagick initialisation
Soren Hauberg <hauberg@gmail.com>
parents:
10390
diff
changeset
|
675 const char *static_locale = setlocale (LC_ALL, NULL); |
d27bd2f74137
src/DLD_FUNCTIONS/__magick_read__.cc: restore locale after GraphicsMagick initialisation
Soren Hauberg <hauberg@gmail.com>
parents:
10390
diff
changeset
|
676 const std::string locale (static_locale); |
d27bd2f74137
src/DLD_FUNCTIONS/__magick_read__.cc: restore locale after GraphicsMagick initialisation
Soren Hauberg <hauberg@gmail.com>
parents:
10390
diff
changeset
|
677 |
16988
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
678 const std::string program_name = octave_env::get_program_invocation_name (); |
10390
ad0b54ae206a
__magick_read__ (F__magick_read__): call Magick::InitializeMagick
John W. Eaton <jwe@octave.org>
parents:
10350
diff
changeset
|
679 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
|
680 |
10739
d27bd2f74137
src/DLD_FUNCTIONS/__magick_read__.cc: restore locale after GraphicsMagick initialisation
Soren Hauberg <hauberg@gmail.com>
parents:
10390
diff
changeset
|
681 // 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
|
682 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
|
683 |
11036
169f59f626d3
Add check for QuantumDepth at initialization of *Magick and an associated warning
John Swensen <jpswensen@gmail.com>
parents:
11035
diff
changeset
|
684 if (QuantumDepth < 32) |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
685 warning ("your version of %s limits images to %d bits per pixel", |
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
686 MagickPackageName, QuantumDepth); |
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
687 |
10390
ad0b54ae206a
__magick_read__ (F__magick_read__): call Magick::InitializeMagick
John W. Eaton <jwe@octave.org>
parents:
10350
diff
changeset
|
688 initialized = true; |
ad0b54ae206a
__magick_read__ (F__magick_read__): call Magick::InitializeMagick
John W. Eaton <jwe@octave.org>
parents:
10350
diff
changeset
|
689 } |
16983
4660d047955e
Make use of gripe_disabled_feature() for image IO functions.
Carnë Draug <carandraug+dev@gmail.com>
parents:
16944
diff
changeset
|
690 } |
10947
dc74ce93cfc4
initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
691 #endif |
dc74ce93cfc4
initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
692 |
dc74ce93cfc4
initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
693 DEFUN_DLD (__magick_read__, args, nargout, |
dc74ce93cfc4
initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
694 "-*- texinfo -*-\n\ |
16984
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
695 @deftypefn {Loadable Function} {[@var{img}, @var{map}, @var{alpha}] =} __magick_read__ (@var{fname}, @var{options})\n\ |
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
696 Read image with GraphicsMagick or ImageMagick.\n\ |
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
697 \n\ |
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
698 This is a private internal function not intended for direct use. Instead\n\ |
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
699 use @code{imread}.\n\ |
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
700 \n\ |
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
701 @seealso{imfinfo, imformats, imread, imwrite}\n\ |
10947
dc74ce93cfc4
initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
702 @end deftypefn") |
dc74ce93cfc4
initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
703 { |
dc74ce93cfc4
initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
704 octave_value_list output; |
dc74ce93cfc4
initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
705 |
16983
4660d047955e
Make use of gripe_disabled_feature() for image IO functions.
Carnë Draug <carandraug+dev@gmail.com>
parents:
16944
diff
changeset
|
706 #ifndef HAVE_MAGICK |
4660d047955e
Make use of gripe_disabled_feature() for image IO functions.
Carnë Draug <carandraug+dev@gmail.com>
parents:
16944
diff
changeset
|
707 gripe_disabled_feature ("imread", "Image IO"); |
4660d047955e
Make use of gripe_disabled_feature() for image IO functions.
Carnë Draug <carandraug+dev@gmail.com>
parents:
16944
diff
changeset
|
708 #else |
10947
dc74ce93cfc4
initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
709 |
dc74ce93cfc4
initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
710 maybe_initialize_magick (); |
10390
ad0b54ae206a
__magick_read__ (F__magick_read__): call Magick::InitializeMagick
John W. Eaton <jwe@octave.org>
parents:
10350
diff
changeset
|
711 |
16984
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
712 if (args.length () != 2 || ! args(0).is_string ()) |
7925
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
713 { |
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
714 print_usage (); |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
715 return output; |
7925
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
716 } |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
717 |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
718 const octave_scalar_map options = args(1).scalar_map_value (); |
16984
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
719 if (error_state) |
10778
6035bf68a755
Support imread('file', 'frames', 'all') (Feature Request #30365)
David Bateman <dbateman@free.fr>
parents:
10739
diff
changeset
|
720 { |
16984
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
721 error ("__magick_read__: OPTIONS must be a struct"); |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
722 return output; |
7925
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
723 } |
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
724 |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
725 std::vector<Magick::Image> imvec; |
16988
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
726 read_file (args(0).string_value (), imvec); |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
727 if (error_state) |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
728 return output; |
7925
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
729 |
16996
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
730 // 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
|
731 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
|
732 Array<octave_idx_type> frameidx; |
17118
c97a26408ee0
Implement PixelRegion option for imread().
Carnë Draug <carandraug@octave.org>
parents:
17116
diff
changeset
|
733 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
|
734 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
|
735 { |
16996
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
736 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
|
737 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
|
738 frameidx(i) = i; |
10778
6035bf68a755
Support imread('file', 'frames', 'all') (Feature Request #30365)
David Bateman <dbateman@free.fr>
parents:
10739
diff
changeset
|
739 } |
6035bf68a755
Support imread('file', 'frames', 'all') (Feature Request #30365)
David Bateman <dbateman@free.fr>
parents:
10739
diff
changeset
|
740 else |
6035bf68a755
Support imread('file', 'frames', 'all') (Feature Request #30365)
David Bateman <dbateman@free.fr>
parents:
10739
diff
changeset
|
741 { |
16984
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
742 frameidx = indexes.int_vector_value (); |
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
743 if (error_state) |
10778
6035bf68a755
Support imread('file', 'frames', 'all') (Feature Request #30365)
David Bateman <dbateman@free.fr>
parents:
10739
diff
changeset
|
744 { |
16984
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
745 error ("__magick_read__: invalid value for Index/Frame"); |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
746 return output; |
16984
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
747 } |
16989
7a69ab84b8c9
__magick_write__: confirm file exists before reading to append.
Carnë Draug <carandraug@octave.org>
parents:
16988
diff
changeset
|
748 // 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
|
749 // sure none of the indexes is outside the range of image number. |
16996
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
750 const octave_idx_type n = frameidx.nelem (); |
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
751 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
|
752 { |
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
753 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
|
754 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
|
755 { |
16984
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
756 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
|
757 return output; |
6035bf68a755
Support imread('file', 'frames', 'all') (Feature Request #30365)
David Bateman <dbateman@free.fr>
parents:
10739
diff
changeset
|
758 } |
8053 | 759 } |
7925
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
760 } |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
761 |
17350 | 762 const octave_idx_type depth = get_depth (imvec[frameidx(0)]); |
763 if (is_indexed (imvec[frameidx(0)])) | |
16984
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
764 { |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
765 if (depth <= 1) |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
766 output = read_indexed_images<boolNDArray> (imvec, frameidx, |
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
767 nargout, options); |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
768 else if (depth <= 8) |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
769 output = read_indexed_images<uint8NDArray> (imvec, frameidx, |
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
770 nargout, options); |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
771 else if (depth <= 16) |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
772 output = read_indexed_images<uint16NDArray> (imvec, frameidx, |
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
773 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
|
774 else |
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
775 { |
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
776 error ("imread: indexed images with depths greater than 16-bit are not supported"); |
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
777 return output; |
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
778 } |
16984
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
779 } |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11585
diff
changeset
|
780 |
16996
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
781 else |
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
782 { |
17110
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
783 if (depth <= 1) |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
784 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
|
785 else if (depth <= 8) |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
786 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
|
787 else if (depth <= 16) |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
788 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
|
789 else if (depth <= 32) |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
790 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
|
791 else |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
792 { |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
793 error ("imread: reading of images with %i-bit depth is not supported", |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
794 depth); |
95055b814d35
imread: implement reading of images with 32 bitdepth and alpha channels.
Carnë Draug <carandraug@octave.org>
parents:
16996
diff
changeset
|
795 } |
16996
a1d091243d11
Read alpha values from indexed images. Always read indexes from indexed images.
Carnë Draug <carandraug@octave.org>
parents:
16989
diff
changeset
|
796 } |
7937
6661387827d6
Allow build without GraphicsMagick installed
David Bateman <dbateman@free.fr>
parents:
7933
diff
changeset
|
797 |
6661387827d6
Allow build without GraphicsMagick installed
David Bateman <dbateman@free.fr>
parents:
7933
diff
changeset
|
798 #endif |
7925
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
799 return output; |
9316b59903c9
Add original imread() files (from octave-forge) to core octave.
Thomas L. Scofield <scofield AT calvin DOT edu>
parents:
diff
changeset
|
800 } |
7926
d74f996e005d
__magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents:
7925
diff
changeset
|
801 |
12805
3641167e5b75
codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents:
11590
diff
changeset
|
802 /* |
3641167e5b75
codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents:
11590
diff
changeset
|
803 ## 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
|
804 %!assert (1) |
3641167e5b75
codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents:
11590
diff
changeset
|
805 */ |
3641167e5b75
codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents:
11590
diff
changeset
|
806 |
7974 | 807 #ifdef HAVE_MAGICK |
808 | |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
809 template <class T> |
17228
2f1729cae08f
Initial support for writing of floating point and uint32 images.
Carnë Draug <carandraug@octave.org>
parents:
17226
diff
changeset
|
810 static uint32NDArray |
2f1729cae08f
Initial support for writing of floating point and uint32 images.
Carnë Draug <carandraug@octave.org>
parents:
17226
diff
changeset
|
811 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
|
812 { |
2f1729cae08f
Initial support for writing of floating point and uint32 images.
Carnë Draug <carandraug@octave.org>
parents:
17226
diff
changeset
|
813 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
|
814 uint32NDArray out (img.dims ()); |
2f1729cae08f
Initial support for writing of floating point and uint32 images.
Carnë Draug <carandraug@octave.org>
parents:
17226
diff
changeset
|
815 |
2f1729cae08f
Initial support for writing of floating point and uint32 images.
Carnë Draug <carandraug@octave.org>
parents:
17226
diff
changeset
|
816 octave_uint32* out_fvec = out.fortran_vec (); |
2f1729cae08f
Initial support for writing of floating point and uint32 images.
Carnë Draug <carandraug@octave.org>
parents:
17226
diff
changeset
|
817 const P* img_fvec = img.fortran_vec (); |
2f1729cae08f
Initial support for writing of floating point and uint32 images.
Carnë Draug <carandraug@octave.org>
parents:
17226
diff
changeset
|
818 |
2f1729cae08f
Initial support for writing of floating point and uint32 images.
Carnë Draug <carandraug@octave.org>
parents:
17226
diff
changeset
|
819 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
|
820 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
|
821 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
|
822 out_fvec[idx] = img_fvec[idx] * max; |
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
823 |
17228
2f1729cae08f
Initial support for writing of floating point and uint32 images.
Carnë Draug <carandraug@octave.org>
parents:
17226
diff
changeset
|
824 return out; |
2f1729cae08f
Initial support for writing of floating point and uint32 images.
Carnë Draug <carandraug@octave.org>
parents:
17226
diff
changeset
|
825 } |
2f1729cae08f
Initial support for writing of floating point and uint32 images.
Carnë Draug <carandraug@octave.org>
parents:
17226
diff
changeset
|
826 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
827 // 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
|
828 // uint8, 16 for uint16, and 32 for uint32 |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
829 template <class T> |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
830 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
|
831 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
|
832 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
833 typedef typename T::element_type P; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
834 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
|
835 sizeof (P) * std::numeric_limits<unsigned char>::digits; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
836 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
|
837 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
838 |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
839 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
|
840 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
|
841 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
|
842 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
|
843 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
|
844 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
845 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
|
846 // 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
|
847 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
|
848 |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
849 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
|
850 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
|
851 // 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
|
852 // 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
|
853 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
|
854 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
|
855 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
856 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
|
857 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
|
858 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
|
859 case Magick::PaletteMatteType: |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
860 img.matte (true); |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
861 break; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
862 |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
863 default: |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
864 img.matte (false); |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
865 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
866 |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
867 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
|
868 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
869 |
17228
2f1729cae08f
Initial support for writing of floating point and uint32 images.
Carnë Draug <carandraug@octave.org>
parents:
17226
diff
changeset
|
870 template <class T> |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
871 static void |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
872 encode_indexed_images (std::vector<Magick::Image>& imvec, |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
873 const T& img, |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
874 const Matrix& cmap) |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
875 { |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
876 typedef typename T::element_type P; |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
877 const octave_idx_type nFrames = img.ndims () < 4 ? 1 : img.dims ()(3); |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
878 const octave_idx_type nRows = img.rows (); |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
879 const octave_idx_type nCols = img.columns (); |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
880 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
|
881 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
|
882 |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
883 // There is no colormap object, we need to build a new one for each frame, |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
884 // even if it's always the same. We can least get a vector for the Colors. |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
885 std::vector<Magick::ColorRGB> colormap; |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
886 { |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
887 const double* cmap_fvec = cmap.fortran_vec (); |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
888 const octave_idx_type G_offset = cmap_size; |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
889 const octave_idx_type B_offset = cmap_size * 2; |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
890 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
|
891 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
|
892 cmap_fvec[map_idx + G_offset], |
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
893 cmap_fvec[map_idx + B_offset])); |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
894 } |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
895 |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
896 for (octave_idx_type frame = 0; frame < nFrames; frame++) |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
897 { |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
898 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
|
899 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
|
900 Magick::PseudoClass); |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
901 |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
902 // Insert colormap. |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
903 m_img.colorMapSize (cmap_size); |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
904 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
|
905 m_img.colorMap (map_idx, colormap[map_idx]); |
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
906 |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
907 // 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
|
908 // index values? We don't know if a file format supports indexed |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
909 // images. If we only set the indexes and then try to save the |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
910 // 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
|
911 // there is no conversion from the indexes, it's the initial values |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
912 // that get used. An alternative would be to only set the pixel |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
913 // values (no indexes), then set the image as PseudoClass and GM |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
914 // would create a colormap for us. However, we wouldn't have control |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
915 // over the order of that colormap. And that's why we set both. |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
916 Magick::PixelPacket* pix = m_img.getPixels (0, 0, nCols, nRows); |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
917 Magick::IndexPacket* ind = m_img.getIndexes (); |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
918 const P* img_fvec = img.fortran_vec (); |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
919 |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
920 octave_idx_type GM_idx = 0; |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
921 for (octave_idx_type column = 0; column < nCols; column++) |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
922 { |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
923 for (octave_idx_type row = 0; row < nRows; row++) |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
924 { |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
925 ind[GM_idx] = double (*img_fvec); |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
926 pix[GM_idx] = m_img.colorMap (double (*img_fvec)); |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
927 img_fvec++; |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
928 GM_idx += nCols; |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
929 } |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
930 GM_idx -= nCols * nRows - 1; |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
931 } |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
932 |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
933 // Save changes to underlying image. |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
934 m_img.syncPixels (); |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
935 imvec.push_back (m_img); |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
936 } |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
937 } |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
938 |
8054 | 939 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
|
940 encode_bool_image (std::vector<Magick::Image>& imvec, const boolNDArray& img) |
7974 | 941 { |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
942 const octave_idx_type nFrames = img.ndims () < 4 ? 1 : img.dims ()(3); |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
943 const octave_idx_type nRows = img.rows (); |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
944 const octave_idx_type nCols = img.columns (); |
8054 | 945 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
946 // 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
|
947 const Magick::Color white ("white"); |
8054 | 948 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
949 const bool *img_fvec = img.fortran_vec (); |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
950 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
|
951 for (octave_idx_type frame = 0; frame < nFrames; frame++) |
8054 | 952 { |
17333
51c011825bcc
__magick_write__: make sure binary images are saved as bilevel for some coders.
Carnë Draug <carandraug@octave.org>
parents:
17332
diff
changeset
|
953 // 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
|
954 // 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
|
955 // 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
|
956 // 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
|
957 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
|
958 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
|
959 Magick::DirectClass); |
8054 | 960 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
961 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
|
962 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
|
963 for (octave_idx_type col = 0; col < nCols; col++) |
8054 | 964 { |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
965 for (octave_idx_type row = 0; row < nRows; row++) |
8054 | 966 { |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
967 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
|
968 pix[GM_idx] = white; |
10979
7f49dc864f32
__magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents:
10978
diff
changeset
|
969 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
970 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
|
971 GM_idx += nCols; |
8054 | 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 GM_idx -= nCols * nRows - 1; |
8054 | 974 } |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
975 // 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
|
976 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
|
977 // 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
|
978 // 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
|
979 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
|
980 imvec.push_back (m_img); |
8054 | 981 } |
982 } | |
983 | |
984 template <class T> | |
985 static void | |
986 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
|
987 const T& img, const T& alpha) |
8054 | 988 { |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
989 typedef typename T::element_type P; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
990 const octave_idx_type channels = img.ndims () < 3 ? 1 : img.dims ()(2); |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
991 const octave_idx_type nFrames = img.ndims () < 4 ? 1 : img.dims ()(3); |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
992 const octave_idx_type nRows = img.rows (); |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
993 const octave_idx_type nCols = img.columns (); |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
994 const octave_idx_type bitdepth = bitdepth_from_class<T> (); |
8054 | 995 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
996 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
|
997 const bool has_alpha = ! alpha.is_empty (); |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
998 switch (channels) |
8054 | 999 { |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1000 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
|
1001 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
|
1002 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
|
1003 else |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1004 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
|
1005 break; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1006 |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1007 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
|
1008 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
|
1009 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
|
1010 else |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1011 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
|
1012 break; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1013 |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1014 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
|
1015 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
|
1016 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
|
1017 else |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1018 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
|
1019 break; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1020 |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1021 default: |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1022 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1023 // __imwrite should have already filtered this cases |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1024 error ("__magick_write__: wrong size on 3rd dimension"); |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1025 return; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1026 } |
8054 | 1027 } |
1028 | |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1029 // We will be passing the values as integers with depth as specified |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1030 // by QuantumDepth (maximum value specified by MaxRGB). This is independent |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1031 // of the actual depth of the image. GM will then convert the values but |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1032 // 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
|
1033 // 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
|
1034 // 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
|
1035 // the range of MaxRGB |
17455
b76b14e386b3
Replace ambiguous call to pow with bit shift
Mike Miller <mtmiller@ieee.org>
parents:
17373
diff
changeset
|
1036 const double divisor = static_cast<double>((1 << bitdepth) - 1) / MaxRGB; |
8054 | 1037 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1038 const P *img_fvec = img.fortran_vec (); |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1039 const P *a_fvec = alpha.fortran_vec (); |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1040 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
|
1041 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1042 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
|
1043 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1044 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
|
1045 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
|
1046 { |
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::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
|
1048 type, |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1049 Magick::DirectClass); |
8054 | 1050 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1051 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
|
1052 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
|
1053 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1054 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
|
1055 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1056 Magick::Color c; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1057 c.redQuantum (double (*img_fvec) / divisor); |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1058 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
|
1059 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
|
1060 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
|
1061 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1062 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
|
1063 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1064 // 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
|
1065 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
|
1066 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
|
1067 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1068 break; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1069 } |
8054 | 1070 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1071 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
|
1072 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1073 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
|
1074 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
|
1075 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1076 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
|
1077 type, |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1078 Magick::DirectClass); |
7974 | 1079 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1080 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
|
1081 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
|
1082 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1083 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
|
1084 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1085 Magick::Color c; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1086 c.redQuantum (double (*img_fvec) / divisor); |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1087 c.alphaQuantum (MaxRGB - (double (*a_fvec) / divisor)); |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1088 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
|
1089 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
|
1090 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
|
1091 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
|
1092 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1093 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
|
1094 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1095 // 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
|
1096 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
|
1097 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
|
1098 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1099 break; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1100 } |
10979
7f49dc864f32
__magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents:
10978
diff
changeset
|
1101 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1102 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
|
1103 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1104 // The fortran_vec offset for the green and blue channels |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1105 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
|
1106 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
|
1107 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
|
1108 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
|
1109 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1110 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
|
1111 type, |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1112 Magick::DirectClass); |
10979
7f49dc864f32
__magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents:
10978
diff
changeset
|
1113 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1114 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
|
1115 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
|
1116 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1117 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
|
1118 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1119 Magick::Color c (double (*img_fvec) / divisor, |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1120 double (img_fvec[G_offset]) / divisor, |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1121 double (img_fvec[B_offset]) / divisor); |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1122 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
|
1123 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
|
1124 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
|
1125 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1126 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
|
1127 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1128 // 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
|
1129 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
|
1130 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
|
1131 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1132 break; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1133 } |
8054 | 1134 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1135 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
|
1136 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1137 // The fortran_vec offset for the green and blue channels |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1138 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
|
1139 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
|
1140 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
|
1141 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
|
1142 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1143 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
|
1144 type, |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1145 Magick::DirectClass); |
10979
7f49dc864f32
__magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents:
10978
diff
changeset
|
1146 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1147 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
|
1148 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
|
1149 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1150 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
|
1151 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1152 Magick::Color c (double (*img_fvec) / divisor, |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1153 double (img_fvec[G_offset]) / divisor, |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1154 double (img_fvec[B_offset]) / divisor, |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1155 MaxRGB - (double (*a_fvec) / divisor)); |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1156 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
|
1157 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
|
1158 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
|
1159 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
|
1160 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1161 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
|
1162 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1163 // 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
|
1164 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
|
1165 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
|
1166 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1167 break; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1168 } |
8054 | 1169 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1170 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
|
1171 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1172 // The fortran_vec offset for the Magenta, Yellow, and blacK channels |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1173 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
|
1174 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
|
1175 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
|
1176 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
|
1177 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
|
1178 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1179 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
|
1180 type, |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1181 Magick::DirectClass); |
10979
7f49dc864f32
__magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents:
10978
diff
changeset
|
1182 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1183 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
|
1184 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
|
1185 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1186 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
|
1187 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1188 Magick::Color c (double (*img_fvec) / divisor, |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1189 double (img_fvec[M_offset]) / divisor, |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1190 double (img_fvec[Y_offset]) / divisor, |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1191 double (img_fvec[K_offset]) / divisor); |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1192 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
|
1193 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
|
1194 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
|
1195 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1196 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
|
1197 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1198 // 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
|
1199 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
|
1200 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
|
1201 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1202 break; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1203 } |
10979
7f49dc864f32
__magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents:
10978
diff
changeset
|
1204 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1205 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
|
1206 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1207 // The fortran_vec offset for the Magenta, Yellow, and blacK channels |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1208 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
|
1209 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
|
1210 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
|
1211 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
|
1212 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
|
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 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
|
1215 type, |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1216 Magick::DirectClass); |
10979
7f49dc864f32
__magick_read__.cc: style fixes
John W. Eaton <jwe@octave.org>
parents:
10978
diff
changeset
|
1217 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1218 Magick::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
|
1219 Magick::IndexPacket *ind = m_img.getIndexes (); |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1220 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
|
1221 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1222 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
|
1223 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1224 Magick::Color c (double (*img_fvec) / divisor, |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1225 double (img_fvec[M_offset]) / divisor, |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1226 double (img_fvec[Y_offset]) / divisor, |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1227 double (img_fvec[K_offset]) / divisor); |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1228 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
|
1229 ind[GM_idx] = MaxRGB - (double (*a_fvec) / divisor); |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1230 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
|
1231 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
|
1232 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
|
1233 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1234 GM_idx -= nCols * 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
|
1235 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1236 // 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
|
1237 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
|
1238 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
|
1239 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1240 break; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1241 } |
11034
6589aaf769f6
Correctly handle logical and integer bit depths
John Swensen <jpswensen@gmail.com>
parents:
10988
diff
changeset
|
1242 |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1243 default: |
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 error ("__magick_write__: unrecognized Magick::ImageType"); |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1246 return; |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1247 } |
8054 | 1248 } |
17332
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1249 return; |
8054 | 1250 } |
1251 | |
16988
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1252 void static |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
1253 write_file (const std::string& filename, |
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
1254 const std::string& ext, |
16988
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1255 std::vector<Magick::Image>& imvec) |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1256 { |
7974 | 1257 try |
1258 { | |
16988
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1259 Magick::writeImages (imvec.begin (), imvec.end (), ext + ":" + filename); |
7974 | 1260 } |
1261 catch (Magick::Warning& w) | |
1262 { | |
1263 warning ("Magick++ warning: %s", w.what ()); | |
1264 } | |
1265 catch (Magick::ErrorCoder& e) | |
1266 { | |
1267 warning ("Magick++ coder error: %s", e.what ()); | |
1268 } | |
1269 catch (Magick::Exception& e) | |
1270 { | |
1271 error ("Magick++ exception: %s", e.what ()); | |
16988
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1272 error_state = 1; |
7974 | 1273 } |
1274 } | |
1275 | |
1276 #endif | |
1277 | |
9436
5302df15ad76
__magick_read__.cc: undo unintended change
John W. Eaton <jwe@octave.org>
parents:
9434
diff
changeset
|
1278 DEFUN_DLD (__magick_write__, args, , |
7974 | 1279 "-*- texinfo -*-\n\ |
16988
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1280 @deftypefn {Loadable Function} {} __magick_write__ (@var{fname}, @var{fmt}, @var{img}, @var{map}, @var{options})\n\ |
16984
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
1281 Write image with GraphicsMagick or ImageMagick.\n\ |
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
1282 \n\ |
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
1283 This is a private internal function not intended for direct use. Instead\n\ |
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
1284 use @code{imwrite}.\n\ |
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
1285 \n\ |
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
1286 @seealso{imfinfo, imformats, imread, imwrite}\n\ |
7974 | 1287 @end deftypefn") |
1288 { | |
1289 octave_value_list retval; | |
1290 | |
16983
4660d047955e
Make use of gripe_disabled_feature() for image IO functions.
Carnë Draug <carandraug+dev@gmail.com>
parents:
16944
diff
changeset
|
1291 #ifndef HAVE_MAGICK |
4660d047955e
Make use of gripe_disabled_feature() for image IO functions.
Carnë Draug <carandraug+dev@gmail.com>
parents:
16944
diff
changeset
|
1292 gripe_disabled_feature ("imwrite", "Image IO"); |
4660d047955e
Make use of gripe_disabled_feature() for image IO functions.
Carnë Draug <carandraug+dev@gmail.com>
parents:
16944
diff
changeset
|
1293 #else |
4660d047955e
Make use of gripe_disabled_feature() for image IO functions.
Carnë Draug <carandraug+dev@gmail.com>
parents:
16944
diff
changeset
|
1294 |
10947
dc74ce93cfc4
initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
1295 maybe_initialize_magick (); |
dc74ce93cfc4
initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
1296 |
16988
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1297 if (args.length () != 5 || ! args(0).is_string () || ! args(1).is_string ()) |
7974 | 1298 { |
16988
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1299 print_usage (); |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1300 return retval; |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1301 } |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1302 const std::string filename = args(0).string_value (); |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1303 const std::string ext = args(1).string_value (); |
7974 | 1304 |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1305 const octave_scalar_map options = args(4).scalar_map_value (); |
16988
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1306 if (error_state) |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1307 { |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1308 error ("__magick_write__: OPTIONS must be a struct"); |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1309 return retval; |
16988
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1310 } |
7974 | 1311 |
16988
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1312 const octave_value img = args(2); |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1313 const Matrix cmap = args(3).matrix_value (); |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1314 if (error_state) |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1315 { |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1316 error ("__magick_write__: invalid IMG or MAP"); |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1317 return retval; |
16988
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1318 } |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
1319 |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1320 std::vector<Magick::Image> imvec; |
16988
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1321 |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1322 if (cmap.is_empty ()) |
16988
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1323 { |
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 const octave_value alpha = options.getfield ("alpha"); |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1325 if (img.is_bool_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
|
1326 encode_bool_image (imvec, img.bool_array_value ()); |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1327 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
|
1328 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
|
1329 alpha.uint8_array_value ()); |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1330 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
|
1331 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
|
1332 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
|
1333 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
|
1334 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
|
1335 alpha.uint32_array_value ()); |
17228
2f1729cae08f
Initial support for writing of floating point and uint32 images.
Carnë Draug <carandraug@octave.org>
parents:
17226
diff
changeset
|
1336 else if (img.is_float_type ()) |
2f1729cae08f
Initial support for writing of floating point and uint32 images.
Carnë Draug <carandraug@octave.org>
parents:
17226
diff
changeset
|
1337 { |
2f1729cae08f
Initial support for writing of floating point and uint32 images.
Carnë Draug <carandraug@octave.org>
parents:
17226
diff
changeset
|
1338 // For image formats that support floating point values, we write |
2f1729cae08f
Initial support for writing of floating point and uint32 images.
Carnë Draug <carandraug@octave.org>
parents:
17226
diff
changeset
|
1339 // the actual values. For those who don't, we only use the values |
2f1729cae08f
Initial support for writing of floating point and uint32 images.
Carnë Draug <carandraug@octave.org>
parents:
17226
diff
changeset
|
1340 // 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
|
1341 // 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
|
1342 // 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
|
1343 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
|
1344 uint32NDArray clip_alpha; |
17228
2f1729cae08f
Initial support for writing of floating point and uint32 images.
Carnë Draug <carandraug@octave.org>
parents:
17226
diff
changeset
|
1345 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
|
1346 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1347 clip_img = img_float2uint<FloatNDArray> (img.float_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
|
1348 clip_alpha = img_float2uint<FloatNDArray> (alpha.float_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
|
1349 } |
17228
2f1729cae08f
Initial support for writing of floating point and uint32 images.
Carnë Draug <carandraug@octave.org>
parents:
17226
diff
changeset
|
1350 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
|
1351 { |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1352 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
|
1353 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
|
1354 } |
eb7e9a991ffb
Implement writing of CMYK and fix writing of image alpha channel (bug #32986).
Carnë Draug <carandraug@octave.org>
parents:
17240
diff
changeset
|
1355 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
|
1356 } |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1357 else |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1358 { |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1359 error ("__magick_write__: image type not supported"); |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1360 return retval; |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1361 } |
7974 | 1362 } |
1363 else | |
16988
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1364 { |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1365 // We should not get floating point indexed images here because we |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1366 // converted them in __imwrite__.m. We should probably do it here |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1367 // but it would look much messier. |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1368 if (img.is_uint8_type ()) |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
1369 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
|
1370 cmap); |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1371 else if (img.is_uint16_type ()) |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
1372 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
|
1373 cmap); |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1374 else |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1375 { |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1376 error ("__magick_write__: indexed image must be uint8, uint16 or float."); |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1377 return retval; |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1378 } |
16988
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1379 } |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1380 |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1381 const octave_idx_type nFrames = imvec.size (); |
16988
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1382 |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1383 // FIXME What happens when we try to set with formats that do not support it? |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1384 const octave_idx_type quality = options.getfield ("quality").int_value (); |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1385 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
|
1386 imvec[i].quality (quality); |
16988
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1387 |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1388 // If writemode is set to append, read the image and append to it. Even |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1389 // 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
|
1390 const std::string writemode = options.getfield ("writemode").string_value (); |
16989
7a69ab84b8c9
__magick_write__: confirm file exists before reading to append.
Carnë Draug <carandraug@octave.org>
parents:
16988
diff
changeset
|
1391 if (writemode == "append" && file_stat (filename).exists ()) |
16988
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1392 { |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1393 std::vector<Magick::Image> ini_imvec; |
16988
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1394 read_file (filename, ini_imvec); |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1395 if (error_state) |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1396 return retval; |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1397 if (ini_imvec.size () > 0) |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1398 { |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1399 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
|
1400 ini_imvec.swap (imvec); |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1401 } |
16988
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1402 } |
54b75bed4bc7
imwrite: implement WriteMode option.
Carnë Draug <carandraug@octave.org>
parents:
16984
diff
changeset
|
1403 |
17226
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1404 write_file (filename, ext, imvec); |
46805642048f
Implement writing of indexed images.
Carnë Draug <carandraug@octave.org>
parents:
17149
diff
changeset
|
1405 if (error_state) |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
1406 return retval; |
7974 | 1407 |
1408 #endif | |
16983
4660d047955e
Make use of gripe_disabled_feature() for image IO functions.
Carnë Draug <carandraug+dev@gmail.com>
parents:
16944
diff
changeset
|
1409 return retval; |
7974 | 1410 } |
1411 | |
12805
3641167e5b75
codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents:
11590
diff
changeset
|
1412 /* |
3641167e5b75
codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents:
11590
diff
changeset
|
1413 ## 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
|
1414 %!assert (1) |
3641167e5b75
codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents:
11590
diff
changeset
|
1415 */ |
3641167e5b75
codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents:
11590
diff
changeset
|
1416 |
17351
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1417 // Gets the minimum information from images such as its size and format. Much |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1418 // faster than using imfinfo, which slows down a lot since. Note than without |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1419 // 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
|
1420 // done in Octave language), and then again for the actual reading. |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1421 DEFUN_DLD (__magick_ping__, args, , |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1422 "-*- texinfo -*-\n\ |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1423 @deftypefn {Loadable Function} {} __magick_ping__ (@var{fname}, @var{idx})\n\ |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1424 Ping image information with GraphicsMagick or ImageMagick.\n\ |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1425 \n\ |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1426 This is a private internal function not intended for direct use.\n\ |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1427 \n\ |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1428 @seealso{imfinfo}\n\ |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1429 @end deftypefn") |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1430 { |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1431 octave_value retval; |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1432 #ifndef HAVE_MAGICK |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1433 gripe_disabled_feature ("imfinfo", "Image IO"); |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1434 #else |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1435 maybe_initialize_magick (); |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1436 |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1437 if (args.length () < 1 || ! args(0).is_string ()) |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1438 { |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1439 print_usage (); |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1440 return retval; |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1441 } |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1442 const std::string filename = args(0).string_value (); |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1443 int idx; |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1444 if (args.length () > 1) |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1445 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
|
1446 else |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1447 idx = 0; |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1448 |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1449 Magick::Image img; |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1450 img.subImage (idx); |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1451 img.subRange (1); |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1452 img.ping (filename); |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1453 static const char *fields[] = {"rows", "columns", "format", 0}; |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1454 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
|
1455 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
|
1456 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
|
1457 ping.setfield ("format", octave_value (img.magick ())); |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1458 retval = octave_value (ping); |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1459 #endif |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1460 return retval; |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1461 } |
80bf005cdf8e
New function __magick_ping__ to speed reading of images.
Carnë Draug <carandraug@octave.org>
parents:
17350
diff
changeset
|
1462 |
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
|
1463 #ifdef HAVE_MAGICK |
8144
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1464 static octave_value |
17350 | 1465 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
|
1466 { |
17350 | 1467 switch (magick) |
1468 { | |
1469 case Magick::NoCompression: | |
1470 return octave_value ("none"); | |
1471 case Magick::BZipCompression: | |
1472 return octave_value ("bzip"); | |
1473 case Magick::FaxCompression: | |
1474 return octave_value ("fax3"); | |
1475 case Magick::Group4Compression: | |
1476 return octave_value ("fax4"); | |
1477 case Magick::JPEGCompression: | |
1478 return octave_value ("jpeg"); | |
1479 case Magick::LZWCompression: | |
1480 return octave_value ("lzw"); | |
1481 case Magick::RLECompression: | |
1482 // This is named "rle" for the HDF, but the same thing is named | |
1483 // "ccitt" and "PackBits" for binary and non-binary images in TIFF. | |
1484 return octave_value ("rle"); | |
1485 case Magick::ZipCompression: | |
1486 return octave_value ("deflate"); | |
17362
6e1a3b8fc312
__magick_finfo__: remove recent Magick compression types (bug #39913)
Carnë Draug <carandraug@octave.org>
parents:
17359
diff
changeset
|
1487 |
6e1a3b8fc312
__magick_finfo__: remove recent Magick compression types (bug #39913)
Carnë Draug <carandraug@octave.org>
parents:
17359
diff
changeset
|
1488 // The following are present only in recent versions of GraphicsMagick. |
6e1a3b8fc312
__magick_finfo__: remove recent Magick compression types (bug #39913)
Carnë Draug <carandraug@octave.org>
parents:
17359
diff
changeset
|
1489 // At the moment the only use of this would be to have imfinfo report |
6e1a3b8fc312
__magick_finfo__: remove recent Magick compression types (bug #39913)
Carnë Draug <carandraug@octave.org>
parents:
17359
diff
changeset
|
1490 // the compression method. In the future, someone could implement |
6e1a3b8fc312
__magick_finfo__: remove recent Magick compression types (bug #39913)
Carnë Draug <carandraug@octave.org>
parents:
17359
diff
changeset
|
1491 // the Compression option for imwrite in which case a macro in |
6e1a3b8fc312
__magick_finfo__: remove recent Magick compression types (bug #39913)
Carnë Draug <carandraug@octave.org>
parents:
17359
diff
changeset
|
1492 // configure.ac will have to check for their presence of this. |
6e1a3b8fc312
__magick_finfo__: remove recent Magick compression types (bug #39913)
Carnë Draug <carandraug@octave.org>
parents:
17359
diff
changeset
|
1493 // See bug #39913 |
6e1a3b8fc312
__magick_finfo__: remove recent Magick compression types (bug #39913)
Carnë Draug <carandraug@octave.org>
parents:
17359
diff
changeset
|
1494 // case Magick::LZMACompression: |
6e1a3b8fc312
__magick_finfo__: remove recent Magick compression types (bug #39913)
Carnë Draug <carandraug@octave.org>
parents:
17359
diff
changeset
|
1495 // return octave_value ("lzma"); |
6e1a3b8fc312
__magick_finfo__: remove recent Magick compression types (bug #39913)
Carnë Draug <carandraug@octave.org>
parents:
17359
diff
changeset
|
1496 // case Magick::JPEG2000Compression: |
6e1a3b8fc312
__magick_finfo__: remove recent Magick compression types (bug #39913)
Carnë Draug <carandraug@octave.org>
parents:
17359
diff
changeset
|
1497 // return octave_value ("jpeg2000"); |
6e1a3b8fc312
__magick_finfo__: remove recent Magick compression types (bug #39913)
Carnë Draug <carandraug@octave.org>
parents:
17359
diff
changeset
|
1498 // case Magick::JBIG1Compression: |
6e1a3b8fc312
__magick_finfo__: remove recent Magick compression types (bug #39913)
Carnë Draug <carandraug@octave.org>
parents:
17359
diff
changeset
|
1499 // return octave_value ("jbig1"); |
6e1a3b8fc312
__magick_finfo__: remove recent Magick compression types (bug #39913)
Carnë Draug <carandraug@octave.org>
parents:
17359
diff
changeset
|
1500 // case Magick::JBIG2Compression: |
6e1a3b8fc312
__magick_finfo__: remove recent Magick compression types (bug #39913)
Carnë Draug <carandraug@octave.org>
parents:
17359
diff
changeset
|
1501 // return octave_value ("jbig2"); |
17350 | 1502 default: |
1503 return octave_value ("undefined"); | |
1504 } | |
8144
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1505 } |
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1506 |
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1507 static octave_value |
17350 | 1508 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
|
1509 { |
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1510 switch (magick) |
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1511 { |
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1512 case Magick::LSBEndian: |
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1513 return octave_value ("little-endian"); |
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1514 case Magick::MSBEndian: |
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1515 return octave_value ("big-endian"); |
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1516 default: |
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1517 return octave_value ("undefined"); |
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1518 } |
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1519 } |
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1520 |
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1521 static octave_value |
17350 | 1522 magick_to_octave_value (const Magick::OrientationType& magick) |
1523 { | |
1524 switch (magick) | |
1525 { | |
1526 // Values come from the TIFF6 spec | |
1527 case Magick::TopLeftOrientation: | |
1528 return octave_value (1); | |
1529 case Magick::TopRightOrientation: | |
1530 return octave_value (2); | |
1531 case Magick::BottomRightOrientation: | |
1532 return octave_value (3); | |
1533 case Magick::BottomLeftOrientation: | |
1534 return octave_value (4); | |
1535 case Magick::LeftTopOrientation: | |
1536 return octave_value (5); | |
1537 case Magick::RightTopOrientation: | |
1538 return octave_value (6); | |
1539 case Magick::RightBottomOrientation: | |
1540 return octave_value (7); | |
1541 case Magick::LeftBottomOrientation: | |
1542 return octave_value (8); | |
1543 default: | |
1544 return octave_value (1); | |
1545 } | |
1546 } | |
1547 | |
1548 static octave_value | |
1549 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
|
1550 { |
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1551 switch (magick) |
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1552 { |
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1553 case Magick::PixelsPerInchResolution: |
17350 | 1554 return octave_value ("Inch"); |
8144
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1555 case Magick::PixelsPerCentimeterResolution: |
17350 | 1556 return octave_value ("Centimeter"); |
8144
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1557 default: |
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1558 return octave_value ("undefined"); |
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1559 } |
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1560 } |
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1561 |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1562 // Meant to be shared with both imfinfo and imwrite. |
17350 | 1563 static std::map<octave_idx_type, std::string> |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1564 init_disposal_methods () |
8144
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1565 { |
17350 | 1566 // GIF Specifications: |
1567 // | |
1568 // Disposal Method - Indicates the way in which the graphic is to | |
1569 // be treated after being displayed. | |
1570 // | |
1571 // 0 - No disposal specified. The decoder is | |
1572 // not required to take any action. | |
1573 // 1 - Do not dispose. The graphic is to be left | |
1574 // in place. | |
1575 // 2 - Restore to background color. The area used by the | |
1576 // graphic must be restored to the background color. | |
1577 // 3 - Restore to previous. The decoder is required to | |
1578 // restore the area overwritten by the graphic with | |
1579 // what was there prior to rendering the graphic. | |
1580 // 4-7 - To be defined. | |
1581 static std::map<octave_idx_type, std::string> methods; | |
1582 if (methods.empty ()) | |
8144
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1583 { |
17350 | 1584 methods[0] = "doNotSpecify"; |
1585 methods[1] = "leaveInPlace"; | |
1586 methods[2] = "restoreBG"; | |
1587 methods[3] = "restorePrevious"; | |
8144
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1588 } |
17350 | 1589 return methods; |
8144
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1590 } |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1591 |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1592 static bool |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1593 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
|
1594 { |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1595 // 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
|
1596 // for an empty value. |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1597 return (! val.empty () && val != "unknown"); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1598 } |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1599 |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1600 static void |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1601 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
|
1602 const std::string& key) |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1603 { |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1604 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
|
1605 if (is_valid_exif (attr)) |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1606 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
|
1607 return; |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1608 } |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1609 |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1610 static void |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1611 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
|
1612 const std::string& key) |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1613 { |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1614 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
|
1615 if (is_valid_exif (attr)) |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1616 { |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1617 // 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
|
1618 float number; |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1619 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
|
1620 std::string sub; |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1621 std::istringstream sstream (attr); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1622 octave_idx_type n = 0; |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1623 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
|
1624 { |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1625 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
|
1626 values(n++) = number; |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1627 } |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1628 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
|
1629 } |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1630 return; |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1631 } |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1632 |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1633 static void |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1634 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
|
1635 const std::string& key) |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1636 { |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1637 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
|
1638 if (is_valid_exif (attr)) |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1639 { |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1640 // 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
|
1641 int numerator; |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1642 int denominator; |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1643 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
|
1644 std::string sub; |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1645 std::istringstream sstream (attr); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1646 octave_idx_type n = 0; |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1647 while (std::getline (sstream, sub, ',')) |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1648 { |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1649 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
|
1650 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
|
1651 } |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1652 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
|
1653 } |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1654 return; |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1655 } |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1656 |
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
|
1657 #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
|
1658 |
9436
5302df15ad76
__magick_read__.cc: undo unintended change
John W. Eaton <jwe@octave.org>
parents:
9434
diff
changeset
|
1659 DEFUN_DLD (__magick_finfo__, args, , |
8144
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1660 "-*- texinfo -*-\n\ |
14854
5ae9f0f77635
maint: Use Octave coding conventions for coddling parenthis is DLD-FUNCTIONS directory
Rik <octave@nomad.inbox5.com>
parents:
14846
diff
changeset
|
1661 @deftypefn {Loadable Function} {} __magick_finfo__ (@var{fname})\n\ |
16984
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
1662 Read image information with GraphicsMagick or ImageMagick.\n\ |
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
1663 \n\ |
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
1664 This is a private internal function not intended for direct use. Instead\n\ |
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
1665 use @code{imfinfo}.\n\ |
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
1666 \n\ |
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
1667 @seealso{imfinfo, imformats, imread, imwrite}\n\ |
8144
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1668 @end deftypefn") |
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1669 { |
10333
0c42b6b7da24
imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents:
10298
diff
changeset
|
1670 octave_value retval; |
8144
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1671 |
16983
4660d047955e
Make use of gripe_disabled_feature() for image IO functions.
Carnë Draug <carandraug+dev@gmail.com>
parents:
16944
diff
changeset
|
1672 #ifndef HAVE_MAGICK |
4660d047955e
Make use of gripe_disabled_feature() for image IO functions.
Carnë Draug <carandraug+dev@gmail.com>
parents:
16944
diff
changeset
|
1673 gripe_disabled_feature ("imfinfo", "Image IO"); |
4660d047955e
Make use of gripe_disabled_feature() for image IO functions.
Carnë Draug <carandraug+dev@gmail.com>
parents:
16944
diff
changeset
|
1674 #else |
10947
dc74ce93cfc4
initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
1675 maybe_initialize_magick (); |
dc74ce93cfc4
initialize GraphicsMagick in all __magick_* functions
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
1676 |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
1677 if (args.length () < 1 || ! args(0).is_string ()) |
8144
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1678 { |
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1679 print_usage (); |
10333
0c42b6b7da24
imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents:
10298
diff
changeset
|
1680 return retval; |
8144
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1681 } |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
1682 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
|
1683 |
17350 | 1684 std::vector<Magick::Image> imvec; |
1685 read_file (filename, imvec); | |
1686 if (error_state) | |
1687 return retval; | |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1688 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
|
1689 const std::string format = imvec[0].magick (); |
17350 | 1690 |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1691 // Here's how this function works. We need to return a struct array, one |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1692 // struct for each image in the file (remember, there are image |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1693 // that allow for multiple images in the same file). Now, Matlab seems |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1694 // to have format specific code so the fields on the struct are different |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1695 // for each format. It only has a small subset that is common to all |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1696 // of them, the others are undocumented. Because we try to abstract from |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1697 // the formats we always return the same list of fields (note that with |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1698 // GM we support more than 88 formats. That's way more than Matlab, and |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1699 // 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
|
1700 // |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1701 // 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
|
1702 // 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
|
1703 // 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
|
1704 // 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
|
1705 // 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
|
1706 // 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
|
1707 // 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
|
1708 |
17350 | 1709 static const char *fields[] = |
8144
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1710 { |
17350 | 1711 // These are fields that must always appear for Matlab. |
1712 "Filename", | |
1713 "FileModDate", | |
1714 "FileSize", | |
1715 "Format", | |
1716 "FormatVersion", | |
1717 "Width", | |
1718 "Height", | |
1719 "BitDepth", | |
1720 "ColorType", | |
10333
0c42b6b7da24
imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents:
10298
diff
changeset
|
1721 |
17350 | 1722 // These are format specific or not existent in Matlab. The most |
1723 // annoying thing is that Matlab may have different names for the | |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1724 // same thing in different formats. |
17350 | 1725 "DelayTime", |
1726 "DisposalMethod", | |
1727 "LoopCount", | |
1728 "ByteOrder", | |
1729 "Gamma", | |
1730 "Chromaticities", | |
1731 "Comment", | |
1732 "Quality", | |
1733 "Compression", // same as CompressionType | |
1734 "Colormap", // same as ColorTable (in PNG) | |
1735 "Orientation", | |
1736 "ResolutionUnit", | |
1737 "XResolution", | |
1738 "YResolution", | |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1739 "Software", // sometimes is an Exif tag |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1740 "Make", // actually an Exif tag |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1741 "Model", // actually an Exif tag |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1742 "DateTime", // actually an Exif tag |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1743 "ImageDescription", // actually an Exif tag |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1744 "Artist", // actually an Exif tag |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1745 "Copyright", // actually an Exif tag |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1746 "DigitalCamera", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1747 "GPSInfo", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1748 // Notes for the future: GM allows to get many attributes, and even has |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1749 // attribute() to obtain arbitrary ones, that may exist in only some |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1750 // cases. The following is a list of some methods and into what possible |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1751 // Matlab compatible values they may be converted. |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1752 // |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1753 // colorSpace() -> PhotometricInterpretation |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1754 // backgroundColor() -> BackgroundColor |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1755 // interlaceType() -> Interlaced, InterlaceType, and PlanarConfiguration |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1756 // label() -> Title |
17350 | 1757 0 |
1758 }; | |
10333
0c42b6b7da24
imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents:
10298
diff
changeset
|
1759 |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1760 // The one we will return at the end |
17350 | 1761 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
|
1762 |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1763 // Some of the fields in the struct are about file information and will be |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1764 // the same for all images in the file. So we create a template, fill in |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1765 // those values, and make a copy of the template for each image. |
17350 | 1766 octave_scalar_map template_info = (string_vector (fields)); |
1767 | |
1768 template_info.setfield ("Format", octave_value (format)); | |
1769 // We can't actually get FormatVersion but even Matlab sometimes can't. | |
1770 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
|
1771 |
17350 | 1772 const file_stat fs (filename); |
1773 if (fs) | |
8144
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1774 { |
17350 | 1775 const octave_localtime mtime (fs.mtime ()); |
1776 const std::string filetime = mtime.strftime ("%e-%b-%Y %H:%M:%S"); | |
1777 template_info.setfield ("Filename", octave_value (filename)); | |
1778 template_info.setfield ("FileModDate", octave_value (filetime)); | |
1779 template_info.setfield ("FileSize", octave_value (fs.size ())); | |
8144
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1780 } |
17350 | 1781 else |
8144
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1782 { |
17350 | 1783 error ("imfinfo: error reading '%s': %s", |
1784 filename.c_str (), fs.error ().c_str ()); | |
10333
0c42b6b7da24
imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents:
10298
diff
changeset
|
1785 return retval; |
8144
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
1786 } |
17350 | 1787 |
1788 for (octave_idx_type frame = 0; frame < nFrames; frame++) | |
1789 { | |
1790 octave_scalar_map info_frame (template_info); | |
1791 const Magick::Image img = imvec[frame]; | |
1792 | |
1793 info_frame.setfield ("Width", octave_value (img.columns ())); | |
1794 info_frame.setfield ("Height", octave_value (img.rows ())); | |
1795 info_frame.setfield ("BitDepth", | |
1796 octave_value (get_depth (const_cast<Magick::Image&> (img)))); | |
1797 | |
1798 // Stuff related to colormap, image class and type | |
1799 // Because GM is too smart for us... Read the comments in is_indexed() | |
1800 { | |
1801 std::string color_type; | |
1802 Matrix cmap; | |
1803 if (is_indexed (img)) | |
1804 { | |
1805 color_type = "indexed"; | |
1806 cmap = read_maps (const_cast<Magick::Image&> (img))(0).matrix_value (); | |
1807 } | |
1808 else | |
1809 { | |
1810 switch (img.type ()) | |
1811 { | |
1812 case Magick::BilevelType: | |
1813 case Magick::GrayscaleType: | |
1814 case Magick::GrayscaleMatteType: | |
1815 color_type = "grayscale"; | |
1816 break; | |
1817 | |
1818 case Magick::TrueColorType: | |
1819 case Magick::TrueColorMatteType: | |
1820 color_type = "truecolor"; | |
1821 break; | |
1822 | |
1823 case Magick::PaletteType: | |
1824 case Magick::PaletteMatteType: | |
1825 // we should never get here or is_indexed needs to be fixed | |
1826 color_type = "indexed"; | |
1827 break; | |
1828 | |
1829 case Magick::ColorSeparationType: | |
1830 case Magick::ColorSeparationMatteType: | |
1831 color_type = "CMYK"; | |
1832 break; | |
1833 | |
1834 default: | |
1835 color_type = "undefined"; | |
1836 } | |
1837 } | |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1838 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
|
1839 info_frame.setfield ("Colormap", octave_value (cmap)); |
17350 | 1840 } |
1841 | |
1842 { | |
1843 // Not all images have chroma values. In such cases, they'll | |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1844 // be all zeros. So rather than send a matrix of zeros, we will |
17350 | 1845 // check for that, and send an empty vector instead. |
1846 RowVector chromaticities (8); | |
1847 double* chroma_fvec = chromaticities.fortran_vec (); | |
1848 img.chromaWhitePoint (&chroma_fvec[0], &chroma_fvec[1]); | |
1849 img.chromaRedPrimary (&chroma_fvec[2], &chroma_fvec[3]); | |
1850 img.chromaGreenPrimary (&chroma_fvec[4], &chroma_fvec[5]); | |
1851 img.chromaBluePrimary (&chroma_fvec[6], &chroma_fvec[7]); | |
1852 if (chromaticities.nnz () == 0) | |
1853 chromaticities = RowVector (0); | |
1854 info_frame.setfield ("Chromaticities", octave_value (chromaticities)); | |
1855 } | |
1856 | |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1857 info_frame.setfield ("Gamma", octave_value (img.gamma ())); |
17350 | 1858 info_frame.setfield ("XResolution", octave_value (img.xResolution ())); |
1859 info_frame.setfield ("YResolution", octave_value (img.yResolution ())); | |
1860 info_frame.setfield ("DelayTime", octave_value (img.animationDelay ())); | |
1861 info_frame.setfield ("LoopCount", octave_value (img.animationIterations ())); | |
1862 info_frame.setfield ("Quality", octave_value (img.quality ())); | |
1863 info_frame.setfield ("Comment", octave_value (img.comment ())); | |
1864 | |
1865 info_frame.setfield ("Compression", | |
1866 magick_to_octave_value (img.compressType ())); | |
1867 info_frame.setfield ("Orientation", | |
1868 magick_to_octave_value (img.orientation ())); | |
1869 info_frame.setfield ("ResolutionUnit", | |
1870 magick_to_octave_value (img.resolutionUnits ())); | |
1871 info_frame.setfield ("ByteOrder", | |
1872 magick_to_octave_value (img.endian ())); | |
1873 | |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1874 // It is not possible to know if there's an Exif field so we just |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1875 // check for the Exif Version value. If it does exists, then we |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1876 // 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
|
1877 { |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1878 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
|
1879 |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1880 // 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
|
1881 // 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
|
1882 // This is likely because they belong to the Baseline TIFF specs |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1883 // and may appear out of the Exif tag. So first we check if it |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1884 // exists outside the Exif tag. |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1885 // 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
|
1886 // (CIPA DC- 008-Translation- 2010) |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1887 static const char *base_exif_str_fields[] = { |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1888 "DateTime", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1889 "ImageDescription", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1890 "Make", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1891 "Model", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1892 "Software", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1893 "Artist", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1894 "Copyright", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1895 0, |
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 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
|
1898 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
|
1899 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
|
1900 { |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1901 info_frame.setfield (base_exif_str[field], |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1902 octave_value (cimg.attribute (base_exif_str[field]))); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1903 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
|
1904 } |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1905 |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1906 octave_scalar_map camera; |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1907 octave_scalar_map gps; |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1908 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
|
1909 { |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1910 // 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
|
1911 // 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
|
1912 |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1913 // Listed on the Exif specs as being of type ASCII. |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1914 static const char *exif_str_fields[] = { |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1915 "RelatedSoundFile", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1916 "DateTimeOriginal", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1917 "DateTimeDigitized", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1918 "SubSecTime", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1919 "DateTimeOriginal", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1920 "SubSecTimeOriginal", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1921 "SubSecTimeDigitized", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1922 "ImageUniqueID", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1923 "CameraOwnerName", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1924 "BodySerialNumber", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1925 "LensMake", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1926 "LensModel", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1927 "LensSerialNumber", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1928 "SpectralSensitivity", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1929 // These last two are of type undefined but most likely will |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1930 // be strings. Even if they're not GM returns a string anyway. |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1931 "UserComment", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1932 "MakerComment", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1933 0 |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1934 }; |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1935 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
|
1936 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
|
1937 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
|
1938 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
|
1939 |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1940 // Listed on the Exif specs as being of type SHORT or LONG. |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1941 static const char *exif_int_fields[] = { |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1942 "ColorSpace", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1943 "ExifImageWidth", // PixelXDimension (CPixelXDimension in Matlab) |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1944 "ExifImageHeight", // PixelYDimension (CPixelYDimension in Matlab) |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1945 "PhotographicSensitivity", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1946 "StandardOutputSensitivity", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1947 "RecommendedExposureIndex", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1948 "ISOSpeed", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1949 "ISOSpeedLatitudeyyy", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1950 "ISOSpeedLatitudezzz", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1951 "FocalPlaneResolutionUnit", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1952 "FocalLengthIn35mmFilm", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1953 // 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
|
1954 "SubjectArea", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1955 "SubjectLocation", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1956 // 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
|
1957 // 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
|
1958 // 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
|
1959 // "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
|
1960 "ExposureProgram", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1961 "SensitivityType", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1962 "MeteringMode", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1963 "LightSource", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1964 "Flash", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1965 "SensingMethod", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1966 "FileSource", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1967 "CustomRendered", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1968 "ExposureMode", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1969 "WhiteBalance", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1970 "SceneCaptureType", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1971 "GainControl", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1972 "Contrast", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1973 "Saturation", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1974 "Sharpness", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1975 "SubjectDistanceRange", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1976 0 |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1977 }; |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1978 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
|
1979 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
|
1980 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
|
1981 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
|
1982 |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1983 // Listed as RATIONAL or SRATIONAL |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1984 static const char *exif_float_fields[] = { |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1985 "Gamma", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1986 "CompressedBitsPerPixel", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1987 "ExposureTime", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1988 "FNumber", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1989 "ShutterSpeedValue", // SRATIONAL |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1990 "ApertureValue", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1991 "BrightnessValue", // SRATIONAL |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1992 "ExposureBiasValue", // SRATIONAL |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1993 "MaxApertureValue", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1994 "SubjectDistance", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1995 "FocalLength", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1996 "FlashEnergy", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1997 "FocalPlaneXResolution", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1998 "FocalPlaneYResolution", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
1999 "ExposureIndex", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2000 "DigitalZoomRatio", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2001 // 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
|
2002 "LensSpecification", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2003 0 |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2004 }; |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2005 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
|
2006 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
|
2007 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
|
2008 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
|
2009 |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2010 // Inside a Exif field, it is possible that there is also a |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2011 // GPS field. This is not the same as ExifVersion but seems |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2012 // 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
|
2013 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
|
2014 { |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2015 // 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
|
2016 // 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
|
2017 // 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
|
2018 |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2019 static const char *gps_str_fields[] = { |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2020 "GPSLatitudeRef", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2021 "GPSLongitudeRef", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2022 "GPSAltitudeRef", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2023 "GPSSatellites", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2024 "GPSStatus", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2025 "GPSMeasureMode", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2026 "GPSSpeedRef", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2027 "GPSTrackRef", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2028 "GPSImgDirectionRef", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2029 "GPSMapDatum", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2030 "GPSDestLatitudeRef", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2031 "GPSDestLongitudeRef", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2032 "GPSDestBearingRef", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2033 "GPSDestDistanceRef", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2034 "GPSDateStamp", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2035 0 |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2036 }; |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2037 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
|
2038 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
|
2039 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
|
2040 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
|
2041 |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2042 static const char *gps_int_fields[] = { |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2043 "GPSDifferential", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2044 0 |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2045 }; |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2046 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
|
2047 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
|
2048 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
|
2049 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
|
2050 |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2051 static const char *gps_float_fields[] = { |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2052 "GPSAltitude", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2053 "GPSDOP", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2054 "GPSSpeed", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2055 "GPSTrack", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2056 "GPSImgDirection", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2057 "GPSDestBearing", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2058 "GPSDestDistance", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2059 "GPSHPositioningError", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2060 // 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
|
2061 "GPSLatitude", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2062 "GPSLongitude", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2063 "GPSTimeStamp", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2064 "GPSDestLatitude", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2065 "GPSDestLongitude", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2066 0 |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2067 }; |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2068 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
|
2069 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
|
2070 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
|
2071 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
|
2072 |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2073 } |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2074 } |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2075 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
|
2076 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
|
2077 } |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2078 |
17350 | 2079 info.fast_elem_insert (frame, info_frame); |
2080 } | |
17359
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2081 |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2082 if (format == "GIF") |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2083 { |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2084 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
|
2085 = init_disposal_methods (); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2086 string_vector methods (nFrames); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2087 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
|
2088 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
|
2089 info.setfield ("DisposalMethod", Cell (methods)); |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2090 } |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2091 else |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2092 info.setfield ("DisposalMethod", |
cf5d41cc3695
Expand imfinfo to read Exif tags and GPS information.
Carnë Draug <carandraug@octave.org>
parents:
17351
diff
changeset
|
2093 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
|
2094 |
17350 | 2095 retval = octave_value (info); |
8144
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
2096 #endif |
10333
0c42b6b7da24
imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents:
10298
diff
changeset
|
2097 return retval; |
8144
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
2098 } |
01fac748b680
Add the 'imfinfo' function for reading image file information.
sh@sh-laptop
parents:
8090
diff
changeset
|
2099 |
12805
3641167e5b75
codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents:
11590
diff
changeset
|
2100 /* |
3641167e5b75
codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents:
11590
diff
changeset
|
2101 ## 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
|
2102 %!assert (1) |
3641167e5b75
codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents:
11590
diff
changeset
|
2103 */ |
3641167e5b75
codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents:
11590
diff
changeset
|
2104 |
16901
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2105 DEFUN_DLD (__magick_formats__, args, , |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2106 "-*- texinfo -*-\n\ |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2107 @deftypefn {Loadable Function} {} __magick_imformats__ (@var{formats})\n\ |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2108 Fill formats info with GraphicsMagick CoderInfo.\n\ |
16984
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
2109 \n\ |
997efb8d0b19
imread: implement options Index, Frames, and Info.
Carnë Draug <carandraug@octave.org>
parents:
16983
diff
changeset
|
2110 @seealso{imfinfo, imformats, imread, imwrite}\n\ |
16901
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2111 @end deftypefn") |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2112 { |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2113 octave_value retval; |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2114 #ifndef HAVE_MAGICK |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2115 gripe_disabled_feature ("imformats", "Image IO"); |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2116 #else |
17235
96a1c132e3c6
__magick_read__.cc: follow coding guidelines.
Carnë Draug <carandraug@octave.org>
parents:
17228
diff
changeset
|
2117 if (args.length () != 1 || ! args(0).is_map ()) |
16901
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2118 { |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2119 print_usage (); |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2120 return retval; |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2121 } |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2122 octave_map formats = args(0).map_value (); |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2123 |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2124 maybe_initialize_magick (); |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2125 for (octave_idx_type idx = 0; idx < formats.numel (); idx++) |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2126 { |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2127 try |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2128 { |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2129 octave_scalar_map fmt = formats.checkelem (idx); |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2130 Magick::CoderInfo coder (fmt.getfield ("coder").string_value ()); |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2131 |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2132 fmt.setfield ("description", octave_value (coder.description ())); |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2133 fmt.setfield ("multipage", coder.isMultiFrame () ? true : false); |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2134 // default for read and write is a function handle. If we can't |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2135 // read or write them, them set it to an empty value |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2136 if (! coder.isReadable ()) |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2137 fmt.setfield ("read", Matrix ()); |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2138 if (! coder.isWritable ()) |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2139 fmt.setfield ("write", Matrix ()); |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2140 formats.fast_elem_insert (idx, fmt); |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2141 } |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2142 catch (Magick::Exception& e) |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2143 { |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2144 // Exception here are missing formats. So we remove the format |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2145 // from the structure and reduce idx. |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2146 formats.delete_elements (idx); |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2147 idx--; |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2148 } |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2149 } |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2150 retval = formats; |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2151 #endif |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2152 return retval; |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2153 } |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2154 |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2155 /* |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2156 ## No test needed for internal helper function. |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2157 %!assert (1) |
861516dcad19
New function imformats.
Carnë Draug <carandraug@octave.org>
parents:
16871
diff
changeset
|
2158 */ |