9#define MAGICKCORE_IMPLEMENTATION 1
10#define MAGICK_PLUSPLUS_IMPLEMENTATION 1
12#include "Magick++/Include.h"
14#include "Magick++/Thread.h"
15#include "Magick++/Exception.h"
16#include "Magick++/Pixels.h"
26 _view=AcquireVirtualCacheView(image_.image(),exceptionInfo);
27 ThrowPPException(image_.quiet());
30Magick::Pixels::~Pixels(
void)
32 if (_view != (MagickCore::CacheView *) NULL)
33 _view=DestroyCacheView(_view);
36Magick::PixelPacket* Magick::Pixels::get(
const ssize_t x_,
const ssize_t y_,
37 const size_t columns_,
const size_t rows_)
45 PixelPacket* pixels=GetCacheViewAuthenticPixels(_view,x_,y_,columns_,rows_,
47 ThrowPPException(_image.quiet());
52const Magick::PixelPacket* Magick::Pixels::getConst(
const ssize_t x_,
53 const ssize_t y_,
const size_t columns_,
const size_t rows_)
61 const PixelPacket* pixels=GetCacheViewVirtualPixels(_view,x_,y_,columns_,
63 ThrowPPException(_image.quiet());
68Magick::PixelPacket* Magick::Pixels::set(
const ssize_t x_,
const ssize_t y_,
69 const size_t columns_,
const size_t rows_)
77 PixelPacket* pixels=QueueCacheViewAuthenticPixels(_view,x_,y_,columns_,rows_,
79 ThrowPPException(_image.quiet());
84void Magick::Pixels::sync(
void)
87 (void) SyncCacheViewAuthenticPixels(_view,exceptionInfo);
88 ThrowPPException(_image.quiet());
91Magick::IndexPacket* Magick::Pixels::indexes (
void)
93 IndexPacket* pixel_indexes=GetCacheViewAuthenticIndexQueue(_view);
96 _image.throwImageException();
101Magick::PixelData::PixelData(Magick::Image &image_,std::string map_,
102 const StorageType type_)
104 init(image_,0,0,image_.columns(),image_.rows(),map_,type_);
107Magick::PixelData::PixelData(Magick::Image &image_,const ::ssize_t x_,
108 const ::ssize_t y_,
const size_t width_,
const size_t height_,std::string map_,
109 const StorageType type_)
111 init(image_,x_,y_,width_,height_,map_,type_);
114Magick::PixelData::~PixelData(
void)
119const void *Magick::PixelData::data(
void)
const
124::ssize_t Magick::PixelData::length(
void)
const
129::ssize_t Magick::PixelData::size(
void)
const
134void Magick::PixelData::init(Magick::Image &image_,const ::ssize_t x_,
135 const ::ssize_t y_,
const size_t width_,
const size_t height_,
136 std::string map_,
const StorageType type_)
144 if ((x_ < 0) || (width_ == 0) || (y_ < 0) || (height_ == 0) ||
145 (x_ > (ssize_t) image_.columns()) || ((width_ + x_) > image_.columns())
146 || (y_ > (ssize_t) image_.rows()) || ((height_ + y_) > image_.rows())
147 || (map_.length() == 0))
153 size=
sizeof(
unsigned char);
163 size=
sizeof(
unsigned int);
166 size=
sizeof(Quantum);
169 size=
sizeof(
unsigned short);
172 throwExceptionExplicit(OptionError,
"Invalid type");
176 _length=width_*height_*map_.length();
178 _data=AcquireMagickMemory(_size);
181 MagickCore::ExportImagePixels(image_.constImage(),x_,y_,width_,height_,
182 map_.c_str(),type_,_data,exceptionInfo);
183 if (exceptionInfo->severity != UndefinedException)
185 ThrowPPException(image_.quiet());
188void Magick::PixelData::relinquish(
void)
throw()
190 if (_data != (
void *)NULL)
191 _data=RelinquishMagickMemory(_data);