143{
144 size_t
145 size;
146
147 _data=(void *) NULL;
148 _length=0;
149 _size=0;
150 if ((x_ < 0) || (width_ == 0) || (y_ < 0) || (height_ == 0) ||
151 (x_ > (ssize_t) image_.columns()) || (((ssize_t) width_ + x_) > (ssize_t) image_.columns())
152 || (y_ > (ssize_t) image_.rows()) || (((ssize_t) height_ + y_) > (ssize_t) image_.rows())
153 || (map_.length() == 0))
154 return;
155
156 switch(type_)
157 {
158 case CharPixel:
159 size=sizeof(unsigned char);
160 break;
161 case DoublePixel:
162 size=sizeof(double);
163 break;
164 case FloatPixel:
165 size=sizeof(float);
166 break;
167 case LongPixel:
168 size=sizeof(unsigned int);
169 break;
170 case LongLongPixel:
171 size=sizeof(MagickSizeType);
172 break;
173 case QuantumPixel:
174 size=sizeof(Quantum);
175 break;
176 case ShortPixel:
177 size=sizeof(unsigned short);
178 break;
179 default:
180 throwExceptionExplicit(MagickCore::OptionError,"Invalid type");
181 return;
182 }
183
184 _length=(ssize_t) (width_*height_*map_.length());
185 _size=_length*(ssize_t) size;
186 _data=AcquireMagickMemory((size_t) _size);
187
188 GetPPException;
189 MagickCore::ExportImagePixels(image_.image(),x_,y_,width_,height_,
190 map_.c_str(),type_,_data,exceptionInfo);
191 if (exceptionInfo->severity != MagickCore::UndefinedException)
192 relinquish();
193 ThrowPPException(image_.quiet());
194}