11#define MAGICKCORE_IMPLEMENTATION 1
12#define MAGICK_PLUSPLUS_IMPLEMENTATION 1
15#include "Magick++/Include.h"
17#include "Magick++/Thread.h"
18#include "Magick++/Exception.h"
19#include "Magick++/Pixels.h"
29 _view=AcquireVirtualCacheView(image_.image(),exceptionInfo),
30 ThrowPPException(image_.quiet());
33Magick::Pixels::~Pixels(
void)
36 _view=DestroyCacheView(_view);
39Magick::Quantum* Magick::Pixels::get(
const ssize_t x_,
const ssize_t y_,
40 const size_t columns_,
const size_t rows_)
48 Quantum* pixels=GetCacheViewAuthenticPixels(_view,x_,y_,columns_,rows_,
50 ThrowPPException(_image.quiet());
55const Magick::Quantum* Magick::Pixels::getConst(
const ssize_t x_,
56 const ssize_t y_,
const size_t columns_,
const size_t rows_)
64 const Quantum* pixels=GetCacheViewVirtualPixels(_view,x_,y_,columns_,rows_,
66 ThrowPPException(_image.quiet());
71ssize_t Magick::Pixels::offset(PixelChannel channel)
const
73 if (_image.constImage()->channel_map[channel].traits == UndefinedPixelTrait)
75 return _image.constImage()->channel_map[channel].offset;
78Magick::Quantum* Magick::Pixels::set(
const ssize_t x_,
const ssize_t y_,
79 const size_t columns_,
const size_t rows_)
87 Quantum* pixels=QueueCacheViewAuthenticPixels(_view,x_,y_,columns_,rows_,
89 ThrowPPException(_image.quiet());
94void Magick::Pixels::sync(
void)
97 (void) SyncCacheViewAuthenticPixels(_view,exceptionInfo);
98 ThrowPPException(_image.quiet());
102void* Magick::Pixels::metacontent(
void)
104 void* pixel_metacontent=GetCacheViewAuthenticMetacontent(_view);
106 return pixel_metacontent;
109Magick::PixelData::PixelData(
Magick::Image &image_,std::string map_,
110 const StorageType type_)
112 init(image_,0,0,image_.columns(),image_.rows(),map_,type_);
115Magick::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_,
117 const StorageType type_)
119 init(image_,x_,y_,width_,height_,map_,type_);
122Magick::PixelData::~PixelData(
void)
127const void *Magick::PixelData::data(
void)
const
132::ssize_t Magick::PixelData::length(
void)
const
137::ssize_t Magick::PixelData::size(
void)
const
142void 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_)
152 if ((x_ < 0) || (width_ == 0) || (y_ < 0) || (height_ == 0) ||
153 (x_ > (ssize_t) image_.columns()) || (((ssize_t) width_ + x_) > (ssize_t) image_.columns())
154 || (y_ > (ssize_t) image_.rows()) || (((ssize_t) height_ + y_) > (ssize_t) image_.rows())
155 || (map_.length() == 0))
161 size=
sizeof(
unsigned char);
170 size=
sizeof(
unsigned int);
173 size=
sizeof(MagickSizeType);
176 size=
sizeof(Quantum);
179 size=
sizeof(
unsigned short);
182 throwExceptionExplicit(MagickCore::OptionError,
"Invalid type");
186 _length=(ssize_t) (width_*height_*map_.length());
187 _size=_length*(ssize_t) size;
188 _data=AcquireMagickMemory((
size_t) _size);
191 MagickCore::ExportImagePixels(image_.image(),x_,y_,width_,height_,
192 map_.c_str(),type_,_data,exceptionInfo);
193 if (exceptionInfo->severity != MagickCore::UndefinedException)
195 ThrowPPException(image_.quiet());
198void Magick::PixelData::relinquish(
void)
throw()
200 if (_data != (
void *)NULL)
201 _data=RelinquishMagickMemory(_data);