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