blob: 7b3447545a3faf9a9a30d04fee700230a1fb3d06 [file] [log] [blame]
cristy3ed852e2009-09-05 21:47:34 +00001/*
2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3% %
4% %
5% %
6% QQQ U U AAA N N TTTTT U U M M %
7% Q Q U U A A NN N T U U MM MM %
8% Q Q U U AAAAA N N N T U U M M M %
9% Q QQ U U A A N NN T U U M M %
10% QQQQ UUU A A N N T UUU M M %
11% %
12% EEEEE X X PPPP OOO RRRR TTTTT %
13% E X X P P O O R R T %
14% EEE X PPPP O O RRRR T %
15% E X X P O O R R T %
16% EEEEE X X P OOO R R T %
17% %
18% MagickCore Methods to Export Quantum Pixels %
19% %
20% Software Design %
21% John Cristy %
22% October 1998 %
23% %
24% %
25% Copyright 1999-2008 ImageMagick Studio LLC, a non-profit organization %
26% dedicated to making software imaging solutions freely available. %
27% %
28% You may not use this file except in compliance with the License. You may %
29% obtain a copy of the License at %
30% %
31% http://www.imagemagick.org/script/license.php %
32% %
33% Unless required by applicable law or agreed to in writing, software %
34% distributed under the License is distributed on an "AS IS" BASIS, %
35% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. %
36% See the License for the specific language governing permissions and %
37% limitations under the License. %
38% %
39%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
40%
41%
42*/
43
44/*
45 Include declarations.
46*/
47#include "magick/studio.h"
48#include "magick/property.h"
49#include "magick/blob.h"
50#include "magick/blob-private.h"
51#include "magick/color-private.h"
52#include "magick/exception.h"
53#include "magick/exception-private.h"
54#include "magick/cache.h"
55#include "magick/constitute.h"
56#include "magick/delegate.h"
57#include "magick/geometry.h"
58#include "magick/list.h"
59#include "magick/magick.h"
60#include "magick/memory_.h"
61#include "magick/monitor.h"
62#include "magick/option.h"
63#include "magick/pixel.h"
64#include "magick/pixel-private.h"
65#include "magick/quantum.h"
66#include "magick/quantum-private.h"
67#include "magick/resource_.h"
68#include "magick/semaphore.h"
69#include "magick/statistic.h"
70#include "magick/stream.h"
71#include "magick/string_.h"
72#include "magick/utility.h"
73
74/*
75%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
76% %
77% %
78% %
79+ E x p o r t Q u a n t u m P i x e l s %
80% %
81% %
82% %
83%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
84%
85% ExportQuantumPixels() transfers one or more pixel components from the image
86% pixel cache to a user supplied buffer. The pixels are returned in network
87% byte order. MagickTrue is returned if the pixels are successfully
88% transferred, otherwise MagickFalse.
89%
90% The format of the ExportQuantumPixels method is:
91%
cristy891dc792010-03-04 01:47:16 +000092% size_t ExportQuantumPixels(const Image *image,
93% const CacheView *image_view,const QuantumInfo *quantum_info,
94% const QuantumType quantum_type,unsigned char *pixels,
95% ExceptionInfo *exception)
cristy3ed852e2009-09-05 21:47:34 +000096%
97% A description of each parameter follows:
98%
99% o image: the image.
100%
101% o image_view: the image cache view.
102%
103% o quantum_info: the quantum info.
104%
105% o quantum_type: Declare which pixel components to transfer (RGB, RGBA,
106% etc).
107%
108% o pixels: The components are transferred to this buffer.
109%
110% o exception: return any errors or warnings in this structure.
111%
112*/
113
114static inline unsigned char *PopDoublePixel(const QuantumState *quantum_state,
115 const double pixel,unsigned char *pixels)
116{
117 double
118 *p;
119
120 unsigned char
121 quantum[8];
122
123 p=(double *) quantum;
cristy82b15832009-10-06 19:17:37 +0000124 *p=(double) (pixel*quantum_state->inverse_scale+quantum_state->minimum);
cristy3ed852e2009-09-05 21:47:34 +0000125 if (quantum_state->endian != LSBEndian)
126 {
127 *pixels++=quantum[7];
128 *pixels++=quantum[6];
129 *pixels++=quantum[5];
130 *pixels++=quantum[4];
131 *pixels++=quantum[3];
132 *pixels++=quantum[2];
133 *pixels++=quantum[1];
134 *pixels++=quantum[0];
135 return(pixels);
136 }
137 *pixels++=quantum[0];
138 *pixels++=quantum[1];
139 *pixels++=quantum[2];
140 *pixels++=quantum[3];
141 *pixels++=quantum[4];
142 *pixels++=quantum[5];
143 *pixels++=quantum[6];
144 *pixels++=quantum[7];
145 return(pixels);
146}
147
148static inline unsigned char *PopFloatPixel(const QuantumState *quantum_state,
149 const float pixel,unsigned char *pixels)
150{
151 float
152 *p;
153
154 unsigned char
155 quantum[4];
156
157 p=(float *) quantum;
158 *p=(float) ((double) pixel*quantum_state->inverse_scale+
cristy82b15832009-10-06 19:17:37 +0000159 quantum_state->minimum);
cristy3ed852e2009-09-05 21:47:34 +0000160 if (quantum_state->endian != LSBEndian)
161 {
162 *pixels++=quantum[3];
163 *pixels++=quantum[2];
164 *pixels++=quantum[1];
165 *pixels++=quantum[0];
166 return(pixels);
167 }
168 *pixels++=quantum[0];
169 *pixels++=quantum[1];
170 *pixels++=quantum[2];
171 *pixels++=quantum[3];
172 return(pixels);
173}
174
175static inline unsigned char *PopQuantumPixel(QuantumState *quantum_state,
cristybb503372010-05-27 20:51:26 +0000176 const size_t depth,const QuantumAny pixel,unsigned char *pixels)
cristy3ed852e2009-09-05 21:47:34 +0000177{
cristybb503372010-05-27 20:51:26 +0000178 register ssize_t
cristy3ed852e2009-09-05 21:47:34 +0000179 i;
180
cristy6b825f92010-06-04 02:01:10 +0000181 size_t
cristy3ed852e2009-09-05 21:47:34 +0000182 quantum_bits;
183
184 if (quantum_state->bits == 0UL)
cristy4cb162a2010-05-30 03:04:47 +0000185 quantum_state->bits=8U;
cristybb503372010-05-27 20:51:26 +0000186 for (i=(ssize_t) depth; i > 0L; )
cristy3ed852e2009-09-05 21:47:34 +0000187 {
cristy6b825f92010-06-04 02:01:10 +0000188 quantum_bits=(size_t) i;
cristy3ed852e2009-09-05 21:47:34 +0000189 if (quantum_bits > quantum_state->bits)
190 quantum_bits=quantum_state->bits;
cristyebdf07a2010-06-04 14:48:53 +0000191 i-=(ssize_t) quantum_bits;
cristy6b825f92010-06-04 02:01:10 +0000192 if (quantum_state->bits == 8UL)
cristy3ed852e2009-09-05 21:47:34 +0000193 *pixels='\0';
194 quantum_state->bits-=quantum_bits;
cristy6b825f92010-06-04 02:01:10 +0000195 *pixels|=(((pixel >> i) &~ ((~0UL) << quantum_bits)) <<
cristy3ed852e2009-09-05 21:47:34 +0000196 quantum_state->bits);
197 if (quantum_state->bits == 0UL)
198 {
199 pixels++;
cristy6b825f92010-06-04 02:01:10 +0000200 quantum_state->bits=8UL;
cristy3ed852e2009-09-05 21:47:34 +0000201 }
202 }
203 return(pixels);
204}
205
206static inline unsigned char *PopQuantumLongPixel(QuantumState *quantum_state,
cristybb503372010-05-27 20:51:26 +0000207 const size_t depth,const size_t pixel,unsigned char *pixels)
cristy3ed852e2009-09-05 21:47:34 +0000208{
cristybb503372010-05-27 20:51:26 +0000209 register ssize_t
cristy3ed852e2009-09-05 21:47:34 +0000210 i;
211
cristy6b825f92010-06-04 02:01:10 +0000212 size_t
cristy3ed852e2009-09-05 21:47:34 +0000213 quantum_bits;
214
cristy4cb162a2010-05-30 03:04:47 +0000215 if (quantum_state->bits == 0U)
cristy6b825f92010-06-04 02:01:10 +0000216 quantum_state->bits=32UL;
cristybb503372010-05-27 20:51:26 +0000217 for (i=(ssize_t) depth; i > 0; )
cristy3ed852e2009-09-05 21:47:34 +0000218 {
cristybb503372010-05-27 20:51:26 +0000219 quantum_bits=(size_t) i;
cristy3ed852e2009-09-05 21:47:34 +0000220 if (quantum_bits > quantum_state->bits)
221 quantum_bits=quantum_state->bits;
222 quantum_state->pixel|=(((pixel >> (depth-i)) &
cristy4cb162a2010-05-30 03:04:47 +0000223 quantum_state->mask[quantum_bits]) << (32U-quantum_state->bits));
cristyeaedf062010-05-29 22:36:02 +0000224 i-=(ssize_t) quantum_bits;
cristy3ed852e2009-09-05 21:47:34 +0000225 quantum_state->bits-=quantum_bits;
226 if (quantum_state->bits == 0U)
227 {
228 pixels=PopLongPixel(quantum_state->endian,quantum_state->pixel,pixels);
229 quantum_state->pixel=0U;
cristy4cb162a2010-05-30 03:04:47 +0000230 quantum_state->bits=32U;
cristy3ed852e2009-09-05 21:47:34 +0000231 }
232 }
233 return(pixels);
234}
235
236MagickExport size_t ExportQuantumPixels(const Image *image,
237 const CacheView *image_view,const QuantumInfo *quantum_info,
238 const QuantumType quantum_type,unsigned char *pixels,ExceptionInfo *exception)
239{
240 EndianType
241 endian;
242
cristy3ed852e2009-09-05 21:47:34 +0000243 MagickRealType
244 alpha;
245
246 MagickSizeType
247 number_pixels;
248
249 QuantumAny
250 range;
251
252 QuantumState
253 quantum_state;
254
255 register const IndexPacket
cristyaebafa22009-11-26 01:48:56 +0000256 *restrict indexes;
cristy3ed852e2009-09-05 21:47:34 +0000257
258 register const PixelPacket
cristyaebafa22009-11-26 01:48:56 +0000259 *restrict p;
cristy3ed852e2009-09-05 21:47:34 +0000260
cristybb503372010-05-27 20:51:26 +0000261 register ssize_t
cristy3ed852e2009-09-05 21:47:34 +0000262 x;
263
264 register unsigned char
cristyaebafa22009-11-26 01:48:56 +0000265 *restrict q;
cristy3ed852e2009-09-05 21:47:34 +0000266
267 size_t
268 extent;
269
cristy9d314ff2011-03-09 01:30:28 +0000270 ssize_t
271 bit;
272
cristy3ed852e2009-09-05 21:47:34 +0000273 assert(image != (Image *) NULL);
274 assert(image->signature == MagickSignature);
275 if (image->debug != MagickFalse)
276 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
277 assert(quantum_info != (QuantumInfo *) NULL);
278 assert(quantum_info->signature == MagickSignature);
279 if (pixels == (unsigned char *) NULL)
280 pixels=GetQuantumPixels(quantum_info);
cristy8a7ea362010-03-10 20:31:43 +0000281 if (image_view == (CacheView *) NULL)
282 {
283 number_pixels=GetImageExtent(image);
284 p=GetVirtualPixelQueue(image);
285 indexes=GetVirtualIndexQueue(image);
286 }
287 else
cristy3ed852e2009-09-05 21:47:34 +0000288 {
289 number_pixels=GetCacheViewExtent(image_view);
290 p=GetCacheViewVirtualPixelQueue(image_view);
291 indexes=GetCacheViewVirtualIndexQueue(image_view);
292 }
293 if (quantum_info->alpha_type == AssociatedQuantumAlpha)
294 {
295 register PixelPacket
cristyc47d1f82009-11-26 01:44:43 +0000296 *restrict q;
cristy3ed852e2009-09-05 21:47:34 +0000297
298 /*
299 Associate alpha.
300 */
301 q=GetAuthenticPixelQueue(image);
302 if (image_view != (CacheView *) NULL)
303 q=(PixelPacket *) GetCacheViewVirtualPixelQueue(image_view);
cristybb503372010-05-27 20:51:26 +0000304 for (x=0; x < (ssize_t) image->columns; x++)
cristy3ed852e2009-09-05 21:47:34 +0000305 {
306 alpha=QuantumScale*((double) QuantumRange-q->opacity);
cristye85007d2010-06-06 22:51:36 +0000307 q->red=ClampToQuantum(alpha*q->red);
308 q->green=ClampToQuantum(alpha*q->green);
309 q->blue=ClampToQuantum(alpha*q->blue);
cristy3ed852e2009-09-05 21:47:34 +0000310 q++;
311 }
312 }
cristya6a96a12010-08-23 13:37:35 +0000313 if ((quantum_type == RGBOQuantum) || (quantum_type == CMYKOQuantum) ||
314 (quantum_type == BGROQuantum))
cristy3ed852e2009-09-05 21:47:34 +0000315 {
316 register PixelPacket
cristyc47d1f82009-11-26 01:44:43 +0000317 *restrict q;
cristy3ed852e2009-09-05 21:47:34 +0000318
319 q=GetAuthenticPixelQueue(image);
320 if (image_view != (CacheView *) NULL)
321 q=(PixelPacket *) GetCacheViewVirtualPixelQueue(image_view);
cristybb503372010-05-27 20:51:26 +0000322 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +0000323 {
cristy46f08202010-01-10 04:04:21 +0000324 q->opacity=(Quantum) GetAlphaPixelComponent(q);
cristy3ed852e2009-09-05 21:47:34 +0000325 q++;
326 }
327 }
328 if ((quantum_type == CbYCrQuantum) || (quantum_type == CbYCrAQuantum))
329 {
330 Quantum
331 quantum;
332
333 register PixelPacket
cristyc47d1f82009-11-26 01:44:43 +0000334 *restrict q;
cristy3ed852e2009-09-05 21:47:34 +0000335
336 q=GetAuthenticPixelQueue(image);
337 if (image_view != (CacheView *) NULL)
338 q=GetAuthenticPixelQueue(image);
cristybb503372010-05-27 20:51:26 +0000339 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +0000340 {
341 quantum=q->red;
342 q->red=q->green;
343 q->green=quantum;
344 q++;
345 }
346 }
347 x=0;
348 q=pixels;
349 InitializeQuantumState(quantum_info,image->endian,&quantum_state);
350 extent=GetQuantumExtent(image,quantum_info,quantum_type);
351 endian=quantum_state.endian;
352 switch (quantum_type)
353 {
354 case IndexQuantum:
355 {
356 if (image->storage_class != PseudoClass)
357 {
358 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
359 "ColormappedImageRequired","`%s'",image->filename);
360 return(extent);
361 }
362 switch (quantum_info->depth)
363 {
364 case 1:
365 {
366 register unsigned char
367 pixel;
368
cristybb503372010-05-27 20:51:26 +0000369 for (x=((ssize_t) number_pixels-7); x > 0; x-=8)
cristy3ed852e2009-09-05 21:47:34 +0000370 {
371 pixel=(unsigned char) *indexes++;
372 *q=((pixel & 0x01) << 7);
373 pixel=(unsigned char) *indexes++;
374 *q|=((pixel & 0x01) << 6);
375 pixel=(unsigned char) *indexes++;
376 *q|=((pixel & 0x01) << 5);
377 pixel=(unsigned char) *indexes++;
378 *q|=((pixel & 0x01) << 4);
379 pixel=(unsigned char) *indexes++;
380 *q|=((pixel & 0x01) << 3);
381 pixel=(unsigned char) *indexes++;
382 *q|=((pixel & 0x01) << 2);
383 pixel=(unsigned char) *indexes++;
384 *q|=((pixel & 0x01) << 1);
385 pixel=(unsigned char) *indexes++;
386 *q|=((pixel & 0x01) << 0);
387 q++;
388 }
389 if ((number_pixels % 8) != 0)
390 {
391 *q='\0';
cristybb503372010-05-27 20:51:26 +0000392 for (bit=7; bit >= (ssize_t) (8-(number_pixels % 8)); bit--)
cristy3ed852e2009-09-05 21:47:34 +0000393 {
394 pixel=(unsigned char) *indexes++;
395 *q|=((pixel & 0x01) << (unsigned char) bit);
396 }
397 q++;
398 }
399 break;
400 }
401 case 4:
402 {
403 register unsigned char
404 pixel;
405
cristybb503372010-05-27 20:51:26 +0000406 for (x=0; x < (ssize_t) (number_pixels-1) ; x+=2)
cristy3ed852e2009-09-05 21:47:34 +0000407 {
408 pixel=(unsigned char) *indexes++;
409 *q=((pixel & 0xf) << 4);
410 pixel=(unsigned char) *indexes++;
411 *q|=((pixel & 0xf) << 0);
412 q++;
413 }
414 if ((number_pixels % 2) != 0)
415 {
416 pixel=(unsigned char) *indexes++;
417 *q=((pixel & 0xf) << 4);
418 q++;
419 }
420 break;
421 }
422 case 8:
423 {
cristybb503372010-05-27 20:51:26 +0000424 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +0000425 {
426 q=PopCharPixel((unsigned char) indexes[x],q);
427 q+=quantum_info->pad;
428 }
429 break;
430 }
431 case 16:
432 {
cristyc9672a92010-01-06 00:57:45 +0000433 if (quantum_info->format == FloatingPointQuantumFormat)
434 {
cristybb503372010-05-27 20:51:26 +0000435 for (x=0; x < (ssize_t) number_pixels; x++)
cristyc9672a92010-01-06 00:57:45 +0000436 {
cristy2a4d01c2010-01-10 21:14:51 +0000437 q=PopShortPixel(endian,SinglePrecisionToHalf(QuantumScale*
cristyc9672a92010-01-06 00:57:45 +0000438 indexes[x]),q);
439 q+=quantum_info->pad;
440 }
441 break;
442 }
cristybb503372010-05-27 20:51:26 +0000443 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +0000444 {
445 q=PopShortPixel(endian,(unsigned short) indexes[x],q);
446 q+=quantum_info->pad;
447 }
448 break;
449 }
450 case 32:
451 {
452 if (quantum_info->format == FloatingPointQuantumFormat)
453 {
cristybb503372010-05-27 20:51:26 +0000454 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +0000455 {
456 q=PopFloatPixel(&quantum_state,(float) indexes[x],q);
457 p++;
458 q+=quantum_info->pad;
459 }
460 break;
461 }
cristybb503372010-05-27 20:51:26 +0000462 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +0000463 {
cristy4cb162a2010-05-30 03:04:47 +0000464 q=PopLongPixel(endian,(unsigned int) indexes[x],q);
cristy3ed852e2009-09-05 21:47:34 +0000465 q+=quantum_info->pad;
466 }
467 break;
468 }
469 case 64:
470 {
471 if (quantum_info->format == FloatingPointQuantumFormat)
472 {
cristybb503372010-05-27 20:51:26 +0000473 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +0000474 {
475 q=PopDoublePixel(&quantum_state,(double) indexes[x],q);
476 p++;
477 q+=quantum_info->pad;
478 }
479 break;
480 }
481 }
482 default:
483 {
cristybb503372010-05-27 20:51:26 +0000484 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +0000485 {
486 q=PopQuantumPixel(&quantum_state,image->depth,indexes[x],q);
487 p++;
488 q+=quantum_info->pad;
489 }
490 break;
491 }
492 }
493 break;
494 }
495 case IndexAlphaQuantum:
496 {
497 if (image->storage_class != PseudoClass)
498 {
499 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
500 "ColormappedImageRequired","`%s'",image->filename);
501 return(extent);
502 }
503 switch (quantum_info->depth)
504 {
505 case 1:
506 {
507 register unsigned char
508 pixel;
509
cristybb503372010-05-27 20:51:26 +0000510 for (x=((ssize_t) number_pixels-3); x > 0; x-=4)
cristy3ed852e2009-09-05 21:47:34 +0000511 {
512 pixel=(unsigned char) *indexes++;
513 *q=((pixel & 0x01) << 7);
514 pixel=(unsigned char) (p->opacity == (Quantum) TransparentOpacity ?
515 1 : 0);
516 *q|=((pixel & 0x01) << 6);
517 p++;
518 pixel=(unsigned char) *indexes++;
519 *q|=((pixel & 0x01) << 5);
520 pixel=(unsigned char) (p->opacity == (Quantum) TransparentOpacity ?
521 1 : 0);
522 *q|=((pixel & 0x01) << 4);
523 p++;
524 pixel=(unsigned char) *indexes++;
525 *q|=((pixel & 0x01) << 3);
526 pixel=(unsigned char) (p->opacity == (Quantum) TransparentOpacity ?
527 1 : 0);
528 *q|=((pixel & 0x01) << 2);
529 p++;
530 pixel=(unsigned char) *indexes++;
531 *q|=((pixel & 0x01) << 1);
532 pixel=(unsigned char) (p->opacity == (Quantum) TransparentOpacity ?
533 1 : 0);
534 *q|=((pixel & 0x01) << 0);
535 p++;
536 q++;
537 }
538 if ((number_pixels % 4) != 0)
539 {
540 *q='\0';
cristybb503372010-05-27 20:51:26 +0000541 for (bit=3; bit >= (ssize_t) (4-(number_pixels % 4)); bit-=2)
cristy3ed852e2009-09-05 21:47:34 +0000542 {
543 pixel=(unsigned char) *indexes++;
cristyb32b90a2009-09-07 21:45:48 +0000544 *q|=((pixel & 0x01) << (unsigned char) (bit+4));
cristy3ed852e2009-09-05 21:47:34 +0000545 pixel=(unsigned char) (p->opacity == (Quantum)
546 TransparentOpacity ? 1 : 0);
cristyb32b90a2009-09-07 21:45:48 +0000547 *q|=((pixel & 0x01) << (unsigned char) (bit+4-1));
cristy3ed852e2009-09-05 21:47:34 +0000548 p++;
549 }
550 q++;
551 }
552 break;
553 }
554 case 4:
555 {
556 register unsigned char
557 pixel;
558
cristybb503372010-05-27 20:51:26 +0000559 for (x=0; x < (ssize_t) number_pixels ; x++)
cristy3ed852e2009-09-05 21:47:34 +0000560 {
561 pixel=(unsigned char) *indexes++;
562 *q=((pixel & 0xf) << 4);
563 pixel=(unsigned char) (16*QuantumScale*((Quantum) (QuantumRange-
cristyce70c172010-01-07 17:15:30 +0000564 GetOpacityPixelComponent(p)))+0.5);
cristy3ed852e2009-09-05 21:47:34 +0000565 *q|=((pixel & 0xf) << 0);
566 p++;
567 q++;
568 }
569 break;
570 }
571 case 8:
572 {
573 register unsigned char
574 pixel;
575
cristybb503372010-05-27 20:51:26 +0000576 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +0000577 {
578 q=PopCharPixel((unsigned char) indexes[x],q);
cristyce70c172010-01-07 17:15:30 +0000579 pixel=ScaleQuantumToChar((Quantum) (QuantumRange-
580 GetOpacityPixelComponent(p)));
cristy3ed852e2009-09-05 21:47:34 +0000581 q=PopCharPixel(pixel,q);
582 p++;
583 q+=quantum_info->pad;
584 }
585 break;
586 }
587 case 16:
588 {
589 register unsigned short
590 pixel;
591
cristyc9672a92010-01-06 00:57:45 +0000592 if (quantum_info->format == FloatingPointQuantumFormat)
593 {
cristybb503372010-05-27 20:51:26 +0000594 for (x=0; x < (ssize_t) number_pixels; x++)
cristyc9672a92010-01-06 00:57:45 +0000595 {
596 q=PopShortPixel(endian,(unsigned short) indexes[x],q);
cristy2a4d01c2010-01-10 21:14:51 +0000597 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +0000598 GetAlphaPixelComponent(p));
cristyc9672a92010-01-06 00:57:45 +0000599 q=PopShortPixel(endian,pixel,q);
600 p++;
601 q+=quantum_info->pad;
602 }
603 break;
604 }
cristybb503372010-05-27 20:51:26 +0000605 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +0000606 {
607 q=PopShortPixel(endian,(unsigned short) indexes[x],q);
cristyce70c172010-01-07 17:15:30 +0000608 pixel=ScaleQuantumToShort((Quantum) (QuantumRange-
609 GetOpacityPixelComponent(p)));
cristy3ed852e2009-09-05 21:47:34 +0000610 q=PopShortPixel(endian,pixel,q);
611 p++;
612 q+=quantum_info->pad;
613 }
614 break;
615 }
616 case 32:
617 {
cristy4cb162a2010-05-30 03:04:47 +0000618 register unsigned int
cristy3ed852e2009-09-05 21:47:34 +0000619 pixel;
620
621 if (quantum_info->format == FloatingPointQuantumFormat)
622 {
cristybb503372010-05-27 20:51:26 +0000623 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +0000624 {
625 float
626 pixel;
627
628 q=PopFloatPixel(&quantum_state,(float) indexes[x],q);
cristy46f08202010-01-10 04:04:21 +0000629 pixel=(float) (GetAlphaPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +0000630 q=PopFloatPixel(&quantum_state,pixel,q);
631 p++;
632 q+=quantum_info->pad;
633 }
634 break;
635 }
cristybb503372010-05-27 20:51:26 +0000636 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +0000637 {
cristy4cb162a2010-05-30 03:04:47 +0000638 q=PopLongPixel(endian,(unsigned int) indexes[x],q);
cristyce70c172010-01-07 17:15:30 +0000639 pixel=ScaleQuantumToLong((Quantum) (QuantumRange-
640 GetOpacityPixelComponent(p)));
cristy3ed852e2009-09-05 21:47:34 +0000641 q=PopLongPixel(endian,pixel,q);
642 p++;
643 q+=quantum_info->pad;
644 }
645 break;
646 }
647 case 64:
648 {
649 if (quantum_info->format == FloatingPointQuantumFormat)
650 {
cristybb503372010-05-27 20:51:26 +0000651 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +0000652 {
653 double
654 pixel;
655
656 q=PopDoublePixel(&quantum_state,(double) indexes[x],q);
cristy46f08202010-01-10 04:04:21 +0000657 pixel=(double) (GetAlphaPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +0000658 q=PopDoublePixel(&quantum_state,pixel,q);
659 p++;
660 q+=quantum_info->pad;
661 }
662 break;
663 }
664 }
665 default:
666 {
667 range=GetQuantumRange(image->depth);
cristybb503372010-05-27 20:51:26 +0000668 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +0000669 {
670 q=PopQuantumPixel(&quantum_state,image->depth,indexes[x],q);
671 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
cristy46f08202010-01-10 04:04:21 +0000672 (Quantum) (GetAlphaPixelComponent(p)),range),q);
cristy3ed852e2009-09-05 21:47:34 +0000673 p++;
674 q+=quantum_info->pad;
675 }
676 break;
677 }
678 }
679 break;
680 }
cristya6a96a12010-08-23 13:37:35 +0000681 case BGRQuantum:
682 {
683 switch (quantum_info->depth)
684 {
685 case 8:
686 {
687 for (x=0; x < (ssize_t) number_pixels; x++)
688 {
689 q=PopCharPixel(ScaleQuantumToChar(GetBluePixelComponent(p)),q);
690 q=PopCharPixel(ScaleQuantumToChar(GetGreenPixelComponent(p)),q);
691 q=PopCharPixel(ScaleQuantumToChar(GetRedPixelComponent(p)),q);
692 p++;
693 q+=quantum_info->pad;
694 }
695 break;
696 }
697 case 10:
698 {
699 register unsigned int
700 pixel;
701
702 range=GetQuantumRange(image->depth);
703 if (quantum_info->pack == MagickFalse)
704 {
705 for (x=0; x < (ssize_t) number_pixels; x++)
706 {
707 pixel=(unsigned int) (ScaleQuantumToAny(p->red,range) << 22 |
708 ScaleQuantumToAny(p->green,range) << 12 |
709 ScaleQuantumToAny(p->blue,range) << 2);
710 q=PopLongPixel(endian,pixel,q);
711 p++;
712 q+=quantum_info->pad;
713 }
714 break;
715 }
716 if (quantum_info->quantum == 32UL)
717 {
718 for (x=0; x < (ssize_t) number_pixels; x++)
719 {
720 pixel=(unsigned int) ScaleQuantumToAny(p->red,range);
721 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
722 pixel=(unsigned int) ScaleQuantumToAny(p->green,range);
723 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
724 pixel=(unsigned int) ScaleQuantumToAny(p->blue,range);
725 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
726 p++;
727 q+=quantum_info->pad;
728 }
729 break;
730 }
731 for (x=0; x < (ssize_t) number_pixels; x++)
732 {
733 pixel=(unsigned int) ScaleQuantumToAny(p->red,range);
734 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
735 pixel=(unsigned int) ScaleQuantumToAny(p->green,range);
736 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
737 pixel=(unsigned int) ScaleQuantumToAny(p->blue,range);
738 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
739 p++;
740 q+=quantum_info->pad;
741 }
742 break;
743 }
744 case 12:
745 {
746 register unsigned int
747 pixel;
748
749 range=GetQuantumRange(image->depth);
750 if (quantum_info->pack == MagickFalse)
751 {
752 for (x=0; x < (ssize_t) (3*number_pixels-1); x+=2)
753 {
754 switch (x % 3)
755 {
756 default:
757 case 0:
758 {
759 pixel=(unsigned int) ScaleQuantumToAny(p->red,range);
760 break;
761 }
762 case 1:
763 {
764 pixel=(unsigned int) ScaleQuantumToAny(p->green,range);
765 break;
766 }
767 case 2:
768 {
769 pixel=(unsigned int) ScaleQuantumToAny(p->blue,range);
770 p++;
771 break;
772 }
773 }
774 q=PopShortPixel(endian,(unsigned short) (pixel << 4),q);
775 switch ((x+1) % 3)
776 {
777 default:
778 case 0:
779 {
780 pixel=(unsigned int) ScaleQuantumToAny(p->red,range);
781 break;
782 }
783 case 1:
784 {
785 pixel=(unsigned int) ScaleQuantumToAny(p->green,range);
786 break;
787 }
788 case 2:
789 {
790 pixel=(unsigned int) ScaleQuantumToAny(p->blue,range);
791 p++;
792 break;
793 }
794 }
795 q=PopShortPixel(endian,(unsigned short) (pixel << 4),q);
796 q+=quantum_info->pad;
797 }
798 for (bit=0; bit < (ssize_t) (3*number_pixels % 2); bit++)
799 {
800 switch ((x+bit) % 3)
801 {
802 default:
803 case 0:
804 {
805 pixel=(unsigned int) ScaleQuantumToAny(p->red,range);
806 break;
807 }
808 case 1:
809 {
810 pixel=(unsigned int) ScaleQuantumToAny(p->green,range);
811 break;
812 }
813 case 2:
814 {
815 pixel=(unsigned int) ScaleQuantumToAny(p->blue,range);
816 p++;
817 break;
818 }
819 }
820 q=PopShortPixel(endian,(unsigned short) (pixel << 4),q);
821 q+=quantum_info->pad;
822 }
823 if (bit != 0)
824 p++;
825 break;
826 }
827 if (quantum_info->quantum == 32UL)
828 {
829 for (x=0; x < (ssize_t) number_pixels; x++)
830 {
831 pixel=(unsigned int) ScaleQuantumToAny(p->red,range);
832 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
833 pixel=(unsigned int) ScaleQuantumToAny(p->green,range);
834 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
835 pixel=(unsigned int) ScaleQuantumToAny(p->blue,range);
836 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
837 p++;
838 q+=quantum_info->pad;
839 }
840 break;
841 }
842 for (x=0; x < (ssize_t) number_pixels; x++)
843 {
844 pixel=(unsigned int) ScaleQuantumToAny(p->red,range);
845 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
846 pixel=(unsigned int) ScaleQuantumToAny(p->green,range);
847 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
848 pixel=(unsigned int) ScaleQuantumToAny(p->blue,range);
849 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
850 p++;
851 q+=quantum_info->pad;
852 }
853 break;
854 }
855 case 16:
856 {
857 register unsigned short
858 pixel;
859
860 if (quantum_info->format == FloatingPointQuantumFormat)
861 {
862 for (x=0; x < (ssize_t) number_pixels; x++)
863 {
864 pixel=SinglePrecisionToHalf(QuantumScale*
865 GetBluePixelComponent(p));
866 q=PopShortPixel(endian,pixel,q);
867 pixel=SinglePrecisionToHalf(QuantumScale*
868 GetGreenPixelComponent(p));
869 q=PopShortPixel(endian,pixel,q);
870 pixel=SinglePrecisionToHalf(QuantumScale*
871 GetRedPixelComponent(p));
872 q=PopShortPixel(endian,pixel,q);
873 p++;
874 q+=quantum_info->pad;
875 }
876 break;
877 }
878 for (x=0; x < (ssize_t) number_pixels; x++)
879 {
880 pixel=ScaleQuantumToShort(GetBluePixelComponent(p));
881 q=PopShortPixel(endian,pixel,q);
882 pixel=ScaleQuantumToShort(GetGreenPixelComponent(p));
883 q=PopShortPixel(endian,pixel,q);
884 pixel=ScaleQuantumToShort(GetRedPixelComponent(p));
885 q=PopShortPixel(endian,pixel,q);
886 p++;
887 q+=quantum_info->pad;
888 }
889 break;
890 }
891 case 32:
892 {
893 register unsigned int
894 pixel;
895
896 if (quantum_info->format == FloatingPointQuantumFormat)
897 {
898 for (x=0; x < (ssize_t) number_pixels; x++)
899 {
900 q=PopFloatPixel(&quantum_state,(float) p->red,q);
901 q=PopFloatPixel(&quantum_state,(float) p->green,q);
902 q=PopFloatPixel(&quantum_state,(float) p->blue,q);
903 p++;
904 q+=quantum_info->pad;
905 }
906 break;
907 }
908 for (x=0; x < (ssize_t) number_pixels; x++)
909 {
910 pixel=ScaleQuantumToLong(GetBluePixelComponent(p));
911 q=PopLongPixel(endian,pixel,q);
912 pixel=ScaleQuantumToLong(GetGreenPixelComponent(p));
913 q=PopLongPixel(endian,pixel,q);
914 pixel=ScaleQuantumToLong(GetRedPixelComponent(p));
915 q=PopLongPixel(endian,pixel,q);
916 p++;
917 q+=quantum_info->pad;
918 }
919 break;
920 }
921 case 64:
922 {
923 if (quantum_info->format == FloatingPointQuantumFormat)
924 {
925 for (x=0; x < (ssize_t) number_pixels; x++)
926 {
927 q=PopDoublePixel(&quantum_state,(double) p->red,q);
928 q=PopDoublePixel(&quantum_state,(double) p->green,q);
929 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
930 p++;
931 q+=quantum_info->pad;
932 }
933 break;
934 }
935 }
936 default:
937 {
938 range=GetQuantumRange(image->depth);
939 for (x=0; x < (ssize_t) number_pixels; x++)
940 {
941 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
942 p->red,range),q);
943 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
944 p->green,range),q);
945 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
946 p->blue,range),q);
947 p++;
948 q+=quantum_info->pad;
949 }
950 break;
951 }
952 }
953 break;
954 }
955 case BGRAQuantum:
956 case BGROQuantum:
957 {
958 switch (quantum_info->depth)
959 {
960 case 8:
961 {
962 register unsigned char
963 pixel;
964
965 for (x=0; x < (ssize_t) number_pixels; x++)
966 {
967 pixel=ScaleQuantumToChar(GetBluePixelComponent(p));
968 q=PopCharPixel(pixel,q);
969 pixel=ScaleQuantumToChar(GetGreenPixelComponent(p));
970 q=PopCharPixel(pixel,q);
971 pixel=ScaleQuantumToChar(GetRedPixelComponent(p));
972 q=PopCharPixel(pixel,q);
973 pixel=ScaleQuantumToChar((Quantum) GetAlphaPixelComponent(p));
974 q=PopCharPixel(pixel,q);
975 p++;
976 q+=quantum_info->pad;
977 }
978 break;
979 }
980 case 10:
981 {
982 register unsigned int
983 pixel;
984
985 range=GetQuantumRange(image->depth);
986 if (quantum_info->pack == MagickFalse)
987 {
cristya6a96a12010-08-23 13:37:35 +0000988 register ssize_t
989 i;
990
991 size_t
992 quantum;
993
cristy9d314ff2011-03-09 01:30:28 +0000994 ssize_t
995 n;
996
cristya6a96a12010-08-23 13:37:35 +0000997 n=0;
998 quantum=0;
999 pixel=0;
1000 for (x=0; x < (ssize_t) number_pixels; x++)
1001 {
1002 for (i=0; i < 4; i++)
1003 {
1004 switch (i)
1005 {
1006 case 0: quantum=p->red; break;
1007 case 1: quantum=p->green; break;
1008 case 2: quantum=p->blue; break;
1009 case 3: quantum=(Quantum) (QuantumRange-p->opacity); break;
1010 }
1011 switch (n % 3)
1012 {
1013 case 0:
1014 {
1015 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
1016 range) << 22);
1017 break;
1018 }
1019 case 1:
1020 {
1021 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
1022 range) << 12);
1023 break;
1024 }
1025 case 2:
1026 {
1027 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
1028 range) << 2);
1029 q=PopLongPixel(endian,pixel,q);
1030 pixel=0;
1031 break;
1032 }
1033 }
1034 n++;
1035 }
1036 p++;
1037 q+=quantum_info->pad;
1038 }
1039 break;
1040 }
1041 if (quantum_info->quantum == 32UL)
1042 {
1043 for (x=0; x < (ssize_t) number_pixels; x++)
1044 {
1045 pixel=(unsigned int) ScaleQuantumToAny(p->red,range);
1046 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
1047 pixel=(unsigned int) ScaleQuantumToAny(p->green,range);
1048 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
1049 pixel=(unsigned int) ScaleQuantumToAny(p->blue,range);
1050 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
1051 pixel=(unsigned int) ScaleQuantumToAny((Quantum) (QuantumRange-
1052 p->opacity),range);
1053 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
1054 p++;
1055 q+=quantum_info->pad;
1056 }
1057 break;
1058 }
1059 for (x=0; x < (ssize_t) number_pixels; x++)
1060 {
1061 pixel=(unsigned int) ScaleQuantumToAny(p->red,range);
1062 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
1063 pixel=(unsigned int) ScaleQuantumToAny(p->green,range);
1064 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
1065 pixel=(unsigned int) ScaleQuantumToAny(p->blue,range);
1066 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
1067 pixel=(unsigned int) ScaleQuantumToAny((Quantum) (QuantumRange-
1068 p->opacity),range);
1069 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
1070 p++;
1071 q+=quantum_info->pad;
1072 }
1073 break;
1074 }
1075 case 16:
1076 {
1077 register unsigned short
1078 pixel;
1079
1080 if (quantum_info->format == FloatingPointQuantumFormat)
1081 {
1082 for (x=0; x < (ssize_t) number_pixels; x++)
1083 {
1084 pixel=SinglePrecisionToHalf(QuantumScale*
1085 GetBluePixelComponent(p));
1086 q=PopShortPixel(endian,pixel,q);
1087 pixel=SinglePrecisionToHalf(QuantumScale*
1088 GetGreenPixelComponent(p));
1089 q=PopShortPixel(endian,pixel,q);
1090 pixel=SinglePrecisionToHalf(QuantumScale*
1091 GetRedPixelComponent(p));
1092 q=PopShortPixel(endian,pixel,q);
1093 pixel=SinglePrecisionToHalf(QuantumScale*
1094 GetAlphaPixelComponent(p));
1095 q=PopShortPixel(endian,pixel,q);
1096 p++;
1097 q+=quantum_info->pad;
1098 }
1099 break;
1100 }
1101 for (x=0; x < (ssize_t) number_pixels; x++)
1102 {
1103 pixel=ScaleQuantumToShort(GetBluePixelComponent(p));
1104 q=PopShortPixel(endian,pixel,q);
1105 pixel=ScaleQuantumToShort(GetGreenPixelComponent(p));
1106 q=PopShortPixel(endian,pixel,q);
1107 pixel=ScaleQuantumToShort(GetRedPixelComponent(p));
1108 q=PopShortPixel(endian,pixel,q);
1109 pixel=ScaleQuantumToShort((Quantum) GetAlphaPixelComponent(p));
1110 q=PopShortPixel(endian,pixel,q);
1111 p++;
1112 q+=quantum_info->pad;
1113 }
1114 break;
1115 }
1116 case 32:
1117 {
1118 register unsigned int
1119 pixel;
1120
1121 if (quantum_info->format == FloatingPointQuantumFormat)
1122 {
1123 for (x=0; x < (ssize_t) number_pixels; x++)
1124 {
1125 float
1126 pixel;
1127
1128 q=PopFloatPixel(&quantum_state,(float) p->red,q);
1129 q=PopFloatPixel(&quantum_state,(float) p->green,q);
1130 q=PopFloatPixel(&quantum_state,(float) p->blue,q);
1131 pixel=(float) GetAlphaPixelComponent(p);
1132 q=PopFloatPixel(&quantum_state,pixel,q);
1133 p++;
1134 q+=quantum_info->pad;
1135 }
1136 break;
1137 }
1138 for (x=0; x < (ssize_t) number_pixels; x++)
1139 {
1140 pixel=ScaleQuantumToLong(GetBluePixelComponent(p));
1141 q=PopLongPixel(endian,pixel,q);
1142 pixel=ScaleQuantumToLong(GetGreenPixelComponent(p));
1143 q=PopLongPixel(endian,pixel,q);
1144 pixel=ScaleQuantumToLong(GetRedPixelComponent(p));
1145 q=PopLongPixel(endian,pixel,q);
1146 pixel=ScaleQuantumToLong((Quantum) GetAlphaPixelComponent(p));
1147 q=PopLongPixel(endian,pixel,q);
1148 p++;
1149 q+=quantum_info->pad;
1150 }
1151 break;
1152 }
1153 case 64:
1154 {
1155 if (quantum_info->format == FloatingPointQuantumFormat)
1156 {
1157 double
1158 pixel;
1159
1160 for (x=0; x < (ssize_t) number_pixels; x++)
1161 {
1162 q=PopDoublePixel(&quantum_state,(double) p->red,q);
1163 q=PopDoublePixel(&quantum_state,(double) p->green,q);
1164 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
1165 pixel=(double) GetAlphaPixelComponent(p);
1166 q=PopDoublePixel(&quantum_state,pixel,q);
1167 p++;
1168 q+=quantum_info->pad;
1169 }
1170 break;
1171 }
1172 }
1173 default:
1174 {
1175 range=GetQuantumRange(image->depth);
1176 for (x=0; x < (ssize_t) number_pixels; x++)
1177 {
1178 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1179 GetBluePixelComponent(p),range),q);
1180 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1181 GetGreenPixelComponent(p),range),q);
1182 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1183 GetRedPixelComponent(p),range),q);
1184 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1185 (Quantum) GetAlphaPixelComponent(p),range),q);
1186 p++;
1187 q+=quantum_info->pad;
1188 }
1189 break;
1190 }
1191 }
1192 break;
1193 }
cristy3ed852e2009-09-05 21:47:34 +00001194 case GrayQuantum:
1195 {
1196 switch (quantum_info->depth)
1197 {
1198 case 1:
1199 {
1200 register Quantum
1201 threshold;
1202
1203 register unsigned char
1204 black,
1205 white;
1206
1207 black=0x00;
1208 white=0x01;
1209 if (quantum_info->min_is_white != MagickFalse)
1210 {
1211 black=0x01;
1212 white=0x00;
1213 }
1214 threshold=(Quantum) (QuantumRange/2);
cristybb503372010-05-27 20:51:26 +00001215 for (x=((ssize_t) number_pixels-7); x > 0; x-=8)
cristy3ed852e2009-09-05 21:47:34 +00001216 {
1217 *q='\0';
1218 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 7;
1219 p++;
1220 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 6;
1221 p++;
1222 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 5;
1223 p++;
1224 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 4;
1225 p++;
1226 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 3;
1227 p++;
1228 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 2;
1229 p++;
1230 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 1;
1231 p++;
1232 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 0;
1233 p++;
1234 q++;
1235 }
1236 if ((number_pixels % 8) != 0)
1237 {
1238 *q='\0';
cristybb503372010-05-27 20:51:26 +00001239 for (bit=7; bit >= (ssize_t) (8-(number_pixels % 8)); bit--)
cristy3ed852e2009-09-05 21:47:34 +00001240 {
1241 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) <<
1242 bit;
1243 p++;
1244 }
1245 q++;
1246 }
1247 break;
1248 }
1249 case 4:
1250 {
1251 register unsigned char
1252 pixel;
1253
cristybb503372010-05-27 20:51:26 +00001254 for (x=0; x < (ssize_t) (number_pixels-1) ; x+=2)
cristy3ed852e2009-09-05 21:47:34 +00001255 {
1256 pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
1257 *q=(((pixel >> 4) & 0xf) << 4);
1258 p++;
1259 pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
1260 *q|=pixel >> 4;
1261 p++;
1262 q++;
1263 }
1264 if ((number_pixels % 2) != 0)
1265 {
1266 pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
1267 *q=(((pixel >> 4) & 0xf) << 4);
1268 p++;
1269 q++;
1270 }
1271 break;
1272 }
1273 case 8:
1274 {
1275 register unsigned char
1276 pixel;
1277
cristybb503372010-05-27 20:51:26 +00001278 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00001279 {
1280 pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
1281 q=PopCharPixel(pixel,q);
1282 p++;
1283 q+=quantum_info->pad;
1284 }
1285 break;
1286 }
1287 case 10:
1288 {
cristy3ed852e2009-09-05 21:47:34 +00001289 range=GetQuantumRange(image->depth);
1290 if (quantum_info->pack == MagickFalse)
1291 {
cristy4cb162a2010-05-30 03:04:47 +00001292 register unsigned int
cristyff024b42010-02-21 22:55:09 +00001293 pixel;
1294
cristybb503372010-05-27 20:51:26 +00001295 for (x=0; x < (ssize_t) (number_pixels-2); x+=3)
cristy3ed852e2009-09-05 21:47:34 +00001296 {
cristy4cb162a2010-05-30 03:04:47 +00001297 pixel=(unsigned int) (
cristyff024b42010-02-21 22:55:09 +00001298 ScaleQuantumToAny(PixelIntensityToQuantum(p+2),range) << 22 |
1299 ScaleQuantumToAny(PixelIntensityToQuantum(p+1),range) << 12 |
1300 ScaleQuantumToAny(PixelIntensityToQuantum(p+0),range) << 2);
1301 q=PopLongPixel(endian,pixel,q);
1302 p+=3;
cristy3ed852e2009-09-05 21:47:34 +00001303 q+=quantum_info->pad;
1304 }
cristy69702dd2010-02-22 15:26:39 +00001305 pixel=0UL;
cristybb503372010-05-27 20:51:26 +00001306 if (x++ < (ssize_t) (number_pixels-1))
cristy69702dd2010-02-22 15:26:39 +00001307 pixel|=ScaleQuantumToAny(PixelIntensityToQuantum(p+1),
1308 range) << 12;
cristybb503372010-05-27 20:51:26 +00001309 if (x++ < (ssize_t) number_pixels)
cristy69702dd2010-02-22 15:26:39 +00001310 pixel|=ScaleQuantumToAny(PixelIntensityToQuantum(p+0),
1311 range) << 2;
1312 q=PopLongPixel(endian,pixel,q);
cristy3ed852e2009-09-05 21:47:34 +00001313 break;
1314 }
cristybb503372010-05-27 20:51:26 +00001315 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00001316 {
1317 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1318 PixelIntensityToQuantum(p),range),q);
1319 p++;
1320 q+=quantum_info->pad;
1321 }
1322 break;
1323 }
1324 case 12:
1325 {
1326 register unsigned short
1327 pixel;
1328
1329 range=GetQuantumRange(image->depth);
1330 if (quantum_info->pack == MagickFalse)
1331 {
cristybb503372010-05-27 20:51:26 +00001332 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00001333 {
1334 pixel=ScaleQuantumToShort(PixelIntensityToQuantum(p));
1335 q=PopShortPixel(endian,(unsigned short) (pixel >> 4),q);
1336 p++;
1337 q+=quantum_info->pad;
1338 }
1339 break;
1340 }
cristybb503372010-05-27 20:51:26 +00001341 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00001342 {
1343 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1344 PixelIntensityToQuantum(p),range),q);
1345 p++;
1346 q+=quantum_info->pad;
1347 }
1348 break;
1349 }
1350 case 16:
1351 {
1352 register unsigned short
1353 pixel;
1354
cristyc9672a92010-01-06 00:57:45 +00001355 if (quantum_info->format == FloatingPointQuantumFormat)
1356 {
cristybb503372010-05-27 20:51:26 +00001357 for (x=0; x < (ssize_t) number_pixels; x++)
cristyc9672a92010-01-06 00:57:45 +00001358 {
cristy2a4d01c2010-01-10 21:14:51 +00001359 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +00001360 PixelIntensityToQuantum(p));
cristyc9672a92010-01-06 00:57:45 +00001361 q=PopShortPixel(endian,pixel,q);
1362 p++;
1363 q+=quantum_info->pad;
1364 }
1365 break;
1366 }
cristybb503372010-05-27 20:51:26 +00001367 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00001368 {
1369 pixel=ScaleQuantumToShort(PixelIntensityToQuantum(p));
1370 q=PopShortPixel(endian,pixel,q);
1371 p++;
1372 q+=quantum_info->pad;
1373 }
1374 break;
1375 }
1376 case 32:
1377 {
cristy4cb162a2010-05-30 03:04:47 +00001378 register unsigned int
cristy3ed852e2009-09-05 21:47:34 +00001379 pixel;
1380
1381 if (quantum_info->format == FloatingPointQuantumFormat)
1382 {
cristybb503372010-05-27 20:51:26 +00001383 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00001384 {
1385 float
1386 pixel;
1387
1388 pixel=(float) PixelIntensityToQuantum(p);
1389 q=PopFloatPixel(&quantum_state,pixel,q);
1390 p++;
1391 q+=quantum_info->pad;
1392 }
1393 break;
1394 }
cristybb503372010-05-27 20:51:26 +00001395 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00001396 {
1397 pixel=ScaleQuantumToLong(PixelIntensityToQuantum(p));
1398 q=PopLongPixel(endian,pixel,q);
1399 p++;
1400 q+=quantum_info->pad;
1401 }
1402 break;
1403 }
1404 case 64:
1405 {
1406 if (quantum_info->format == FloatingPointQuantumFormat)
1407 {
cristybb503372010-05-27 20:51:26 +00001408 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00001409 {
1410 double
1411 pixel;
1412
1413 pixel=(double) PixelIntensityToQuantum(p);
1414 q=PopDoublePixel(&quantum_state,pixel,q);
1415 p++;
1416 q+=quantum_info->pad;
1417 }
1418 break;
1419 }
1420 }
1421 default:
1422 {
1423 range=GetQuantumRange(image->depth);
cristybb503372010-05-27 20:51:26 +00001424 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00001425 {
1426 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1427 PixelIntensityToQuantum(p),range),q);
1428 p++;
1429 q+=quantum_info->pad;
1430 }
1431 break;
1432 }
1433 }
1434 break;
1435 }
1436 case GrayAlphaQuantum:
1437 {
1438 switch (quantum_info->depth)
1439 {
1440 case 1:
1441 {
1442 register Quantum
1443 threshold;
1444
1445 register unsigned char
1446 black,
1447 pixel,
1448 white;
1449
1450 black=0x00;
1451 white=0x01;
1452 if (quantum_info->min_is_white == MagickFalse)
1453 {
1454 black=0x01;
1455 white=0x00;
1456 }
1457 threshold=(Quantum) (QuantumRange/2);
cristybb503372010-05-27 20:51:26 +00001458 for (x=((ssize_t) number_pixels-3); x > 0; x-=4)
cristy3ed852e2009-09-05 21:47:34 +00001459 {
1460 *q='\0';
cristy4c27e792010-08-10 01:33:20 +00001461 *q|=(PixelIntensityToQuantum(p) > threshold ? black : white) << 7;
cristy3ed852e2009-09-05 21:47:34 +00001462 pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 : 0x01);
cristybfe29252010-08-10 02:12:17 +00001463 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 6);
cristy3ed852e2009-09-05 21:47:34 +00001464 p++;
cristy4c27e792010-08-10 01:33:20 +00001465 *q|=(PixelIntensityToQuantum(p) > threshold ? black : white) << 5;
cristy3ed852e2009-09-05 21:47:34 +00001466 pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 : 0x01);
cristybfe29252010-08-10 02:12:17 +00001467 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 4);
cristy3ed852e2009-09-05 21:47:34 +00001468 p++;
cristy4c27e792010-08-10 01:33:20 +00001469 *q|=(PixelIntensityToQuantum(p) > threshold ? black : white) << 3;
cristy3ed852e2009-09-05 21:47:34 +00001470 pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 : 0x01);
cristybfe29252010-08-10 02:12:17 +00001471 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 2);
cristy3ed852e2009-09-05 21:47:34 +00001472 p++;
cristy4c27e792010-08-10 01:33:20 +00001473 *q|=(PixelIntensityToQuantum(p) > threshold ? black : white) << 1;
cristy3ed852e2009-09-05 21:47:34 +00001474 pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 : 0x01);
cristybfe29252010-08-10 02:12:17 +00001475 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 0);
cristy3ed852e2009-09-05 21:47:34 +00001476 p++;
1477 q++;
1478 }
1479 if ((number_pixels % 4) != 0)
1480 {
1481 *q='\0';
cristy2837bcc2010-08-07 23:57:39 +00001482 for (bit=0; bit <= (ssize_t) (number_pixels % 4); bit+=2)
cristy3ed852e2009-09-05 21:47:34 +00001483 {
cristy4c27e792010-08-10 01:33:20 +00001484 *q|=(PixelIntensityToQuantum(p) > threshold ? black : white) <<
cristy2837bcc2010-08-07 23:57:39 +00001485 (7-bit);
cristy3ed852e2009-09-05 21:47:34 +00001486 pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 :
1487 0x01);
cristybfe29252010-08-10 02:12:17 +00001488 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << (unsigned char)
cristy2837bcc2010-08-07 23:57:39 +00001489 (7-bit-1));
cristy3ed852e2009-09-05 21:47:34 +00001490 p++;
1491 }
1492 q++;
1493 }
1494 break;
1495 }
1496 case 4:
1497 {
1498 register unsigned char
1499 pixel;
1500
cristybb503372010-05-27 20:51:26 +00001501 for (x=0; x < (ssize_t) number_pixels ; x++)
cristy3ed852e2009-09-05 21:47:34 +00001502 {
1503 pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
1504 *q=(((pixel >> 4) & 0xf) << 4);
1505 pixel=(unsigned char) (16*QuantumScale*((Quantum) (QuantumRange-
cristyce70c172010-01-07 17:15:30 +00001506 GetOpacityPixelComponent(p)))+0.5);
cristy3ed852e2009-09-05 21:47:34 +00001507 *q|=pixel & 0xf;
1508 p++;
1509 q++;
1510 }
1511 break;
1512 }
1513 case 8:
1514 {
1515 register unsigned char
1516 pixel;
1517
cristybb503372010-05-27 20:51:26 +00001518 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00001519 {
1520 pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
1521 q=PopCharPixel(pixel,q);
cristyce70c172010-01-07 17:15:30 +00001522 pixel=ScaleQuantumToChar((Quantum) (QuantumRange-
1523 GetOpacityPixelComponent(p)));
cristy3ed852e2009-09-05 21:47:34 +00001524 q=PopCharPixel(pixel,q);
1525 p++;
1526 q+=quantum_info->pad;
1527 }
1528 break;
1529 }
1530 case 16:
1531 {
1532 register unsigned short
1533 pixel;
1534
cristyc9672a92010-01-06 00:57:45 +00001535 if (quantum_info->format == FloatingPointQuantumFormat)
1536 {
cristybb503372010-05-27 20:51:26 +00001537 for (x=0; x < (ssize_t) number_pixels; x++)
cristyc9672a92010-01-06 00:57:45 +00001538 {
cristy2a4d01c2010-01-10 21:14:51 +00001539 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +00001540 PixelIntensityToQuantum(p));
cristyc9672a92010-01-06 00:57:45 +00001541 q=PopShortPixel(endian,pixel,q);
cristy2a4d01c2010-01-10 21:14:51 +00001542 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +00001543 GetAlphaPixelComponent(p));
cristyc9672a92010-01-06 00:57:45 +00001544 q=PopShortPixel(endian,pixel,q);
1545 p++;
1546 q+=quantum_info->pad;
1547 }
1548 break;
1549 }
cristybb503372010-05-27 20:51:26 +00001550 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00001551 {
1552 pixel=ScaleQuantumToShort(PixelIntensityToQuantum(p));
1553 q=PopShortPixel(endian,pixel,q);
cristyce70c172010-01-07 17:15:30 +00001554 pixel=ScaleQuantumToShort((Quantum) (QuantumRange-
1555 GetOpacityPixelComponent(p)));
cristy3ed852e2009-09-05 21:47:34 +00001556 q=PopShortPixel(endian,pixel,q);
1557 p++;
1558 q+=quantum_info->pad;
1559 }
1560 break;
1561 }
1562 case 32:
1563 {
cristy4cb162a2010-05-30 03:04:47 +00001564 register unsigned int
cristy3ed852e2009-09-05 21:47:34 +00001565 pixel;
1566
1567 if (quantum_info->format == FloatingPointQuantumFormat)
1568 {
cristybb503372010-05-27 20:51:26 +00001569 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00001570 {
1571 float
1572 pixel;
1573
1574 pixel=(float) PixelIntensityToQuantum(p);
1575 q=PopFloatPixel(&quantum_state,pixel,q);
cristy46f08202010-01-10 04:04:21 +00001576 pixel=(float) (GetAlphaPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00001577 q=PopFloatPixel(&quantum_state,pixel,q);
1578 p++;
1579 q+=quantum_info->pad;
1580 }
1581 break;
1582 }
cristybb503372010-05-27 20:51:26 +00001583 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00001584 {
1585 pixel=ScaleQuantumToLong(PixelIntensityToQuantum(p));
1586 q=PopLongPixel(endian,pixel,q);
cristyce70c172010-01-07 17:15:30 +00001587 pixel=ScaleQuantumToLong((Quantum) (QuantumRange-
1588 GetOpacityPixelComponent(p)));
cristy3ed852e2009-09-05 21:47:34 +00001589 q=PopLongPixel(endian,pixel,q);
1590 p++;
1591 q+=quantum_info->pad;
1592 }
1593 break;
1594 }
1595 case 64:
1596 {
1597 if (quantum_info->format == FloatingPointQuantumFormat)
1598 {
cristybb503372010-05-27 20:51:26 +00001599 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00001600 {
1601 double
1602 pixel;
1603
1604 pixel=(double) PixelIntensityToQuantum(p);
1605 q=PopDoublePixel(&quantum_state,pixel,q);
cristy46f08202010-01-10 04:04:21 +00001606 pixel=(double) (GetAlphaPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00001607 q=PopDoublePixel(&quantum_state,pixel,q);
1608 p++;
1609 q+=quantum_info->pad;
1610 }
1611 break;
1612 }
1613 }
1614 default:
1615 {
1616 range=GetQuantumRange(image->depth);
cristybb503372010-05-27 20:51:26 +00001617 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00001618 {
1619 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1620 PixelIntensityToQuantum(p),range),q);
1621 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
cristy46f08202010-01-10 04:04:21 +00001622 (Quantum) (GetAlphaPixelComponent(p)),range),q);
cristy3ed852e2009-09-05 21:47:34 +00001623 p++;
1624 q+=quantum_info->pad;
1625 }
1626 break;
1627 }
1628 }
1629 break;
1630 }
1631 case RedQuantum:
1632 case CyanQuantum:
1633 {
1634 switch (quantum_info->depth)
1635 {
1636 case 8:
1637 {
1638 register unsigned char
1639 pixel;
1640
cristybb503372010-05-27 20:51:26 +00001641 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00001642 {
cristyce70c172010-01-07 17:15:30 +00001643 pixel=ScaleQuantumToChar(GetRedPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00001644 q=PopCharPixel(pixel,q);
1645 p++;
1646 q+=quantum_info->pad;
1647 }
1648 break;
1649 }
1650 case 16:
1651 {
1652 register unsigned short
1653 pixel;
1654
cristyc9672a92010-01-06 00:57:45 +00001655 if (quantum_info->format == FloatingPointQuantumFormat)
1656 {
cristybb503372010-05-27 20:51:26 +00001657 for (x=0; x < (ssize_t) number_pixels; x++)
cristyc9672a92010-01-06 00:57:45 +00001658 {
cristy2a4d01c2010-01-10 21:14:51 +00001659 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +00001660 GetRedPixelComponent(p));
cristyc9672a92010-01-06 00:57:45 +00001661 q=PopShortPixel(endian,pixel,q);
1662 p++;
1663 q+=quantum_info->pad;
1664 }
1665 break;
1666 }
cristybb503372010-05-27 20:51:26 +00001667 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00001668 {
cristyce70c172010-01-07 17:15:30 +00001669 pixel=ScaleQuantumToShort(GetRedPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00001670 q=PopShortPixel(endian,pixel,q);
1671 p++;
1672 q+=quantum_info->pad;
1673 }
1674 break;
1675 }
1676 case 32:
1677 {
cristy4cb162a2010-05-30 03:04:47 +00001678 register unsigned int
cristy3ed852e2009-09-05 21:47:34 +00001679 pixel;
1680
1681 if (quantum_info->format == FloatingPointQuantumFormat)
1682 {
cristybb503372010-05-27 20:51:26 +00001683 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00001684 {
1685 q=PopFloatPixel(&quantum_state,(float) p->red,q);
1686 p++;
1687 q+=quantum_info->pad;
1688 }
1689 break;
1690 }
cristybb503372010-05-27 20:51:26 +00001691 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00001692 {
cristyce70c172010-01-07 17:15:30 +00001693 pixel=ScaleQuantumToLong(GetRedPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00001694 q=PopLongPixel(endian,pixel,q);
1695 p++;
1696 q+=quantum_info->pad;
1697 }
1698 break;
1699 }
1700 case 64:
1701 {
1702 if (quantum_info->format == FloatingPointQuantumFormat)
1703 {
cristybb503372010-05-27 20:51:26 +00001704 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00001705 {
1706 q=PopDoublePixel(&quantum_state,(double) p->red,q);
1707 p++;
1708 q+=quantum_info->pad;
1709 }
1710 break;
1711 }
1712 }
1713 default:
1714 {
1715 range=GetQuantumRange(image->depth);
cristybb503372010-05-27 20:51:26 +00001716 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00001717 {
1718 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1719 p->red,range),q);
1720 p++;
1721 q+=quantum_info->pad;
1722 }
1723 break;
1724 }
1725 }
1726 break;
1727 }
1728 case GreenQuantum:
1729 case MagentaQuantum:
1730 {
1731 switch (quantum_info->depth)
1732 {
1733 case 8:
1734 {
1735 register unsigned char
1736 pixel;
1737
cristybb503372010-05-27 20:51:26 +00001738 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00001739 {
cristyce70c172010-01-07 17:15:30 +00001740 pixel=ScaleQuantumToChar(GetGreenPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00001741 q=PopCharPixel(pixel,q);
1742 p++;
1743 q+=quantum_info->pad;
1744 }
1745 break;
1746 }
1747 case 16:
1748 {
1749 register unsigned short
1750 pixel;
1751
cristyc9672a92010-01-06 00:57:45 +00001752 if (quantum_info->format == FloatingPointQuantumFormat)
1753 {
cristybb503372010-05-27 20:51:26 +00001754 for (x=0; x < (ssize_t) number_pixels; x++)
cristyc9672a92010-01-06 00:57:45 +00001755 {
cristy2a4d01c2010-01-10 21:14:51 +00001756 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +00001757 GetGreenPixelComponent(p));
cristyc9672a92010-01-06 00:57:45 +00001758 q=PopShortPixel(endian,pixel,q);
1759 p++;
1760 q+=quantum_info->pad;
1761 }
1762 break;
1763 }
cristybb503372010-05-27 20:51:26 +00001764 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00001765 {
cristyce70c172010-01-07 17:15:30 +00001766 pixel=ScaleQuantumToShort(GetGreenPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00001767 q=PopShortPixel(endian,pixel,q);
1768 p++;
1769 q+=quantum_info->pad;
1770 }
1771 break;
1772 }
1773 case 32:
1774 {
cristy4cb162a2010-05-30 03:04:47 +00001775 register unsigned int
cristy3ed852e2009-09-05 21:47:34 +00001776 pixel;
1777
1778 if (quantum_info->format == FloatingPointQuantumFormat)
1779 {
cristybb503372010-05-27 20:51:26 +00001780 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00001781 {
1782 q=PopFloatPixel(&quantum_state,(float) p->green,q);
1783 p++;
1784 q+=quantum_info->pad;
1785 }
1786 break;
1787 }
cristybb503372010-05-27 20:51:26 +00001788 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00001789 {
cristyce70c172010-01-07 17:15:30 +00001790 pixel=ScaleQuantumToLong(GetGreenPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00001791 q=PopLongPixel(endian,pixel,q);
1792 p++;
1793 q+=quantum_info->pad;
1794 }
1795 break;
1796 }
1797 case 64:
1798 {
1799 if (quantum_info->format == FloatingPointQuantumFormat)
1800 {
cristybb503372010-05-27 20:51:26 +00001801 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00001802 {
1803 q=PopDoublePixel(&quantum_state,(double) p->green,q);
1804 p++;
1805 q+=quantum_info->pad;
1806 }
1807 break;
1808 }
1809 }
1810 default:
1811 {
1812 range=GetQuantumRange(image->depth);
cristybb503372010-05-27 20:51:26 +00001813 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00001814 {
1815 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1816 p->green,range),q);
1817 p++;
1818 q+=quantum_info->pad;
1819 }
1820 break;
1821 }
1822 }
1823 break;
1824 }
1825 case BlueQuantum:
1826 case YellowQuantum:
1827 {
1828 switch (quantum_info->depth)
1829 {
1830 case 8:
1831 {
1832 register unsigned char
1833 pixel;
1834
cristybb503372010-05-27 20:51:26 +00001835 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00001836 {
cristyce70c172010-01-07 17:15:30 +00001837 pixel=ScaleQuantumToChar(GetBluePixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00001838 q=PopCharPixel(pixel,q);
1839 p++;
1840 q+=quantum_info->pad;
1841 }
1842 break;
1843 }
1844 case 16:
1845 {
1846 register unsigned short
1847 pixel;
1848
cristyc9672a92010-01-06 00:57:45 +00001849 if (quantum_info->format == FloatingPointQuantumFormat)
1850 {
cristybb503372010-05-27 20:51:26 +00001851 for (x=0; x < (ssize_t) number_pixels; x++)
cristyc9672a92010-01-06 00:57:45 +00001852 {
cristy2a4d01c2010-01-10 21:14:51 +00001853 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +00001854 GetBluePixelComponent(p));
cristyc9672a92010-01-06 00:57:45 +00001855 q=PopShortPixel(endian,pixel,q);
1856 p++;
1857 q+=quantum_info->pad;
1858 }
1859 break;
1860 }
cristybb503372010-05-27 20:51:26 +00001861 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00001862 {
cristyce70c172010-01-07 17:15:30 +00001863 pixel=ScaleQuantumToShort(GetBluePixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00001864 q=PopShortPixel(endian,pixel,q);
1865 p++;
1866 q+=quantum_info->pad;
1867 }
1868 break;
1869 }
1870 case 32:
1871 {
cristy4cb162a2010-05-30 03:04:47 +00001872 register unsigned int
cristy3ed852e2009-09-05 21:47:34 +00001873 pixel;
1874
1875 if (quantum_info->format == FloatingPointQuantumFormat)
1876 {
cristybb503372010-05-27 20:51:26 +00001877 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00001878 {
1879 q=PopFloatPixel(&quantum_state,(float) p->blue,q);
1880 p++;
1881 q+=quantum_info->pad;
1882 }
1883 break;
1884 }
cristybb503372010-05-27 20:51:26 +00001885 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00001886 {
cristyce70c172010-01-07 17:15:30 +00001887 pixel=ScaleQuantumToLong(GetBluePixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00001888 q=PopLongPixel(endian,pixel,q);
1889 p++;
1890 q+=quantum_info->pad;
1891 }
1892 break;
1893 }
1894 case 64:
1895 {
1896 if (quantum_info->format == FloatingPointQuantumFormat)
1897 {
cristybb503372010-05-27 20:51:26 +00001898 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00001899 {
1900 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
1901 p++;
1902 q+=quantum_info->pad;
1903 }
1904 break;
1905 }
1906 }
1907 default:
1908 {
1909 range=GetQuantumRange(image->depth);
cristybb503372010-05-27 20:51:26 +00001910 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00001911 {
1912 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1913 p->blue,range),q);
1914 p++;
1915 q+=quantum_info->pad;
1916 }
1917 break;
1918 }
1919 }
1920 break;
1921 }
1922 case AlphaQuantum:
1923 {
1924 switch (quantum_info->depth)
1925 {
1926 case 8:
1927 {
1928 register unsigned char
1929 pixel;
1930
cristybb503372010-05-27 20:51:26 +00001931 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00001932 {
cristyce70c172010-01-07 17:15:30 +00001933 pixel=ScaleQuantumToChar((Quantum) (QuantumRange-
1934 GetOpacityPixelComponent(p)));
cristy3ed852e2009-09-05 21:47:34 +00001935 q=PopCharPixel(pixel,q);
1936 p++;
1937 q+=quantum_info->pad;
1938 }
1939 break;
1940 }
1941 case 16:
1942 {
1943 register unsigned short
1944 pixel;
1945
cristyc9672a92010-01-06 00:57:45 +00001946 if (quantum_info->format == FloatingPointQuantumFormat)
1947 {
cristybb503372010-05-27 20:51:26 +00001948 for (x=0; x < (ssize_t) number_pixels; x++)
cristyc9672a92010-01-06 00:57:45 +00001949 {
cristy2a4d01c2010-01-10 21:14:51 +00001950 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +00001951 GetAlphaPixelComponent(p));
cristyc9672a92010-01-06 00:57:45 +00001952 q=PopShortPixel(endian,pixel,q);
1953 p++;
1954 q+=quantum_info->pad;
1955 }
1956 break;
1957 }
cristybb503372010-05-27 20:51:26 +00001958 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00001959 {
cristyce70c172010-01-07 17:15:30 +00001960 pixel=ScaleQuantumToShort((Quantum) (QuantumRange-
1961 GetOpacityPixelComponent(p)));
cristy3ed852e2009-09-05 21:47:34 +00001962 q=PopShortPixel(endian,pixel,q);
1963 p++;
1964 q+=quantum_info->pad;
1965 }
1966 break;
1967 }
1968 case 32:
1969 {
cristy4cb162a2010-05-30 03:04:47 +00001970 register unsigned int
cristy3ed852e2009-09-05 21:47:34 +00001971 pixel;
1972
1973 if (quantum_info->format == FloatingPointQuantumFormat)
1974 {
cristybb503372010-05-27 20:51:26 +00001975 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00001976 {
1977 float
1978 pixel;
1979
cristy46f08202010-01-10 04:04:21 +00001980 pixel=(float) (GetAlphaPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00001981 q=PopFloatPixel(&quantum_state,pixel,q);
1982 p++;
1983 q+=quantum_info->pad;
1984 }
1985 break;
1986 }
cristybb503372010-05-27 20:51:26 +00001987 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00001988 {
cristyce70c172010-01-07 17:15:30 +00001989 pixel=ScaleQuantumToLong((Quantum) (QuantumRange-
1990 GetOpacityPixelComponent(p)));
cristy3ed852e2009-09-05 21:47:34 +00001991 q=PopLongPixel(endian,pixel,q);
1992 p++;
1993 q+=quantum_info->pad;
1994 }
1995 break;
1996 }
1997 case 64:
1998 {
1999 if (quantum_info->format == FloatingPointQuantumFormat)
2000 {
cristybb503372010-05-27 20:51:26 +00002001 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00002002 {
2003 double
2004 pixel;
2005
cristy46f08202010-01-10 04:04:21 +00002006 pixel=(double) (GetAlphaPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002007 q=PopDoublePixel(&quantum_state,pixel,q);
2008 p++;
2009 q+=quantum_info->pad;
2010 }
2011 break;
2012 }
2013 }
2014 default:
2015 {
2016 range=GetQuantumRange(image->depth);
cristybb503372010-05-27 20:51:26 +00002017 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00002018 {
2019 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
cristy46f08202010-01-10 04:04:21 +00002020 (Quantum) (GetAlphaPixelComponent(p)),range),q);
cristy3ed852e2009-09-05 21:47:34 +00002021 p++;
2022 q+=quantum_info->pad;
2023 }
2024 break;
2025 }
2026 }
2027 break;
2028 }
2029 case OpacityQuantum:
2030 {
2031 switch (quantum_info->depth)
2032 {
2033 case 8:
2034 {
2035 register unsigned char
2036 pixel;
2037
cristybb503372010-05-27 20:51:26 +00002038 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00002039 {
cristyce70c172010-01-07 17:15:30 +00002040 pixel=ScaleQuantumToChar(GetOpacityPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002041 q=PopCharPixel(pixel,q);
2042 p++;
2043 q+=quantum_info->pad;
2044 }
2045 break;
2046 }
2047 case 16:
2048 {
2049 register unsigned short
2050 pixel;
2051
cristyc9672a92010-01-06 00:57:45 +00002052 if (quantum_info->format == FloatingPointQuantumFormat)
2053 {
cristybb503372010-05-27 20:51:26 +00002054 for (x=0; x < (ssize_t) number_pixels; x++)
cristyc9672a92010-01-06 00:57:45 +00002055 {
cristy2a4d01c2010-01-10 21:14:51 +00002056 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +00002057 GetOpacityPixelComponent(p));
cristyc9672a92010-01-06 00:57:45 +00002058 q=PopShortPixel(endian,pixel,q);
2059 p++;
2060 q+=quantum_info->pad;
2061 }
2062 break;
2063 }
cristybb503372010-05-27 20:51:26 +00002064 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00002065 {
cristyce70c172010-01-07 17:15:30 +00002066 pixel=ScaleQuantumToShort(GetOpacityPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002067 q=PopShortPixel(endian,pixel,q);
2068 p++;
2069 q+=quantum_info->pad;
2070 }
2071 break;
2072 }
2073 case 32:
2074 {
cristy4cb162a2010-05-30 03:04:47 +00002075 register unsigned int
cristy3ed852e2009-09-05 21:47:34 +00002076 pixel;
2077
2078 if (quantum_info->format == FloatingPointQuantumFormat)
2079 {
cristybb503372010-05-27 20:51:26 +00002080 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00002081 {
2082 q=PopFloatPixel(&quantum_state,(float) p->opacity,q);
2083 p++;
2084 q+=quantum_info->pad;
2085 }
2086 break;
2087 }
cristybb503372010-05-27 20:51:26 +00002088 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00002089 {
cristyce70c172010-01-07 17:15:30 +00002090 pixel=ScaleQuantumToLong(GetOpacityPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002091 q=PopLongPixel(endian,pixel,q);
2092 p++;
2093 q+=quantum_info->pad;
2094 }
2095 break;
2096 }
2097 case 64:
2098 {
2099 if (quantum_info->format == FloatingPointQuantumFormat)
2100 {
cristybb503372010-05-27 20:51:26 +00002101 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00002102 {
2103 q=PopDoublePixel(&quantum_state,(double) p->opacity,q);
2104 p++;
2105 q+=quantum_info->pad;
2106 }
2107 break;
2108 }
2109 }
2110 default:
2111 {
2112 range=GetQuantumRange(image->depth);
cristybb503372010-05-27 20:51:26 +00002113 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00002114 {
2115 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2116 p->opacity,range),q);
2117 p++;
2118 q+=quantum_info->pad;
2119 }
2120 break;
2121 }
2122 }
2123 break;
2124 }
2125 case BlackQuantum:
2126 {
2127 if (image->colorspace != CMYKColorspace)
2128 {
2129 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2130 "ColorSeparatedImageRequired","`%s'",image->filename);
2131 return(extent);
2132 }
2133 switch (quantum_info->depth)
2134 {
2135 case 8:
2136 {
2137 register unsigned char
2138 pixel;
2139
cristybb503372010-05-27 20:51:26 +00002140 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00002141 {
2142 pixel=ScaleQuantumToChar(indexes[x]);
2143 q=PopCharPixel(pixel,q);
2144 p++;
2145 q+=quantum_info->pad;
2146 }
2147 break;
2148 }
2149 case 16:
2150 {
2151 register unsigned short
2152 pixel;
2153
cristyc9672a92010-01-06 00:57:45 +00002154 if (quantum_info->format == FloatingPointQuantumFormat)
2155 {
cristybb503372010-05-27 20:51:26 +00002156 for (x=0; x < (ssize_t) number_pixels; x++)
cristyc9672a92010-01-06 00:57:45 +00002157 {
cristy2a4d01c2010-01-10 21:14:51 +00002158 pixel=SinglePrecisionToHalf(QuantumScale*indexes[x]);
cristyc9672a92010-01-06 00:57:45 +00002159 q=PopShortPixel(endian,pixel,q);
2160 p++;
2161 q+=quantum_info->pad;
2162 }
2163 break;
2164 }
cristybb503372010-05-27 20:51:26 +00002165 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00002166 {
2167 pixel=ScaleQuantumToShort(indexes[x]);
2168 q=PopShortPixel(endian,pixel,q);
2169 p++;
2170 q+=quantum_info->pad;
2171 }
2172 break;
2173 }
2174 case 32:
2175 {
cristy4cb162a2010-05-30 03:04:47 +00002176 register unsigned int
cristy3ed852e2009-09-05 21:47:34 +00002177 pixel;
2178
2179 if (quantum_info->format == FloatingPointQuantumFormat)
2180 {
cristybb503372010-05-27 20:51:26 +00002181 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00002182 {
2183 q=PopFloatPixel(&quantum_state,(float) indexes[x],q);
2184 p++;
2185 q+=quantum_info->pad;
2186 }
2187 break;
2188 }
cristybb503372010-05-27 20:51:26 +00002189 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00002190 {
2191 pixel=ScaleQuantumToLong(indexes[x]);
2192 q=PopLongPixel(endian,pixel,q);
2193 p++;
2194 q+=quantum_info->pad;
2195 }
2196 break;
2197 }
2198 case 64:
2199 {
2200 if (quantum_info->format == FloatingPointQuantumFormat)
2201 {
cristybb503372010-05-27 20:51:26 +00002202 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00002203 {
2204 q=PopDoublePixel(&quantum_state,(double) indexes[x],q);
2205 p++;
2206 q+=quantum_info->pad;
2207 }
2208 break;
2209 }
2210 }
2211 default:
2212 {
2213 range=GetQuantumRange(image->depth);
cristybb503372010-05-27 20:51:26 +00002214 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00002215 {
2216 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2217 (Quantum) indexes[x],range),q);
2218 p++;
2219 q+=quantum_info->pad;
2220 }
2221 break;
2222 }
2223 }
2224 break;
2225 }
2226 case RGBQuantum:
2227 case CbYCrQuantum:
2228 {
2229 switch (quantum_info->depth)
2230 {
2231 case 8:
2232 {
cristybb503372010-05-27 20:51:26 +00002233 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00002234 {
cristyce70c172010-01-07 17:15:30 +00002235 q=PopCharPixel(ScaleQuantumToChar(GetRedPixelComponent(p)),q);
2236 q=PopCharPixel(ScaleQuantumToChar(GetGreenPixelComponent(p)),q);
2237 q=PopCharPixel(ScaleQuantumToChar(GetBluePixelComponent(p)),q);
cristy3ed852e2009-09-05 21:47:34 +00002238 p++;
2239 q+=quantum_info->pad;
2240 }
2241 break;
2242 }
2243 case 10:
2244 {
cristy4cb162a2010-05-30 03:04:47 +00002245 register unsigned int
cristy3ed852e2009-09-05 21:47:34 +00002246 pixel;
2247
2248 range=GetQuantumRange(image->depth);
2249 if (quantum_info->pack == MagickFalse)
2250 {
cristybb503372010-05-27 20:51:26 +00002251 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00002252 {
cristy4cb162a2010-05-30 03:04:47 +00002253 pixel=(unsigned int) (ScaleQuantumToAny(p->red,range) << 22 |
cristyff024b42010-02-21 22:55:09 +00002254 ScaleQuantumToAny(p->green,range) << 12 |
cristy3ed852e2009-09-05 21:47:34 +00002255 ScaleQuantumToAny(p->blue,range) << 2);
2256 q=PopLongPixel(endian,pixel,q);
2257 p++;
2258 q+=quantum_info->pad;
2259 }
2260 break;
2261 }
2262 if (quantum_info->quantum == 32UL)
2263 {
cristybb503372010-05-27 20:51:26 +00002264 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00002265 {
cristy4cb162a2010-05-30 03:04:47 +00002266 pixel=(unsigned int) ScaleQuantumToAny(p->red,range);
cristy3ed852e2009-09-05 21:47:34 +00002267 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
cristy4cb162a2010-05-30 03:04:47 +00002268 pixel=(unsigned int) ScaleQuantumToAny(p->green,range);
cristy3ed852e2009-09-05 21:47:34 +00002269 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
cristy4cb162a2010-05-30 03:04:47 +00002270 pixel=(unsigned int) ScaleQuantumToAny(p->blue,range);
cristy3ed852e2009-09-05 21:47:34 +00002271 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
2272 p++;
2273 q+=quantum_info->pad;
2274 }
2275 break;
2276 }
cristybb503372010-05-27 20:51:26 +00002277 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00002278 {
cristy4cb162a2010-05-30 03:04:47 +00002279 pixel=(unsigned int) ScaleQuantumToAny(p->red,range);
cristy3ed852e2009-09-05 21:47:34 +00002280 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
cristy4cb162a2010-05-30 03:04:47 +00002281 pixel=(unsigned int) ScaleQuantumToAny(p->green,range);
cristy3ed852e2009-09-05 21:47:34 +00002282 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
cristy4cb162a2010-05-30 03:04:47 +00002283 pixel=(unsigned int) ScaleQuantumToAny(p->blue,range);
cristy3ed852e2009-09-05 21:47:34 +00002284 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
2285 p++;
2286 q+=quantum_info->pad;
2287 }
2288 break;
2289 }
2290 case 12:
2291 {
cristy4cb162a2010-05-30 03:04:47 +00002292 register unsigned int
cristy3ed852e2009-09-05 21:47:34 +00002293 pixel;
2294
2295 range=GetQuantumRange(image->depth);
2296 if (quantum_info->pack == MagickFalse)
2297 {
cristybb503372010-05-27 20:51:26 +00002298 for (x=0; x < (ssize_t) (3*number_pixels-1); x+=2)
cristy3ed852e2009-09-05 21:47:34 +00002299 {
2300 switch (x % 3)
2301 {
2302 default:
2303 case 0:
2304 {
cristy4cb162a2010-05-30 03:04:47 +00002305 pixel=(unsigned int) ScaleQuantumToAny(p->red,range);
cristy3ed852e2009-09-05 21:47:34 +00002306 break;
2307 }
2308 case 1:
2309 {
cristy4cb162a2010-05-30 03:04:47 +00002310 pixel=(unsigned int) ScaleQuantumToAny(p->green,range);
cristy3ed852e2009-09-05 21:47:34 +00002311 break;
2312 }
2313 case 2:
2314 {
cristy4cb162a2010-05-30 03:04:47 +00002315 pixel=(unsigned int) ScaleQuantumToAny(p->blue,range);
cristy3ed852e2009-09-05 21:47:34 +00002316 p++;
2317 break;
2318 }
2319 }
2320 q=PopShortPixel(endian,(unsigned short) (pixel << 4),q);
2321 switch ((x+1) % 3)
2322 {
2323 default:
2324 case 0:
2325 {
cristy4cb162a2010-05-30 03:04:47 +00002326 pixel=(unsigned int) ScaleQuantumToAny(p->red,range);
cristy3ed852e2009-09-05 21:47:34 +00002327 break;
2328 }
2329 case 1:
2330 {
cristy4cb162a2010-05-30 03:04:47 +00002331 pixel=(unsigned int) ScaleQuantumToAny(p->green,range);
cristy3ed852e2009-09-05 21:47:34 +00002332 break;
2333 }
2334 case 2:
2335 {
cristy4cb162a2010-05-30 03:04:47 +00002336 pixel=(unsigned int) ScaleQuantumToAny(p->blue,range);
cristy3ed852e2009-09-05 21:47:34 +00002337 p++;
2338 break;
2339 }
2340 }
2341 q=PopShortPixel(endian,(unsigned short) (pixel << 4),q);
2342 q+=quantum_info->pad;
2343 }
cristybb503372010-05-27 20:51:26 +00002344 for (bit=0; bit < (ssize_t) (3*number_pixels % 2); bit++)
cristy3ed852e2009-09-05 21:47:34 +00002345 {
2346 switch ((x+bit) % 3)
2347 {
2348 default:
2349 case 0:
2350 {
cristy4cb162a2010-05-30 03:04:47 +00002351 pixel=(unsigned int) ScaleQuantumToAny(p->red,range);
cristy3ed852e2009-09-05 21:47:34 +00002352 break;
2353 }
2354 case 1:
2355 {
cristy4cb162a2010-05-30 03:04:47 +00002356 pixel=(unsigned int) ScaleQuantumToAny(p->green,range);
cristy3ed852e2009-09-05 21:47:34 +00002357 break;
2358 }
2359 case 2:
2360 {
cristy4cb162a2010-05-30 03:04:47 +00002361 pixel=(unsigned int) ScaleQuantumToAny(p->blue,range);
cristy3ed852e2009-09-05 21:47:34 +00002362 p++;
2363 break;
2364 }
2365 }
2366 q=PopShortPixel(endian,(unsigned short) (pixel << 4),q);
2367 q+=quantum_info->pad;
2368 }
2369 if (bit != 0)
2370 p++;
2371 break;
2372 }
2373 if (quantum_info->quantum == 32UL)
2374 {
cristybb503372010-05-27 20:51:26 +00002375 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00002376 {
cristy4cb162a2010-05-30 03:04:47 +00002377 pixel=(unsigned int) ScaleQuantumToAny(p->red,range);
cristy3ed852e2009-09-05 21:47:34 +00002378 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
cristy4cb162a2010-05-30 03:04:47 +00002379 pixel=(unsigned int) ScaleQuantumToAny(p->green,range);
cristy3ed852e2009-09-05 21:47:34 +00002380 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
cristy4cb162a2010-05-30 03:04:47 +00002381 pixel=(unsigned int) ScaleQuantumToAny(p->blue,range);
cristy3ed852e2009-09-05 21:47:34 +00002382 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
2383 p++;
2384 q+=quantum_info->pad;
2385 }
2386 break;
2387 }
cristybb503372010-05-27 20:51:26 +00002388 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00002389 {
cristy4cb162a2010-05-30 03:04:47 +00002390 pixel=(unsigned int) ScaleQuantumToAny(p->red,range);
cristy3ed852e2009-09-05 21:47:34 +00002391 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
cristy4cb162a2010-05-30 03:04:47 +00002392 pixel=(unsigned int) ScaleQuantumToAny(p->green,range);
cristy3ed852e2009-09-05 21:47:34 +00002393 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
cristy4cb162a2010-05-30 03:04:47 +00002394 pixel=(unsigned int) ScaleQuantumToAny(p->blue,range);
cristy3ed852e2009-09-05 21:47:34 +00002395 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
2396 p++;
2397 q+=quantum_info->pad;
2398 }
2399 break;
2400 }
2401 case 16:
2402 {
2403 register unsigned short
2404 pixel;
2405
cristyc9672a92010-01-06 00:57:45 +00002406 if (quantum_info->format == FloatingPointQuantumFormat)
2407 {
cristybb503372010-05-27 20:51:26 +00002408 for (x=0; x < (ssize_t) number_pixels; x++)
cristyc9672a92010-01-06 00:57:45 +00002409 {
cristy2a4d01c2010-01-10 21:14:51 +00002410 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +00002411 GetRedPixelComponent(p));
cristyc9672a92010-01-06 00:57:45 +00002412 q=PopShortPixel(endian,pixel,q);
cristy2a4d01c2010-01-10 21:14:51 +00002413 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +00002414 GetGreenPixelComponent(p));
cristyc9672a92010-01-06 00:57:45 +00002415 q=PopShortPixel(endian,pixel,q);
cristy2a4d01c2010-01-10 21:14:51 +00002416 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +00002417 GetBluePixelComponent(p));
cristyc9672a92010-01-06 00:57:45 +00002418 q=PopShortPixel(endian,pixel,q);
2419 p++;
2420 q+=quantum_info->pad;
2421 }
2422 break;
2423 }
cristybb503372010-05-27 20:51:26 +00002424 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00002425 {
cristyce70c172010-01-07 17:15:30 +00002426 pixel=ScaleQuantumToShort(GetRedPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002427 q=PopShortPixel(endian,pixel,q);
cristyce70c172010-01-07 17:15:30 +00002428 pixel=ScaleQuantumToShort(GetGreenPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002429 q=PopShortPixel(endian,pixel,q);
cristyce70c172010-01-07 17:15:30 +00002430 pixel=ScaleQuantumToShort(GetBluePixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002431 q=PopShortPixel(endian,pixel,q);
2432 p++;
2433 q+=quantum_info->pad;
2434 }
2435 break;
2436 }
2437 case 32:
2438 {
cristy4cb162a2010-05-30 03:04:47 +00002439 register unsigned int
cristy3ed852e2009-09-05 21:47:34 +00002440 pixel;
2441
2442 if (quantum_info->format == FloatingPointQuantumFormat)
2443 {
cristybb503372010-05-27 20:51:26 +00002444 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00002445 {
2446 q=PopFloatPixel(&quantum_state,(float) p->red,q);
2447 q=PopFloatPixel(&quantum_state,(float) p->green,q);
2448 q=PopFloatPixel(&quantum_state,(float) p->blue,q);
2449 p++;
2450 q+=quantum_info->pad;
2451 }
2452 break;
2453 }
cristybb503372010-05-27 20:51:26 +00002454 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00002455 {
cristyce70c172010-01-07 17:15:30 +00002456 pixel=ScaleQuantumToLong(GetRedPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002457 q=PopLongPixel(endian,pixel,q);
cristyce70c172010-01-07 17:15:30 +00002458 pixel=ScaleQuantumToLong(GetGreenPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002459 q=PopLongPixel(endian,pixel,q);
cristyce70c172010-01-07 17:15:30 +00002460 pixel=ScaleQuantumToLong(GetBluePixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002461 q=PopLongPixel(endian,pixel,q);
2462 p++;
2463 q+=quantum_info->pad;
2464 }
2465 break;
2466 }
2467 case 64:
2468 {
2469 if (quantum_info->format == FloatingPointQuantumFormat)
2470 {
cristybb503372010-05-27 20:51:26 +00002471 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00002472 {
2473 q=PopDoublePixel(&quantum_state,(double) p->red,q);
2474 q=PopDoublePixel(&quantum_state,(double) p->green,q);
2475 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
2476 p++;
2477 q+=quantum_info->pad;
2478 }
2479 break;
2480 }
2481 }
2482 default:
2483 {
2484 range=GetQuantumRange(image->depth);
cristybb503372010-05-27 20:51:26 +00002485 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00002486 {
2487 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2488 p->red,range),q);
2489 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2490 p->green,range),q);
2491 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2492 p->blue,range),q);
2493 p++;
2494 q+=quantum_info->pad;
2495 }
2496 break;
2497 }
2498 }
2499 break;
2500 }
2501 case RGBAQuantum:
2502 case RGBOQuantum:
2503 case CbYCrAQuantum:
2504 {
2505 switch (quantum_info->depth)
2506 {
2507 case 8:
2508 {
2509 register unsigned char
2510 pixel;
2511
cristybb503372010-05-27 20:51:26 +00002512 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00002513 {
cristyce70c172010-01-07 17:15:30 +00002514 pixel=ScaleQuantumToChar(GetRedPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002515 q=PopCharPixel(pixel,q);
cristyce70c172010-01-07 17:15:30 +00002516 pixel=ScaleQuantumToChar(GetGreenPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002517 q=PopCharPixel(pixel,q);
cristyce70c172010-01-07 17:15:30 +00002518 pixel=ScaleQuantumToChar(GetBluePixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002519 q=PopCharPixel(pixel,q);
cristycee97112010-05-28 00:44:52 +00002520 pixel=ScaleQuantumToChar((Quantum) GetAlphaPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002521 q=PopCharPixel(pixel,q);
2522 p++;
2523 q+=quantum_info->pad;
2524 }
2525 break;
2526 }
cristy891dc792010-03-04 01:47:16 +00002527 case 10:
2528 {
cristy4cb162a2010-05-30 03:04:47 +00002529 register unsigned int
cristy891dc792010-03-04 01:47:16 +00002530 pixel;
2531
2532 range=GetQuantumRange(image->depth);
2533 if (quantum_info->pack == MagickFalse)
2534 {
cristybb503372010-05-27 20:51:26 +00002535 register ssize_t
cristy891dc792010-03-04 01:47:16 +00002536 i;
2537
cristybb503372010-05-27 20:51:26 +00002538 size_t
cristy891dc792010-03-04 01:47:16 +00002539 quantum;
2540
cristy9d314ff2011-03-09 01:30:28 +00002541 ssize_t
2542 n;
2543
cristy891dc792010-03-04 01:47:16 +00002544 n=0;
2545 quantum=0;
2546 pixel=0;
cristybb503372010-05-27 20:51:26 +00002547 for (x=0; x < (ssize_t) number_pixels; x++)
cristy891dc792010-03-04 01:47:16 +00002548 {
2549 for (i=0; i < 4; i++)
2550 {
2551 switch (i)
2552 {
2553 case 0: quantum=p->red; break;
2554 case 1: quantum=p->green; break;
2555 case 2: quantum=p->blue; break;
cristycee97112010-05-28 00:44:52 +00002556 case 3: quantum=(Quantum) (QuantumRange-p->opacity); break;
cristy891dc792010-03-04 01:47:16 +00002557 }
2558 switch (n % 3)
2559 {
2560 case 0:
2561 {
cristycee97112010-05-28 00:44:52 +00002562 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
cristy891dc792010-03-04 01:47:16 +00002563 range) << 22);
2564 break;
2565 }
2566 case 1:
2567 {
cristycee97112010-05-28 00:44:52 +00002568 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
cristy891dc792010-03-04 01:47:16 +00002569 range) << 12);
2570 break;
2571 }
2572 case 2:
2573 {
cristycee97112010-05-28 00:44:52 +00002574 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
cristy891dc792010-03-04 01:47:16 +00002575 range) << 2);
2576 q=PopLongPixel(endian,pixel,q);
2577 pixel=0;
2578 break;
2579 }
2580 }
2581 n++;
2582 }
2583 p++;
2584 q+=quantum_info->pad;
2585 }
2586 break;
2587 }
2588 if (quantum_info->quantum == 32UL)
2589 {
cristybb503372010-05-27 20:51:26 +00002590 for (x=0; x < (ssize_t) number_pixels; x++)
cristy891dc792010-03-04 01:47:16 +00002591 {
cristy4cb162a2010-05-30 03:04:47 +00002592 pixel=(unsigned int) ScaleQuantumToAny(p->red,range);
cristy891dc792010-03-04 01:47:16 +00002593 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
cristy4cb162a2010-05-30 03:04:47 +00002594 pixel=(unsigned int) ScaleQuantumToAny(p->green,range);
cristy891dc792010-03-04 01:47:16 +00002595 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
cristy4cb162a2010-05-30 03:04:47 +00002596 pixel=(unsigned int) ScaleQuantumToAny(p->blue,range);
cristy891dc792010-03-04 01:47:16 +00002597 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
cristy4cb162a2010-05-30 03:04:47 +00002598 pixel=(unsigned int) ScaleQuantumToAny((Quantum) (QuantumRange-
cristycee97112010-05-28 00:44:52 +00002599 p->opacity),range);
cristy891dc792010-03-04 01:47:16 +00002600 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
2601 p++;
2602 q+=quantum_info->pad;
2603 }
2604 break;
2605 }
cristybb503372010-05-27 20:51:26 +00002606 for (x=0; x < (ssize_t) number_pixels; x++)
cristy891dc792010-03-04 01:47:16 +00002607 {
cristy4cb162a2010-05-30 03:04:47 +00002608 pixel=(unsigned int) ScaleQuantumToAny(p->red,range);
cristy891dc792010-03-04 01:47:16 +00002609 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
cristy4cb162a2010-05-30 03:04:47 +00002610 pixel=(unsigned int) ScaleQuantumToAny(p->green,range);
cristy891dc792010-03-04 01:47:16 +00002611 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
cristy4cb162a2010-05-30 03:04:47 +00002612 pixel=(unsigned int) ScaleQuantumToAny(p->blue,range);
cristy891dc792010-03-04 01:47:16 +00002613 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
cristy4cb162a2010-05-30 03:04:47 +00002614 pixel=(unsigned int) ScaleQuantumToAny((Quantum) (QuantumRange-
cristycee97112010-05-28 00:44:52 +00002615 p->opacity),range);
cristy891dc792010-03-04 01:47:16 +00002616 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
2617 p++;
2618 q+=quantum_info->pad;
2619 }
2620 break;
2621 }
cristy3ed852e2009-09-05 21:47:34 +00002622 case 16:
2623 {
2624 register unsigned short
2625 pixel;
2626
cristyc9672a92010-01-06 00:57:45 +00002627 if (quantum_info->format == FloatingPointQuantumFormat)
2628 {
cristybb503372010-05-27 20:51:26 +00002629 for (x=0; x < (ssize_t) number_pixels; x++)
cristyc9672a92010-01-06 00:57:45 +00002630 {
cristy2a4d01c2010-01-10 21:14:51 +00002631 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +00002632 GetRedPixelComponent(p));
cristyc9672a92010-01-06 00:57:45 +00002633 q=PopShortPixel(endian,pixel,q);
cristy2a4d01c2010-01-10 21:14:51 +00002634 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +00002635 GetGreenPixelComponent(p));
cristyc9672a92010-01-06 00:57:45 +00002636 q=PopShortPixel(endian,pixel,q);
cristy2a4d01c2010-01-10 21:14:51 +00002637 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +00002638 GetBluePixelComponent(p));
cristyc9672a92010-01-06 00:57:45 +00002639 q=PopShortPixel(endian,pixel,q);
cristy2a4d01c2010-01-10 21:14:51 +00002640 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +00002641 GetAlphaPixelComponent(p));
cristyc9672a92010-01-06 00:57:45 +00002642 q=PopShortPixel(endian,pixel,q);
2643 p++;
2644 q+=quantum_info->pad;
2645 }
2646 break;
2647 }
cristybb503372010-05-27 20:51:26 +00002648 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00002649 {
cristyce70c172010-01-07 17:15:30 +00002650 pixel=ScaleQuantumToShort(GetRedPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002651 q=PopShortPixel(endian,pixel,q);
cristyce70c172010-01-07 17:15:30 +00002652 pixel=ScaleQuantumToShort(GetGreenPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002653 q=PopShortPixel(endian,pixel,q);
cristyce70c172010-01-07 17:15:30 +00002654 pixel=ScaleQuantumToShort(GetBluePixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002655 q=PopShortPixel(endian,pixel,q);
cristycee97112010-05-28 00:44:52 +00002656 pixel=ScaleQuantumToShort((Quantum) GetAlphaPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002657 q=PopShortPixel(endian,pixel,q);
2658 p++;
2659 q+=quantum_info->pad;
2660 }
2661 break;
2662 }
2663 case 32:
2664 {
cristy4cb162a2010-05-30 03:04:47 +00002665 register unsigned int
cristy3ed852e2009-09-05 21:47:34 +00002666 pixel;
2667
2668 if (quantum_info->format == FloatingPointQuantumFormat)
2669 {
cristybb503372010-05-27 20:51:26 +00002670 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00002671 {
2672 float
2673 pixel;
2674
2675 q=PopFloatPixel(&quantum_state,(float) p->red,q);
2676 q=PopFloatPixel(&quantum_state,(float) p->green,q);
2677 q=PopFloatPixel(&quantum_state,(float) p->blue,q);
cristycee97112010-05-28 00:44:52 +00002678 pixel=(float) GetAlphaPixelComponent(p);
cristy3ed852e2009-09-05 21:47:34 +00002679 q=PopFloatPixel(&quantum_state,pixel,q);
2680 p++;
2681 q+=quantum_info->pad;
2682 }
2683 break;
2684 }
cristybb503372010-05-27 20:51:26 +00002685 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00002686 {
cristyce70c172010-01-07 17:15:30 +00002687 pixel=ScaleQuantumToLong(GetRedPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002688 q=PopLongPixel(endian,pixel,q);
cristyce70c172010-01-07 17:15:30 +00002689 pixel=ScaleQuantumToLong(GetGreenPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002690 q=PopLongPixel(endian,pixel,q);
cristyce70c172010-01-07 17:15:30 +00002691 pixel=ScaleQuantumToLong(GetBluePixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002692 q=PopLongPixel(endian,pixel,q);
cristycee97112010-05-28 00:44:52 +00002693 pixel=ScaleQuantumToLong((Quantum) GetAlphaPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002694 q=PopLongPixel(endian,pixel,q);
2695 p++;
2696 q+=quantum_info->pad;
2697 }
2698 break;
2699 }
2700 case 64:
2701 {
2702 if (quantum_info->format == FloatingPointQuantumFormat)
2703 {
2704 double
2705 pixel;
2706
cristybb503372010-05-27 20:51:26 +00002707 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00002708 {
2709 q=PopDoublePixel(&quantum_state,(double) p->red,q);
2710 q=PopDoublePixel(&quantum_state,(double) p->green,q);
2711 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
cristyeec18db2010-03-03 21:15:45 +00002712 pixel=(double) GetAlphaPixelComponent(p);
cristy3ed852e2009-09-05 21:47:34 +00002713 q=PopDoublePixel(&quantum_state,pixel,q);
2714 p++;
2715 q+=quantum_info->pad;
2716 }
2717 break;
2718 }
2719 }
2720 default:
2721 {
2722 range=GetQuantumRange(image->depth);
cristybb503372010-05-27 20:51:26 +00002723 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00002724 {
2725 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
cristyeec18db2010-03-03 21:15:45 +00002726 GetRedPixelComponent(p),range),q);
cristy3ed852e2009-09-05 21:47:34 +00002727 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
cristyeec18db2010-03-03 21:15:45 +00002728 GetGreenPixelComponent(p),range),q);
cristy3ed852e2009-09-05 21:47:34 +00002729 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
cristyeec18db2010-03-03 21:15:45 +00002730 GetBluePixelComponent(p),range),q);
cristy3ed852e2009-09-05 21:47:34 +00002731 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
cristycee97112010-05-28 00:44:52 +00002732 (Quantum) GetAlphaPixelComponent(p),range),q);
cristy3ed852e2009-09-05 21:47:34 +00002733 p++;
2734 q+=quantum_info->pad;
2735 }
2736 break;
2737 }
2738 }
2739 break;
2740 }
2741 case CMYKQuantum:
2742 {
2743 if (image->colorspace != CMYKColorspace)
2744 {
2745 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2746 "ColorSeparatedImageRequired","`%s'",image->filename);
2747 return(extent);
2748 }
2749 switch (quantum_info->depth)
2750 {
2751 case 8:
2752 {
2753 register unsigned char
2754 pixel;
2755
cristybb503372010-05-27 20:51:26 +00002756 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00002757 {
cristyce70c172010-01-07 17:15:30 +00002758 pixel=ScaleQuantumToChar(GetRedPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002759 q=PopCharPixel(pixel,q);
cristyce70c172010-01-07 17:15:30 +00002760 pixel=ScaleQuantumToChar(GetGreenPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002761 q=PopCharPixel(pixel,q);
cristyce70c172010-01-07 17:15:30 +00002762 pixel=ScaleQuantumToChar(GetBluePixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002763 q=PopCharPixel(pixel,q);
2764 pixel=ScaleQuantumToChar(indexes[x]);
2765 q=PopCharPixel(pixel,q);
2766 p++;
2767 q+=quantum_info->pad;
2768 }
2769 break;
2770 }
2771 case 16:
2772 {
2773 register unsigned short
2774 pixel;
2775
cristyc9672a92010-01-06 00:57:45 +00002776 if (quantum_info->format == FloatingPointQuantumFormat)
2777 {
cristybb503372010-05-27 20:51:26 +00002778 for (x=0; x < (ssize_t) number_pixels; x++)
cristyc9672a92010-01-06 00:57:45 +00002779 {
cristy2a4d01c2010-01-10 21:14:51 +00002780 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +00002781 GetRedPixelComponent(p));
cristyc9672a92010-01-06 00:57:45 +00002782 q=PopShortPixel(endian,pixel,q);
cristy2a4d01c2010-01-10 21:14:51 +00002783 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +00002784 GetGreenPixelComponent(p));
cristyc9672a92010-01-06 00:57:45 +00002785 q=PopShortPixel(endian,pixel,q);
cristy2a4d01c2010-01-10 21:14:51 +00002786 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +00002787 GetBluePixelComponent(p));
cristyc9672a92010-01-06 00:57:45 +00002788 q=PopShortPixel(endian,pixel,q);
cristy2a4d01c2010-01-10 21:14:51 +00002789 pixel=SinglePrecisionToHalf(QuantumScale*indexes[x]);
cristyc9672a92010-01-06 00:57:45 +00002790 q=PopShortPixel(endian,pixel,q);
2791 p++;
2792 q+=quantum_info->pad;
2793 }
2794 break;
2795 }
cristybb503372010-05-27 20:51:26 +00002796 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00002797 {
cristyce70c172010-01-07 17:15:30 +00002798 pixel=ScaleQuantumToShort(GetRedPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002799 q=PopShortPixel(endian,pixel,q);
cristyce70c172010-01-07 17:15:30 +00002800 pixel=ScaleQuantumToShort(GetGreenPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002801 q=PopShortPixel(endian,pixel,q);
cristyce70c172010-01-07 17:15:30 +00002802 pixel=ScaleQuantumToShort(GetBluePixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002803 q=PopShortPixel(endian,pixel,q);
2804 pixel=ScaleQuantumToShort(indexes[x]);
2805 q=PopShortPixel(endian,pixel,q);
2806 p++;
2807 q+=quantum_info->pad;
2808 }
2809 break;
2810 }
2811 case 32:
2812 {
cristy4cb162a2010-05-30 03:04:47 +00002813 register unsigned int
cristy3ed852e2009-09-05 21:47:34 +00002814 pixel;
2815
2816 if (quantum_info->format == FloatingPointQuantumFormat)
2817 {
cristybb503372010-05-27 20:51:26 +00002818 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00002819 {
2820 q=PopFloatPixel(&quantum_state,(float) p->red,q);
2821 q=PopFloatPixel(&quantum_state,(float) p->green,q);
2822 q=PopFloatPixel(&quantum_state,(float) p->blue,q);
2823 q=PopFloatPixel(&quantum_state,(float) indexes[x],q);
2824 p++;
2825 q+=quantum_info->pad;
2826 }
2827 break;
2828 }
cristybb503372010-05-27 20:51:26 +00002829 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00002830 {
cristyce70c172010-01-07 17:15:30 +00002831 pixel=ScaleQuantumToLong(GetRedPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002832 q=PopLongPixel(endian,pixel,q);
cristyce70c172010-01-07 17:15:30 +00002833 pixel=ScaleQuantumToLong(GetGreenPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002834 q=PopLongPixel(endian,pixel,q);
cristyce70c172010-01-07 17:15:30 +00002835 pixel=ScaleQuantumToLong(GetBluePixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002836 q=PopLongPixel(endian,pixel,q);
2837 pixel=ScaleQuantumToLong(indexes[x]);
2838 q=PopLongPixel(endian,pixel,q);
2839 p++;
2840 q+=quantum_info->pad;
2841 }
2842 break;
2843 }
2844 case 64:
2845 {
2846 if (quantum_info->format == FloatingPointQuantumFormat)
2847 {
cristybb503372010-05-27 20:51:26 +00002848 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00002849 {
2850 q=PopDoublePixel(&quantum_state,(double) p->red,q);
2851 q=PopDoublePixel(&quantum_state,(double) p->green,q);
2852 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
2853 q=PopDoublePixel(&quantum_state,(double) indexes[x],q);
2854 p++;
2855 q+=quantum_info->pad;
2856 }
2857 break;
2858 }
2859 }
2860 default:
2861 {
2862 range=GetQuantumRange(image->depth);
cristybb503372010-05-27 20:51:26 +00002863 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00002864 {
2865 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2866 p->red,range),q);
2867 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2868 p->green,range),q);
2869 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2870 p->blue,range),q);
2871 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2872 indexes[x],range),q);
2873 p++;
2874 q+=quantum_info->pad;
2875 }
2876 break;
2877 }
2878 }
2879 break;
2880 }
2881 case CMYKAQuantum:
2882 case CMYKOQuantum:
2883 {
2884 if (image->colorspace != CMYKColorspace)
2885 {
2886 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2887 "ColorSeparatedImageRequired","`%s'",image->filename);
2888 return(extent);
2889 }
2890 switch (quantum_info->depth)
2891 {
2892 case 8:
2893 {
2894 register unsigned char
2895 pixel;
2896
cristybb503372010-05-27 20:51:26 +00002897 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00002898 {
cristyce70c172010-01-07 17:15:30 +00002899 pixel=ScaleQuantumToChar(GetRedPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002900 q=PopCharPixel(pixel,q);
cristyce70c172010-01-07 17:15:30 +00002901 pixel=ScaleQuantumToChar(GetGreenPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002902 q=PopCharPixel(pixel,q);
cristyce70c172010-01-07 17:15:30 +00002903 pixel=ScaleQuantumToChar(GetBluePixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002904 q=PopCharPixel(pixel,q);
2905 pixel=ScaleQuantumToChar(indexes[x]);
2906 q=PopCharPixel(pixel,q);
cristyce70c172010-01-07 17:15:30 +00002907 pixel=ScaleQuantumToChar((Quantum) (QuantumRange-
2908 GetOpacityPixelComponent(p)));
cristy3ed852e2009-09-05 21:47:34 +00002909 q=PopCharPixel(pixel,q);
2910 p++;
2911 q+=quantum_info->pad;
2912 }
2913 break;
2914 }
2915 case 16:
2916 {
2917 register unsigned short
2918 pixel;
2919
cristyc9672a92010-01-06 00:57:45 +00002920 if (quantum_info->format == FloatingPointQuantumFormat)
2921 {
cristybb503372010-05-27 20:51:26 +00002922 for (x=0; x < (ssize_t) number_pixels; x++)
cristyc9672a92010-01-06 00:57:45 +00002923 {
cristy2a4d01c2010-01-10 21:14:51 +00002924 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +00002925 GetRedPixelComponent(p));
cristyc9672a92010-01-06 00:57:45 +00002926 q=PopShortPixel(endian,pixel,q);
cristy2a4d01c2010-01-10 21:14:51 +00002927 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +00002928 GetGreenPixelComponent(p));
cristyc9672a92010-01-06 00:57:45 +00002929 q=PopShortPixel(endian,pixel,q);
cristy2a4d01c2010-01-10 21:14:51 +00002930 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +00002931 GetBluePixelComponent(p));
cristyc9672a92010-01-06 00:57:45 +00002932 q=PopShortPixel(endian,pixel,q);
cristy2a4d01c2010-01-10 21:14:51 +00002933 pixel=SinglePrecisionToHalf(QuantumScale*indexes[x]);
cristyc9672a92010-01-06 00:57:45 +00002934 q=PopShortPixel(endian,pixel,q);
cristy2a4d01c2010-01-10 21:14:51 +00002935 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +00002936 GetAlphaPixelComponent(p));
cristyc9672a92010-01-06 00:57:45 +00002937 q=PopShortPixel(endian,pixel,q);
2938 p++;
2939 q+=quantum_info->pad;
2940 }
2941 break;
2942 }
cristybb503372010-05-27 20:51:26 +00002943 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00002944 {
cristyce70c172010-01-07 17:15:30 +00002945 pixel=ScaleQuantumToShort(GetRedPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002946 q=PopShortPixel(endian,pixel,q);
cristyce70c172010-01-07 17:15:30 +00002947 pixel=ScaleQuantumToShort(GetGreenPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002948 q=PopShortPixel(endian,pixel,q);
cristyce70c172010-01-07 17:15:30 +00002949 pixel=ScaleQuantumToShort(GetBluePixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002950 q=PopShortPixel(endian,pixel,q);
2951 pixel=ScaleQuantumToShort(indexes[x]);
2952 q=PopShortPixel(endian,pixel,q);
cristyce70c172010-01-07 17:15:30 +00002953 pixel=ScaleQuantumToShort((Quantum) (QuantumRange-
2954 GetOpacityPixelComponent(p)));
cristy3ed852e2009-09-05 21:47:34 +00002955 q=PopShortPixel(endian,pixel,q);
2956 p++;
2957 q+=quantum_info->pad;
2958 }
2959 break;
2960 }
2961 case 32:
2962 {
cristy4cb162a2010-05-30 03:04:47 +00002963 register unsigned int
cristy3ed852e2009-09-05 21:47:34 +00002964 pixel;
2965
2966 if (quantum_info->format == FloatingPointQuantumFormat)
2967 {
cristybb503372010-05-27 20:51:26 +00002968 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00002969 {
2970 float
2971 pixel;
2972
2973 q=PopFloatPixel(&quantum_state,(float) p->red,q);
2974 q=PopFloatPixel(&quantum_state,(float) p->green,q);
2975 q=PopFloatPixel(&quantum_state,(float) p->blue,q);
2976 q=PopFloatPixel(&quantum_state,(float) indexes[x],q);
cristy46f08202010-01-10 04:04:21 +00002977 pixel=(float) (GetAlphaPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002978 q=PopFloatPixel(&quantum_state,pixel,q);
2979 p++;
2980 q+=quantum_info->pad;
2981 }
2982 break;
2983 }
cristybb503372010-05-27 20:51:26 +00002984 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00002985 {
cristyce70c172010-01-07 17:15:30 +00002986 pixel=ScaleQuantumToLong(GetRedPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002987 q=PopLongPixel(endian,pixel,q);
cristyce70c172010-01-07 17:15:30 +00002988 pixel=ScaleQuantumToLong(GetGreenPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002989 q=PopLongPixel(endian,pixel,q);
cristyce70c172010-01-07 17:15:30 +00002990 pixel=ScaleQuantumToLong(GetBluePixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002991 q=PopLongPixel(endian,pixel,q);
2992 pixel=ScaleQuantumToLong(indexes[x]);
2993 q=PopLongPixel(endian,pixel,q);
cristyce70c172010-01-07 17:15:30 +00002994 pixel=ScaleQuantumToLong((Quantum) (QuantumRange-
2995 GetOpacityPixelComponent(p)));
cristy3ed852e2009-09-05 21:47:34 +00002996 q=PopLongPixel(endian,pixel,q);
2997 p++;
2998 q+=quantum_info->pad;
2999 }
3000 break;
3001 }
3002 case 64:
3003 {
3004 if (quantum_info->format == FloatingPointQuantumFormat)
3005 {
3006 double
3007 pixel;
3008
cristybb503372010-05-27 20:51:26 +00003009 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00003010 {
3011 q=PopDoublePixel(&quantum_state,(double) p->red,q);
3012 q=PopDoublePixel(&quantum_state,(double) p->green,q);
3013 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
3014 q=PopDoublePixel(&quantum_state,(double) indexes[x],q);
cristy46f08202010-01-10 04:04:21 +00003015 pixel=(double) (GetAlphaPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00003016 q=PopDoublePixel(&quantum_state,pixel,q);
3017 p++;
3018 q+=quantum_info->pad;
3019 }
3020 break;
3021 }
3022 }
3023 default:
3024 {
3025 range=GetQuantumRange(image->depth);
cristybb503372010-05-27 20:51:26 +00003026 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00003027 {
3028 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
3029 p->red,range),q);
3030 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
3031 p->green,range),q);
3032 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
3033 p->blue,range),q);
3034 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
3035 indexes[x],range),q);
3036 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
3037 p->opacity,range),q);
3038 p++;
3039 q+=quantum_info->pad;
3040 }
3041 break;
3042 }
3043 }
3044 break;
3045 }
3046 case CbYCrYQuantum:
3047 {
cristy3ed852e2009-09-05 21:47:34 +00003048 Quantum
3049 cbcr[4];
3050
cristybb503372010-05-27 20:51:26 +00003051 register ssize_t
cristy3ed852e2009-09-05 21:47:34 +00003052 i;
3053
cristy4cb162a2010-05-30 03:04:47 +00003054 register unsigned int
cristy3ed852e2009-09-05 21:47:34 +00003055 pixel;
3056
cristybb503372010-05-27 20:51:26 +00003057 size_t
cristy3ed852e2009-09-05 21:47:34 +00003058 quantum;
3059
cristy9d314ff2011-03-09 01:30:28 +00003060 ssize_t
3061 n;
3062
cristy3ed852e2009-09-05 21:47:34 +00003063 n=0;
3064 quantum=0;
3065 range=GetQuantumRange(image->depth);
3066 switch (quantum_info->depth)
3067 {
3068 case 10:
3069 {
3070 if (quantum_info->pack == MagickFalse)
3071 {
cristybb503372010-05-27 20:51:26 +00003072 for (x=0; x < (ssize_t) number_pixels; x+=2)
cristy3ed852e2009-09-05 21:47:34 +00003073 {
3074 for (i=0; i < 4; i++)
3075 {
3076 switch (n % 3)
3077 {
3078 case 0:
3079 {
cristyce70c172010-01-07 17:15:30 +00003080 quantum=GetRedPixelComponent(p);
cristy3ed852e2009-09-05 21:47:34 +00003081 break;
3082 }
3083 case 1:
3084 {
cristyce70c172010-01-07 17:15:30 +00003085 quantum=GetGreenPixelComponent(p);
cristy3ed852e2009-09-05 21:47:34 +00003086 break;
3087 }
3088 case 2:
3089 {
cristyce70c172010-01-07 17:15:30 +00003090 quantum=GetBluePixelComponent(p);
cristy3ed852e2009-09-05 21:47:34 +00003091 break;
3092 }
3093 }
3094 cbcr[i]=(Quantum) quantum;
3095 n++;
3096 }
cristy4cb162a2010-05-30 03:04:47 +00003097 pixel=(unsigned int) ((size_t) (cbcr[1]) << 22 |
cristybb503372010-05-27 20:51:26 +00003098 (size_t) (cbcr[0]) << 12 |
3099 (size_t) (cbcr[2]) << 2);
cristy3ed852e2009-09-05 21:47:34 +00003100 q=PopLongPixel(endian,pixel,q);
3101 p++;
cristy4cb162a2010-05-30 03:04:47 +00003102 pixel=(unsigned int) ((size_t) (cbcr[3]) << 22 |
cristybb503372010-05-27 20:51:26 +00003103 (size_t) (cbcr[0]) << 12 |
3104 (size_t) (cbcr[2]) << 2);
cristy3ed852e2009-09-05 21:47:34 +00003105 q=PopLongPixel(endian,pixel,q);
3106 p++;
3107 q+=quantum_info->pad;
3108 }
3109 break;
3110 }
3111 break;
3112 }
3113 default:
3114 {
cristybb503372010-05-27 20:51:26 +00003115 for (x=0; x < (ssize_t) number_pixels; x+=2)
cristy3ed852e2009-09-05 21:47:34 +00003116 {
3117 for (i=0; i < 4; i++)
3118 {
3119 switch (n % 3)
3120 {
3121 case 0:
3122 {
cristyce70c172010-01-07 17:15:30 +00003123 quantum=GetRedPixelComponent(p);
cristy3ed852e2009-09-05 21:47:34 +00003124 break;
3125 }
3126 case 1:
3127 {
cristyce70c172010-01-07 17:15:30 +00003128 quantum=GetGreenPixelComponent(p);
cristy3ed852e2009-09-05 21:47:34 +00003129 break;
3130 }
3131 case 2:
3132 {
cristyce70c172010-01-07 17:15:30 +00003133 quantum=GetBluePixelComponent(p);
cristy3ed852e2009-09-05 21:47:34 +00003134 break;
3135 }
3136 }
3137 cbcr[i]=(Quantum) quantum;
3138 n++;
3139 }
3140 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
3141 cbcr[1],range),q);
3142 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
3143 cbcr[0],range),q);
3144 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
3145 cbcr[2],range),q);
3146 p++;
3147 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
3148 cbcr[3],range),q);
3149 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
3150 cbcr[0],range),q);
3151 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
3152 cbcr[2],range),q);
3153 p++;
3154 q+=quantum_info->pad;
3155 }
3156 break;
3157 }
3158 }
3159 break;
3160 }
3161 default:
3162 break;
3163 }
3164 if ((quantum_type == CbYCrQuantum) || (quantum_type == CbYCrAQuantum))
3165 {
3166 Quantum
3167 quantum;
3168
3169 register PixelPacket
cristyc47d1f82009-11-26 01:44:43 +00003170 *restrict q;
cristy3ed852e2009-09-05 21:47:34 +00003171
3172 q=GetAuthenticPixelQueue(image);
3173 if (image_view != (CacheView *) NULL)
3174 q=(PixelPacket *) GetCacheViewVirtualPixelQueue(image_view);
cristybb503372010-05-27 20:51:26 +00003175 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00003176 {
3177 quantum=q->red;
3178 q->red=q->green;
3179 q->green=quantum;
3180 q++;
3181 }
3182 }
cristya6a96a12010-08-23 13:37:35 +00003183 if ((quantum_type == RGBOQuantum) || (quantum_type == CMYKOQuantum) ||
3184 (quantum_type == BGROQuantum))
cristy3ed852e2009-09-05 21:47:34 +00003185 {
3186 register PixelPacket
cristyc47d1f82009-11-26 01:44:43 +00003187 *restrict q;
cristy3ed852e2009-09-05 21:47:34 +00003188
3189 q=GetAuthenticPixelQueue(image);
3190 if (image_view != (CacheView *) NULL)
3191 q=(PixelPacket *) GetCacheViewVirtualPixelQueue(image_view);
cristybb503372010-05-27 20:51:26 +00003192 for (x=0; x < (ssize_t) number_pixels; x++)
cristy3ed852e2009-09-05 21:47:34 +00003193 {
cristy46f08202010-01-10 04:04:21 +00003194 q->opacity=(Quantum) GetAlphaPixelComponent(q);
cristy3ed852e2009-09-05 21:47:34 +00003195 q++;
3196 }
3197 }
3198 return(extent);
3199}