www/api/Magick++/Pixels_8cpp_source.html
| Magick++ 7.1.0 |
Pixels.cpp
Go to the documentation of this file.
1 // This may look like C code, but it is really -*- C++ -*-
2 //
3 // Copyright Bob Friesenhahn, 1999, 2000, 2001, 2002, 2003
4 //
5 // Copyright @ 2013 ImageMagick Studio LLC, a non-profit organization
6 // dedicated to making software imaging solutions freely available.
7 //
8 // Pixels Implementation
9 //
10
11 #define MAGICKCORE_IMPLEMENTATION 1
12 #define MAGICK_PLUSPLUS_IMPLEMENTATION 1
13
14 #include <cstring>
15 #include "Magick++/Include.h"
16 #include <string> // This is here to compile with Visual C++
17 #include "Magick++/Thread.h"
18 #include "Magick++/Exception.h"
19 #include "Magick++/Pixels.h"
20
21 Magick::Pixels::Pixels(Magick::Image &image_)
22 : _image(image_),
23 _x(0),
24 _y(0),
25 _columns(0),
26 _rows(0)
27 {
29 _view=AcquireVirtualCacheView(image_.image(),exceptionInfo),
30ThrowPPException(image_.quiet());
31 }
32
33 Magick::Pixels::~Pixels(void)
34 {
35if (_view)
36 _view=DestroyCacheView(_view);
37 }
38
39 Magick::Quantum* Magick::Pixels::get(const ssize_t x_,const ssize_t y_,
40const size_t columns_,const size_t rows_)
41 {
42 _x=x_;
43 _y=y_;
44 _columns=columns_;
45 _rows=rows_;
46
48 Quantum* pixels=GetCacheViewAuthenticPixels(_view,x_,y_,columns_,rows_,
49 exceptionInfo);
50ThrowPPException(_image.quiet());
51
52return pixels;
53 }
54
55 const Magick::Quantum* Magick::Pixels::getConst(const ssize_t x_,
56const ssize_t y_,const size_t columns_,const size_t rows_)
57 {
58 _x=x_;
59 _y=y_;
60 _columns=columns_;
61 _rows=rows_;
62
64const Quantum* pixels=GetCacheViewVirtualPixels(_view,x_,y_,columns_,rows_,
65 exceptionInfo);
66ThrowPPException(_image.quiet());
67
68return pixels;
69 }
70
71 ssize_t Magick::Pixels::offset(PixelChannel channel) const
72 {
73if (_image.constImage()->channel_map[channel].traits == UndefinedPixelTrait)
74return -1;
75return _image.constImage()->channel_map[channel].offset;
76 }
77
78 Magick::Quantum* Magick::Pixels::set(const ssize_t x_,const ssize_t y_,
79const size_t columns_,const size_t rows_)
80 {
81 _x=x_;
82 _y=y_;
83 _columns=columns_;
84 _rows=rows_;
85
87 Quantum* pixels=QueueCacheViewAuthenticPixels(_view,x_,y_,columns_,rows_,
88 exceptionInfo);
89ThrowPPException(_image.quiet());
90
91return pixels;
92 }
93
94 void Magick::Pixels::sync(void)
95 {
97 (void) SyncCacheViewAuthenticPixels(_view,exceptionInfo);
98ThrowPPException(_image.quiet());
99 }
100
101 // Return pixel meta content
102 void* Magick::Pixels::metacontent(void)
103 {
104void* pixel_metacontent=GetCacheViewAuthenticMetacontent(_view);
105
106return pixel_metacontent;
107 }
108
109 Magick::PixelData::PixelData(Magick::Image &image_,std::string map_,
110const StorageType type_)
111 {
112 init(image_,0,0,image_.columns(),image_.rows(),map_,type_);
113 }
114
115 Magick::PixelData::PixelData(Magick::Image &image_,const ::ssize_t x_,
116 const ::ssize_t y_,const size_t width_,const size_t height_,std::string map_,
117const StorageType type_)
118 {
119 init(image_,x_,y_,width_,height_,map_,type_);
120 }
121
122 Magick::PixelData::~PixelData(void)
123 {
124 relinquish();
125 }
126
127 const void *Magick::PixelData::data(void) const
128 {
129return(_data);
130 }
131
132 ::ssize_t Magick::PixelData::length(void) const
133 {
134return(_length);
135 }
136
137 ::ssize_t Magick::PixelData::size(void) const
138 {
139return(_size);
140 }
141
142 void Magick::PixelData::init(Magick::Image &image_,const ::ssize_t x_,
143 const ::ssize_t y_,const size_t width_,const size_t height_,
144 std::string map_,const StorageType type_)
145 {
146size_t
147 size;
148
149 _data=(void *) NULL;
150 _length=0;
151 _size=0;
152if ((x_ < 0) || (width_ == 0) || (y_ < 0) || (height_ == 0) ||
153 (x_ > (ssize_t) image_.columns()) || ((width_ + x_) > image_.columns())
154 || (y_ > (ssize_t) image_.rows()) || ((height_ + y_) > image_.rows())
155 || (map_.length() == 0))
156return;
157
158switch(type_)
159 {
160case CharPixel:
161 size=sizeof(unsigned char);
162break;
163case DoublePixel:
164 size=sizeof(double);
165break;
166case FloatPixel:
167 size=sizeof(float);
168break;
169case LongPixel:
170 size=sizeof(unsigned int);
171break;
172case LongLongPixel:
173 size=sizeof(MagickSizeType);
174break;
175case QuantumPixel:
176 size=sizeof(Quantum);
177break;
178case ShortPixel:
179 size=sizeof(unsigned short);
180break;
181default:
182throwExceptionExplicit(MagickCore::OptionError,"Invalid type");
183return;
184 }
185
186 _length=width_*height_*map_.length();
187 _size=_length*size;
188 _data=AcquireMagickMemory(_size);
189
190GetPPException;
191 MagickCore::ExportImagePixels(image_.image(),x_,y_,width_,height_,
192 map_.c_str(),type_,_data,exceptionInfo);
193if (exceptionInfo->severity != MagickCore::UndefinedException)
194 relinquish();
195ThrowPPException(image_.quiet());
196 }
197
198 void Magick::PixelData::relinquish(void) throw()
199 {
200if (_data != (void *)NULL)
201 _data=RelinquishMagickMemory(_data);
202 _length=0;
203 _size=0;
204 }
Quantum * get(const ::ssize_t x_, const ::ssize_t y_, const size_t columns_, const size_t rows_)
Definition: Pixels.cpp:39
const Quantum * getConst(const ::ssize_t x_, const ::ssize_t y_, const size_t columns_, const size_t rows_)
Definition: Pixels.cpp:55
void quiet(const bool quiet_)
Definition: Image.cpp:1316
~PixelData(void)
Definition: Pixels.cpp:122
MagickCore::Image *& image(void)
Definition: Image.cpp:5024
::ssize_t length(void) const
Definition: Pixels.cpp:132
const void * data(void) const
Definition: Pixels.cpp:127
void sync(void)
Definition: Pixels.cpp:94
Pixels(Magick::Image &image_)
Definition: Pixels.cpp:21
::ssize_t size(void) const
Definition: Pixels.cpp:137
~Pixels(void)
Definition: Pixels.cpp:33
Magick::throwExceptionExplicit
MagickPPExport void throwExceptionExplicit(const MagickCore::ExceptionType severity_, const char *reason_, const char *description_=(char *) NULL)
Definition: Exception.cpp:808
#define ThrowPPException(quiet)
Definition: Include.h:1580
PixelData(Magick::Image &image_, std::string map_, const StorageType type_)
Definition: Pixels.cpp:109
Quantum * set(const ::ssize_t x_, const ::ssize_t y_, const size_t columns_, const size_t rows_)
Definition: Pixels.cpp:78
ssize_t offset(PixelChannel channel) const
Definition: Pixels.cpp:71
size_t rows(void) const
Definition: Image.cpp:1352
size_t columns(void) const
Definition: Image.cpp:590
void * metacontent(void)
Definition: Pixels.cpp:102
#define GetPPException
Definition: Include.h:1561
Definition: Image.h:55