137{
138 size_t
139 size;
140
141 _data=(void *) NULL;
142 _length=0;
143 _size=0;
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))
148 return;
149
150 switch(type_)
151 {
152 case CharPixel:
153 size=sizeof(unsigned char);
154 break;
155 case DoublePixel:
156 size=sizeof(double);
157 break;
158 case FloatPixel:
159 size=sizeof(float);
160 break;
161 case IntegerPixel:
162 case LongPixel:
163 size=sizeof(unsigned int);
164 break;
165 case QuantumPixel:
166 size=sizeof(Quantum);
167 break;
168 case ShortPixel:
169 size=sizeof(unsigned short);
170 break;
171 default:
172 throwExceptionExplicit(OptionError,"Invalid type");
173 return;
174 }
175
176 _length=width_*height_*map_.length();
177 _size=_length*size;
178 _data=AcquireMagickMemory(_size);
179
180 GetPPException;
181 MagickCore::ExportImagePixels(image_.constImage(),x_,y_,width_,height_,
182 map_.c_str(),type_,_data,exceptionInfo);
183 if (exceptionInfo->severity != UndefinedException)
184 relinquish();
185 ThrowPPException(image_.quiet());
186}