blob: 876e58fffa339ac843deec91004fca051448de3e [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%
92% size_t ExportQuantumPixels(const Image *image,const CacheView *image_view,
93% const QuantumInfo *quantum_info,const QuantumType quantum_type,
94% unsigned char *pixels,ExceptionInfo *exception)
95%
96% A description of each parameter follows:
97%
98% o image: the image.
99%
100% o image_view: the image cache view.
101%
102% o quantum_info: the quantum info.
103%
104% o quantum_type: Declare which pixel components to transfer (RGB, RGBA,
105% etc).
106%
107% o pixels: The components are transferred to this buffer.
108%
109% o exception: return any errors or warnings in this structure.
110%
111*/
112
113static inline unsigned char *PopDoublePixel(const QuantumState *quantum_state,
114 const double pixel,unsigned char *pixels)
115{
116 double
117 *p;
118
119 unsigned char
120 quantum[8];
121
122 p=(double *) quantum;
cristy82b15832009-10-06 19:17:37 +0000123 *p=(double) (pixel*quantum_state->inverse_scale+quantum_state->minimum);
cristy3ed852e2009-09-05 21:47:34 +0000124 if (quantum_state->endian != LSBEndian)
125 {
126 *pixels++=quantum[7];
127 *pixels++=quantum[6];
128 *pixels++=quantum[5];
129 *pixels++=quantum[4];
130 *pixels++=quantum[3];
131 *pixels++=quantum[2];
132 *pixels++=quantum[1];
133 *pixels++=quantum[0];
134 return(pixels);
135 }
136 *pixels++=quantum[0];
137 *pixels++=quantum[1];
138 *pixels++=quantum[2];
139 *pixels++=quantum[3];
140 *pixels++=quantum[4];
141 *pixels++=quantum[5];
142 *pixels++=quantum[6];
143 *pixels++=quantum[7];
144 return(pixels);
145}
146
147static inline unsigned char *PopFloatPixel(const QuantumState *quantum_state,
148 const float pixel,unsigned char *pixels)
149{
150 float
151 *p;
152
153 unsigned char
154 quantum[4];
155
156 p=(float *) quantum;
157 *p=(float) ((double) pixel*quantum_state->inverse_scale+
cristy82b15832009-10-06 19:17:37 +0000158 quantum_state->minimum);
cristy3ed852e2009-09-05 21:47:34 +0000159 if (quantum_state->endian != LSBEndian)
160 {
161 *pixels++=quantum[3];
162 *pixels++=quantum[2];
163 *pixels++=quantum[1];
164 *pixels++=quantum[0];
165 return(pixels);
166 }
167 *pixels++=quantum[0];
168 *pixels++=quantum[1];
169 *pixels++=quantum[2];
170 *pixels++=quantum[3];
171 return(pixels);
172}
173
174static inline unsigned char *PopQuantumPixel(QuantumState *quantum_state,
175 const unsigned long depth,const QuantumAny pixel,unsigned char *pixels)
176{
177 register long
178 i;
179
180 register unsigned long
181 quantum_bits;
182
183 if (quantum_state->bits == 0UL)
184 quantum_state->bits=8UL;
185 for (i=(long) depth; i > 0L; )
186 {
187 quantum_bits=(unsigned long) i;
188 if (quantum_bits > quantum_state->bits)
189 quantum_bits=quantum_state->bits;
190 i-=quantum_bits;
191 if (quantum_state->bits == 8)
192 *pixels='\0';
193 quantum_state->bits-=quantum_bits;
194 *pixels|=(((pixel >> i) &~ ((~0UL) << quantum_bits)) <<
195 quantum_state->bits);
196 if (quantum_state->bits == 0UL)
197 {
198 pixels++;
199 quantum_state->bits=8UL;
200 }
201 }
202 return(pixels);
203}
204
205static inline unsigned char *PopQuantumLongPixel(QuantumState *quantum_state,
206 const unsigned long depth,const unsigned long pixel,unsigned char *pixels)
207{
208 register long
209 i;
210
211 unsigned long
212 quantum_bits;
213
214 if (quantum_state->bits == 0UL)
215 quantum_state->bits=32UL;
216 for (i=(long) depth; i > 0; )
217 {
218 quantum_bits=(unsigned long) i;
219 if (quantum_bits > quantum_state->bits)
220 quantum_bits=quantum_state->bits;
221 quantum_state->pixel|=(((pixel >> (depth-i)) &
222 quantum_state->mask[quantum_bits]) << (32UL-quantum_state->bits));
223 i-=quantum_bits;
224 quantum_state->bits-=quantum_bits;
225 if (quantum_state->bits == 0U)
226 {
227 pixels=PopLongPixel(quantum_state->endian,quantum_state->pixel,pixels);
228 quantum_state->pixel=0U;
229 quantum_state->bits=32UL;
230 }
231 }
232 return(pixels);
233}
234
235MagickExport size_t ExportQuantumPixels(const Image *image,
236 const CacheView *image_view,const QuantumInfo *quantum_info,
237 const QuantumType quantum_type,unsigned char *pixels,ExceptionInfo *exception)
238{
239 EndianType
240 endian;
241
242 long
243 bit;
244
245 MagickRealType
246 alpha;
247
248 MagickSizeType
249 number_pixels;
250
251 QuantumAny
252 range;
253
254 QuantumState
255 quantum_state;
256
257 register const IndexPacket
cristyaebafa22009-11-26 01:48:56 +0000258 *restrict indexes;
cristy3ed852e2009-09-05 21:47:34 +0000259
260 register const PixelPacket
cristyaebafa22009-11-26 01:48:56 +0000261 *restrict p;
cristy3ed852e2009-09-05 21:47:34 +0000262
263 register long
264 x;
265
266 register unsigned char
cristyaebafa22009-11-26 01:48:56 +0000267 *restrict q;
cristy3ed852e2009-09-05 21:47:34 +0000268
269 size_t
270 extent;
271
272 assert(image != (Image *) NULL);
273 assert(image->signature == MagickSignature);
274 if (image->debug != MagickFalse)
275 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
276 assert(quantum_info != (QuantumInfo *) NULL);
277 assert(quantum_info->signature == MagickSignature);
278 if (pixels == (unsigned char *) NULL)
279 pixels=GetQuantumPixels(quantum_info);
280 number_pixels=GetImageExtent(image);
281 p=GetVirtualPixelQueue(image);
282 indexes=GetVirtualIndexQueue(image);
283 if (image_view != (CacheView *) NULL)
284 {
285 number_pixels=GetCacheViewExtent(image_view);
286 p=GetCacheViewVirtualPixelQueue(image_view);
287 indexes=GetCacheViewVirtualIndexQueue(image_view);
288 }
289 if (quantum_info->alpha_type == AssociatedQuantumAlpha)
290 {
291 register PixelPacket
cristyc47d1f82009-11-26 01:44:43 +0000292 *restrict q;
cristy3ed852e2009-09-05 21:47:34 +0000293
294 /*
295 Associate alpha.
296 */
297 q=GetAuthenticPixelQueue(image);
298 if (image_view != (CacheView *) NULL)
299 q=(PixelPacket *) GetCacheViewVirtualPixelQueue(image_view);
300 for (x=0; x < (long) image->columns; x++)
301 {
302 alpha=QuantumScale*((double) QuantumRange-q->opacity);
cristyce70c172010-01-07 17:15:30 +0000303 q->red=ClampToQuantum(alpha*q->red);
304 q->green=ClampToQuantum(alpha*q->green);
305 q->blue=ClampToQuantum(alpha*q->blue);
cristy3ed852e2009-09-05 21:47:34 +0000306 q++;
307 }
308 }
309 if ((quantum_type == RGBOQuantum) || (quantum_type == CMYKOQuantum))
310 {
311 register PixelPacket
cristyc47d1f82009-11-26 01:44:43 +0000312 *restrict q;
cristy3ed852e2009-09-05 21:47:34 +0000313
314 q=GetAuthenticPixelQueue(image);
315 if (image_view != (CacheView *) NULL)
316 q=(PixelPacket *) GetCacheViewVirtualPixelQueue(image_view);
317 for (x=0; x < (long) number_pixels; x++)
318 {
cristy46f08202010-01-10 04:04:21 +0000319 q->opacity=(Quantum) GetAlphaPixelComponent(q);
cristy3ed852e2009-09-05 21:47:34 +0000320 q++;
321 }
322 }
323 if ((quantum_type == CbYCrQuantum) || (quantum_type == CbYCrAQuantum))
324 {
325 Quantum
326 quantum;
327
328 register PixelPacket
cristyc47d1f82009-11-26 01:44:43 +0000329 *restrict q;
cristy3ed852e2009-09-05 21:47:34 +0000330
331 q=GetAuthenticPixelQueue(image);
332 if (image_view != (CacheView *) NULL)
333 q=GetAuthenticPixelQueue(image);
334 for (x=0; x < (long) number_pixels; x++)
335 {
336 quantum=q->red;
337 q->red=q->green;
338 q->green=quantum;
339 q++;
340 }
341 }
342 x=0;
343 q=pixels;
344 InitializeQuantumState(quantum_info,image->endian,&quantum_state);
345 extent=GetQuantumExtent(image,quantum_info,quantum_type);
346 endian=quantum_state.endian;
347 switch (quantum_type)
348 {
349 case IndexQuantum:
350 {
351 if (image->storage_class != PseudoClass)
352 {
353 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
354 "ColormappedImageRequired","`%s'",image->filename);
355 return(extent);
356 }
357 switch (quantum_info->depth)
358 {
359 case 1:
360 {
361 register unsigned char
362 pixel;
363
364 for (x=((long) number_pixels-7); x > 0; x-=8)
365 {
366 pixel=(unsigned char) *indexes++;
367 *q=((pixel & 0x01) << 7);
368 pixel=(unsigned char) *indexes++;
369 *q|=((pixel & 0x01) << 6);
370 pixel=(unsigned char) *indexes++;
371 *q|=((pixel & 0x01) << 5);
372 pixel=(unsigned char) *indexes++;
373 *q|=((pixel & 0x01) << 4);
374 pixel=(unsigned char) *indexes++;
375 *q|=((pixel & 0x01) << 3);
376 pixel=(unsigned char) *indexes++;
377 *q|=((pixel & 0x01) << 2);
378 pixel=(unsigned char) *indexes++;
379 *q|=((pixel & 0x01) << 1);
380 pixel=(unsigned char) *indexes++;
381 *q|=((pixel & 0x01) << 0);
382 q++;
383 }
384 if ((number_pixels % 8) != 0)
385 {
386 *q='\0';
387 for (bit=7; bit >= (long) (8-(number_pixels % 8)); bit--)
388 {
389 pixel=(unsigned char) *indexes++;
390 *q|=((pixel & 0x01) << (unsigned char) bit);
391 }
392 q++;
393 }
394 break;
395 }
396 case 4:
397 {
398 register unsigned char
399 pixel;
400
401 for (x=0; x < (long) (number_pixels-1) ; x+=2)
402 {
403 pixel=(unsigned char) *indexes++;
404 *q=((pixel & 0xf) << 4);
405 pixel=(unsigned char) *indexes++;
406 *q|=((pixel & 0xf) << 0);
407 q++;
408 }
409 if ((number_pixels % 2) != 0)
410 {
411 pixel=(unsigned char) *indexes++;
412 *q=((pixel & 0xf) << 4);
413 q++;
414 }
415 break;
416 }
417 case 8:
418 {
419 for (x=0; x < (long) number_pixels; x++)
420 {
421 q=PopCharPixel((unsigned char) indexes[x],q);
422 q+=quantum_info->pad;
423 }
424 break;
425 }
426 case 16:
427 {
cristyc9672a92010-01-06 00:57:45 +0000428 if (quantum_info->format == FloatingPointQuantumFormat)
429 {
430 for (x=0; x < (long) number_pixels; x++)
431 {
cristy2a4d01c2010-01-10 21:14:51 +0000432 q=PopShortPixel(endian,SinglePrecisionToHalf(QuantumScale*
cristyc9672a92010-01-06 00:57:45 +0000433 indexes[x]),q);
434 q+=quantum_info->pad;
435 }
436 break;
437 }
cristy3ed852e2009-09-05 21:47:34 +0000438 for (x=0; x < (long) number_pixels; x++)
439 {
440 q=PopShortPixel(endian,(unsigned short) indexes[x],q);
441 q+=quantum_info->pad;
442 }
443 break;
444 }
445 case 32:
446 {
447 if (quantum_info->format == FloatingPointQuantumFormat)
448 {
449 for (x=0; x < (long) number_pixels; x++)
450 {
451 q=PopFloatPixel(&quantum_state,(float) indexes[x],q);
452 p++;
453 q+=quantum_info->pad;
454 }
455 break;
456 }
457 for (x=0; x < (long) number_pixels; x++)
458 {
459 q=PopLongPixel(endian,(unsigned long) indexes[x],q);
460 q+=quantum_info->pad;
461 }
462 break;
463 }
464 case 64:
465 {
466 if (quantum_info->format == FloatingPointQuantumFormat)
467 {
468 for (x=0; x < (long) number_pixels; x++)
469 {
470 q=PopDoublePixel(&quantum_state,(double) indexes[x],q);
471 p++;
472 q+=quantum_info->pad;
473 }
474 break;
475 }
476 }
477 default:
478 {
479 for (x=0; x < (long) number_pixels; x++)
480 {
481 q=PopQuantumPixel(&quantum_state,image->depth,indexes[x],q);
482 p++;
483 q+=quantum_info->pad;
484 }
485 break;
486 }
487 }
488 break;
489 }
490 case IndexAlphaQuantum:
491 {
492 if (image->storage_class != PseudoClass)
493 {
494 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
495 "ColormappedImageRequired","`%s'",image->filename);
496 return(extent);
497 }
498 switch (quantum_info->depth)
499 {
500 case 1:
501 {
502 register unsigned char
503 pixel;
504
505 for (x=((long) number_pixels-3); x > 0; x-=4)
506 {
507 pixel=(unsigned char) *indexes++;
508 *q=((pixel & 0x01) << 7);
509 pixel=(unsigned char) (p->opacity == (Quantum) TransparentOpacity ?
510 1 : 0);
511 *q|=((pixel & 0x01) << 6);
512 p++;
513 pixel=(unsigned char) *indexes++;
514 *q|=((pixel & 0x01) << 5);
515 pixel=(unsigned char) (p->opacity == (Quantum) TransparentOpacity ?
516 1 : 0);
517 *q|=((pixel & 0x01) << 4);
518 p++;
519 pixel=(unsigned char) *indexes++;
520 *q|=((pixel & 0x01) << 3);
521 pixel=(unsigned char) (p->opacity == (Quantum) TransparentOpacity ?
522 1 : 0);
523 *q|=((pixel & 0x01) << 2);
524 p++;
525 pixel=(unsigned char) *indexes++;
526 *q|=((pixel & 0x01) << 1);
527 pixel=(unsigned char) (p->opacity == (Quantum) TransparentOpacity ?
528 1 : 0);
529 *q|=((pixel & 0x01) << 0);
530 p++;
531 q++;
532 }
533 if ((number_pixels % 4) != 0)
534 {
535 *q='\0';
536 for (bit=3; bit >= (long) (4-(number_pixels % 4)); bit-=2)
537 {
538 pixel=(unsigned char) *indexes++;
cristyb32b90a2009-09-07 21:45:48 +0000539 *q|=((pixel & 0x01) << (unsigned char) (bit+4));
cristy3ed852e2009-09-05 21:47:34 +0000540 pixel=(unsigned char) (p->opacity == (Quantum)
541 TransparentOpacity ? 1 : 0);
cristyb32b90a2009-09-07 21:45:48 +0000542 *q|=((pixel & 0x01) << (unsigned char) (bit+4-1));
cristy3ed852e2009-09-05 21:47:34 +0000543 p++;
544 }
545 q++;
546 }
547 break;
548 }
549 case 4:
550 {
551 register unsigned char
552 pixel;
553
554 for (x=0; x < (long) number_pixels ; x++)
555 {
556 pixel=(unsigned char) *indexes++;
557 *q=((pixel & 0xf) << 4);
558 pixel=(unsigned char) (16*QuantumScale*((Quantum) (QuantumRange-
cristyce70c172010-01-07 17:15:30 +0000559 GetOpacityPixelComponent(p)))+0.5);
cristy3ed852e2009-09-05 21:47:34 +0000560 *q|=((pixel & 0xf) << 0);
561 p++;
562 q++;
563 }
564 break;
565 }
566 case 8:
567 {
568 register unsigned char
569 pixel;
570
571 for (x=0; x < (long) number_pixels; x++)
572 {
573 q=PopCharPixel((unsigned char) indexes[x],q);
cristyce70c172010-01-07 17:15:30 +0000574 pixel=ScaleQuantumToChar((Quantum) (QuantumRange-
575 GetOpacityPixelComponent(p)));
cristy3ed852e2009-09-05 21:47:34 +0000576 q=PopCharPixel(pixel,q);
577 p++;
578 q+=quantum_info->pad;
579 }
580 break;
581 }
582 case 16:
583 {
584 register unsigned short
585 pixel;
586
cristyc9672a92010-01-06 00:57:45 +0000587 if (quantum_info->format == FloatingPointQuantumFormat)
588 {
589 for (x=0; x < (long) number_pixels; x++)
590 {
591 q=PopShortPixel(endian,(unsigned short) indexes[x],q);
cristy2a4d01c2010-01-10 21:14:51 +0000592 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +0000593 GetAlphaPixelComponent(p));
cristyc9672a92010-01-06 00:57:45 +0000594 q=PopShortPixel(endian,pixel,q);
595 p++;
596 q+=quantum_info->pad;
597 }
598 break;
599 }
cristy3ed852e2009-09-05 21:47:34 +0000600 for (x=0; x < (long) number_pixels; x++)
601 {
602 q=PopShortPixel(endian,(unsigned short) indexes[x],q);
cristyce70c172010-01-07 17:15:30 +0000603 pixel=ScaleQuantumToShort((Quantum) (QuantumRange-
604 GetOpacityPixelComponent(p)));
cristy3ed852e2009-09-05 21:47:34 +0000605 q=PopShortPixel(endian,pixel,q);
606 p++;
607 q+=quantum_info->pad;
608 }
609 break;
610 }
611 case 32:
612 {
613 register unsigned long
614 pixel;
615
616 if (quantum_info->format == FloatingPointQuantumFormat)
617 {
618 for (x=0; x < (long) number_pixels; x++)
619 {
620 float
621 pixel;
622
623 q=PopFloatPixel(&quantum_state,(float) indexes[x],q);
cristy46f08202010-01-10 04:04:21 +0000624 pixel=(float) (GetAlphaPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +0000625 q=PopFloatPixel(&quantum_state,pixel,q);
626 p++;
627 q+=quantum_info->pad;
628 }
629 break;
630 }
631 for (x=0; x < (long) number_pixels; x++)
632 {
633 q=PopLongPixel(endian,(unsigned long) indexes[x],q);
cristyce70c172010-01-07 17:15:30 +0000634 pixel=ScaleQuantumToLong((Quantum) (QuantumRange-
635 GetOpacityPixelComponent(p)));
cristy3ed852e2009-09-05 21:47:34 +0000636 q=PopLongPixel(endian,pixel,q);
637 p++;
638 q+=quantum_info->pad;
639 }
640 break;
641 }
642 case 64:
643 {
644 if (quantum_info->format == FloatingPointQuantumFormat)
645 {
646 for (x=0; x < (long) number_pixels; x++)
647 {
648 double
649 pixel;
650
651 q=PopDoublePixel(&quantum_state,(double) indexes[x],q);
cristy46f08202010-01-10 04:04:21 +0000652 pixel=(double) (GetAlphaPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +0000653 q=PopDoublePixel(&quantum_state,pixel,q);
654 p++;
655 q+=quantum_info->pad;
656 }
657 break;
658 }
659 }
660 default:
661 {
662 range=GetQuantumRange(image->depth);
663 for (x=0; x < (long) number_pixels; x++)
664 {
665 q=PopQuantumPixel(&quantum_state,image->depth,indexes[x],q);
666 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
cristy46f08202010-01-10 04:04:21 +0000667 (Quantum) (GetAlphaPixelComponent(p)),range),q);
cristy3ed852e2009-09-05 21:47:34 +0000668 p++;
669 q+=quantum_info->pad;
670 }
671 break;
672 }
673 }
674 break;
675 }
676 case GrayQuantum:
677 {
678 switch (quantum_info->depth)
679 {
680 case 1:
681 {
682 register Quantum
683 threshold;
684
685 register unsigned char
686 black,
687 white;
688
689 black=0x00;
690 white=0x01;
691 if (quantum_info->min_is_white != MagickFalse)
692 {
693 black=0x01;
694 white=0x00;
695 }
696 threshold=(Quantum) (QuantumRange/2);
697 for (x=((long) number_pixels-7); x > 0; x-=8)
698 {
699 *q='\0';
700 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 7;
701 p++;
702 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 6;
703 p++;
704 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 5;
705 p++;
706 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 4;
707 p++;
708 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 3;
709 p++;
710 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 2;
711 p++;
712 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 1;
713 p++;
714 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 0;
715 p++;
716 q++;
717 }
718 if ((number_pixels % 8) != 0)
719 {
720 *q='\0';
721 for (bit=7; bit >= (long) (8-(number_pixels % 8)); bit--)
722 {
723 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) <<
724 bit;
725 p++;
726 }
727 q++;
728 }
729 break;
730 }
731 case 4:
732 {
733 register unsigned char
734 pixel;
735
736 for (x=0; x < (long) (number_pixels-1) ; x+=2)
737 {
738 pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
739 *q=(((pixel >> 4) & 0xf) << 4);
740 p++;
741 pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
742 *q|=pixel >> 4;
743 p++;
744 q++;
745 }
746 if ((number_pixels % 2) != 0)
747 {
748 pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
749 *q=(((pixel >> 4) & 0xf) << 4);
750 p++;
751 q++;
752 }
753 break;
754 }
755 case 8:
756 {
757 register unsigned char
758 pixel;
759
760 for (x=0; x < (long) number_pixels; x++)
761 {
762 pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
763 q=PopCharPixel(pixel,q);
764 p++;
765 q+=quantum_info->pad;
766 }
767 break;
768 }
769 case 10:
770 {
771 register unsigned short
772 pixel;
773
774 range=GetQuantumRange(image->depth);
775 if (quantum_info->pack == MagickFalse)
776 {
777 for (x=0; x < (long) number_pixels; x++)
778 {
779 pixel=ScaleQuantumToShort(PixelIntensityToQuantum(p));
780 q=PopShortPixel(endian,(unsigned short) ScaleQuantumToAny(
781 (Quantum) pixel,range),q);
782 p++;
783 q+=quantum_info->pad;
784 }
785 break;
786 }
787 for (x=0; x < (long) number_pixels; x++)
788 {
789 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
790 PixelIntensityToQuantum(p),range),q);
791 p++;
792 q+=quantum_info->pad;
793 }
794 break;
795 }
796 case 12:
797 {
798 register unsigned short
799 pixel;
800
801 range=GetQuantumRange(image->depth);
802 if (quantum_info->pack == MagickFalse)
803 {
804 for (x=0; x < (long) number_pixels; x++)
805 {
806 pixel=ScaleQuantumToShort(PixelIntensityToQuantum(p));
807 q=PopShortPixel(endian,(unsigned short) (pixel >> 4),q);
808 p++;
809 q+=quantum_info->pad;
810 }
811 break;
812 }
813 for (x=0; x < (long) number_pixels; x++)
814 {
815 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
816 PixelIntensityToQuantum(p),range),q);
817 p++;
818 q+=quantum_info->pad;
819 }
820 break;
821 }
822 case 16:
823 {
824 register unsigned short
825 pixel;
826
cristyc9672a92010-01-06 00:57:45 +0000827 if (quantum_info->format == FloatingPointQuantumFormat)
828 {
829 for (x=0; x < (long) number_pixels; x++)
830 {
cristy2a4d01c2010-01-10 21:14:51 +0000831 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +0000832 PixelIntensityToQuantum(p));
cristyc9672a92010-01-06 00:57:45 +0000833 q=PopShortPixel(endian,pixel,q);
834 p++;
835 q+=quantum_info->pad;
836 }
837 break;
838 }
cristy3ed852e2009-09-05 21:47:34 +0000839 for (x=0; x < (long) number_pixels; x++)
840 {
841 pixel=ScaleQuantumToShort(PixelIntensityToQuantum(p));
842 q=PopShortPixel(endian,pixel,q);
843 p++;
844 q+=quantum_info->pad;
845 }
846 break;
847 }
848 case 32:
849 {
850 register unsigned long
851 pixel;
852
853 if (quantum_info->format == FloatingPointQuantumFormat)
854 {
855 for (x=0; x < (long) number_pixels; x++)
856 {
857 float
858 pixel;
859
860 pixel=(float) PixelIntensityToQuantum(p);
861 q=PopFloatPixel(&quantum_state,pixel,q);
862 p++;
863 q+=quantum_info->pad;
864 }
865 break;
866 }
867 for (x=0; x < (long) number_pixels; x++)
868 {
869 pixel=ScaleQuantumToLong(PixelIntensityToQuantum(p));
870 q=PopLongPixel(endian,pixel,q);
871 p++;
872 q+=quantum_info->pad;
873 }
874 break;
875 }
876 case 64:
877 {
878 if (quantum_info->format == FloatingPointQuantumFormat)
879 {
880 for (x=0; x < (long) number_pixels; x++)
881 {
882 double
883 pixel;
884
885 pixel=(double) PixelIntensityToQuantum(p);
886 q=PopDoublePixel(&quantum_state,pixel,q);
887 p++;
888 q+=quantum_info->pad;
889 }
890 break;
891 }
892 }
893 default:
894 {
895 range=GetQuantumRange(image->depth);
896 for (x=0; x < (long) number_pixels; x++)
897 {
898 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
899 PixelIntensityToQuantum(p),range),q);
900 p++;
901 q+=quantum_info->pad;
902 }
903 break;
904 }
905 }
906 break;
907 }
908 case GrayAlphaQuantum:
909 {
910 switch (quantum_info->depth)
911 {
912 case 1:
913 {
914 register Quantum
915 threshold;
916
917 register unsigned char
918 black,
919 pixel,
920 white;
921
922 black=0x00;
923 white=0x01;
924 if (quantum_info->min_is_white == MagickFalse)
925 {
926 black=0x01;
927 white=0x00;
928 }
929 threshold=(Quantum) (QuantumRange/2);
930 for (x=((long) number_pixels-3); x > 0; x-=4)
931 {
932 *q='\0';
933 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 7;
934 pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 : 0x01);
935 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 6);
936 p++;
937 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 5;
938 pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 : 0x01);
939 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 4);
940 p++;
941 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 3;
942 pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 : 0x01);
943 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 2);
944 p++;
945 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 1;
946 pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 : 0x01);
947 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 0);
948 p++;
949 q++;
950 }
951 if ((number_pixels % 4) != 0)
952 {
953 *q='\0';
954 for (bit=3; bit >= (long) (4-(number_pixels % 4)); bit-=2)
955 {
956 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) <<
cristyb32b90a2009-09-07 21:45:48 +0000957 (bit+4);
cristy3ed852e2009-09-05 21:47:34 +0000958 pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 :
959 0x01);
960 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << (unsigned char)
cristyb32b90a2009-09-07 21:45:48 +0000961 (bit+4-1));
cristy3ed852e2009-09-05 21:47:34 +0000962 p++;
963 }
964 q++;
965 }
966 break;
967 }
968 case 4:
969 {
970 register unsigned char
971 pixel;
972
973 for (x=0; x < (long) number_pixels ; x++)
974 {
975 pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
976 *q=(((pixel >> 4) & 0xf) << 4);
977 pixel=(unsigned char) (16*QuantumScale*((Quantum) (QuantumRange-
cristyce70c172010-01-07 17:15:30 +0000978 GetOpacityPixelComponent(p)))+0.5);
cristy3ed852e2009-09-05 21:47:34 +0000979 *q|=pixel & 0xf;
980 p++;
981 q++;
982 }
983 break;
984 }
985 case 8:
986 {
987 register unsigned char
988 pixel;
989
990 for (x=0; x < (long) number_pixels; x++)
991 {
992 pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
993 q=PopCharPixel(pixel,q);
cristyce70c172010-01-07 17:15:30 +0000994 pixel=ScaleQuantumToChar((Quantum) (QuantumRange-
995 GetOpacityPixelComponent(p)));
cristy3ed852e2009-09-05 21:47:34 +0000996 q=PopCharPixel(pixel,q);
997 p++;
998 q+=quantum_info->pad;
999 }
1000 break;
1001 }
1002 case 16:
1003 {
1004 register unsigned short
1005 pixel;
1006
cristyc9672a92010-01-06 00:57:45 +00001007 if (quantum_info->format == FloatingPointQuantumFormat)
1008 {
1009 for (x=0; x < (long) number_pixels; x++)
1010 {
cristy2a4d01c2010-01-10 21:14:51 +00001011 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +00001012 PixelIntensityToQuantum(p));
cristyc9672a92010-01-06 00:57:45 +00001013 q=PopShortPixel(endian,pixel,q);
cristy2a4d01c2010-01-10 21:14:51 +00001014 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +00001015 GetAlphaPixelComponent(p));
cristyc9672a92010-01-06 00:57:45 +00001016 q=PopShortPixel(endian,pixel,q);
1017 p++;
1018 q+=quantum_info->pad;
1019 }
1020 break;
1021 }
cristy3ed852e2009-09-05 21:47:34 +00001022 for (x=0; x < (long) number_pixels; x++)
1023 {
1024 pixel=ScaleQuantumToShort(PixelIntensityToQuantum(p));
1025 q=PopShortPixel(endian,pixel,q);
cristyce70c172010-01-07 17:15:30 +00001026 pixel=ScaleQuantumToShort((Quantum) (QuantumRange-
1027 GetOpacityPixelComponent(p)));
cristy3ed852e2009-09-05 21:47:34 +00001028 q=PopShortPixel(endian,pixel,q);
1029 p++;
1030 q+=quantum_info->pad;
1031 }
1032 break;
1033 }
1034 case 32:
1035 {
1036 register unsigned long
1037 pixel;
1038
1039 if (quantum_info->format == FloatingPointQuantumFormat)
1040 {
1041 for (x=0; x < (long) number_pixels; x++)
1042 {
1043 float
1044 pixel;
1045
1046 pixel=(float) PixelIntensityToQuantum(p);
1047 q=PopFloatPixel(&quantum_state,pixel,q);
cristy46f08202010-01-10 04:04:21 +00001048 pixel=(float) (GetAlphaPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00001049 q=PopFloatPixel(&quantum_state,pixel,q);
1050 p++;
1051 q+=quantum_info->pad;
1052 }
1053 break;
1054 }
1055 for (x=0; x < (long) number_pixels; x++)
1056 {
1057 pixel=ScaleQuantumToLong(PixelIntensityToQuantum(p));
1058 q=PopLongPixel(endian,pixel,q);
cristyce70c172010-01-07 17:15:30 +00001059 pixel=ScaleQuantumToLong((Quantum) (QuantumRange-
1060 GetOpacityPixelComponent(p)));
cristy3ed852e2009-09-05 21:47:34 +00001061 q=PopLongPixel(endian,pixel,q);
1062 p++;
1063 q+=quantum_info->pad;
1064 }
1065 break;
1066 }
1067 case 64:
1068 {
1069 if (quantum_info->format == FloatingPointQuantumFormat)
1070 {
1071 for (x=0; x < (long) number_pixels; x++)
1072 {
1073 double
1074 pixel;
1075
1076 pixel=(double) PixelIntensityToQuantum(p);
1077 q=PopDoublePixel(&quantum_state,pixel,q);
cristy46f08202010-01-10 04:04:21 +00001078 pixel=(double) (GetAlphaPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00001079 q=PopDoublePixel(&quantum_state,pixel,q);
1080 p++;
1081 q+=quantum_info->pad;
1082 }
1083 break;
1084 }
1085 }
1086 default:
1087 {
1088 range=GetQuantumRange(image->depth);
1089 for (x=0; x < (long) number_pixels; x++)
1090 {
1091 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1092 PixelIntensityToQuantum(p),range),q);
1093 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
cristy46f08202010-01-10 04:04:21 +00001094 (Quantum) (GetAlphaPixelComponent(p)),range),q);
cristy3ed852e2009-09-05 21:47:34 +00001095 p++;
1096 q+=quantum_info->pad;
1097 }
1098 break;
1099 }
1100 }
1101 break;
1102 }
1103 case RedQuantum:
1104 case CyanQuantum:
1105 {
1106 switch (quantum_info->depth)
1107 {
1108 case 8:
1109 {
1110 register unsigned char
1111 pixel;
1112
1113 for (x=0; x < (long) number_pixels; x++)
1114 {
cristyce70c172010-01-07 17:15:30 +00001115 pixel=ScaleQuantumToChar(GetRedPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00001116 q=PopCharPixel(pixel,q);
1117 p++;
1118 q+=quantum_info->pad;
1119 }
1120 break;
1121 }
1122 case 16:
1123 {
1124 register unsigned short
1125 pixel;
1126
cristyc9672a92010-01-06 00:57:45 +00001127 if (quantum_info->format == FloatingPointQuantumFormat)
1128 {
1129 for (x=0; x < (long) number_pixels; x++)
1130 {
cristy2a4d01c2010-01-10 21:14:51 +00001131 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +00001132 GetRedPixelComponent(p));
cristyc9672a92010-01-06 00:57:45 +00001133 q=PopShortPixel(endian,pixel,q);
1134 p++;
1135 q+=quantum_info->pad;
1136 }
1137 break;
1138 }
cristy3ed852e2009-09-05 21:47:34 +00001139 for (x=0; x < (long) number_pixels; x++)
1140 {
cristyce70c172010-01-07 17:15:30 +00001141 pixel=ScaleQuantumToShort(GetRedPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00001142 q=PopShortPixel(endian,pixel,q);
1143 p++;
1144 q+=quantum_info->pad;
1145 }
1146 break;
1147 }
1148 case 32:
1149 {
1150 register unsigned long
1151 pixel;
1152
1153 if (quantum_info->format == FloatingPointQuantumFormat)
1154 {
1155 for (x=0; x < (long) number_pixels; x++)
1156 {
1157 q=PopFloatPixel(&quantum_state,(float) p->red,q);
1158 p++;
1159 q+=quantum_info->pad;
1160 }
1161 break;
1162 }
1163 for (x=0; x < (long) number_pixels; x++)
1164 {
cristyce70c172010-01-07 17:15:30 +00001165 pixel=ScaleQuantumToLong(GetRedPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00001166 q=PopLongPixel(endian,pixel,q);
1167 p++;
1168 q+=quantum_info->pad;
1169 }
1170 break;
1171 }
1172 case 64:
1173 {
1174 if (quantum_info->format == FloatingPointQuantumFormat)
1175 {
1176 for (x=0; x < (long) number_pixels; x++)
1177 {
1178 q=PopDoublePixel(&quantum_state,(double) p->red,q);
1179 p++;
1180 q+=quantum_info->pad;
1181 }
1182 break;
1183 }
1184 }
1185 default:
1186 {
1187 range=GetQuantumRange(image->depth);
1188 for (x=0; x < (long) number_pixels; x++)
1189 {
1190 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1191 p->red,range),q);
1192 p++;
1193 q+=quantum_info->pad;
1194 }
1195 break;
1196 }
1197 }
1198 break;
1199 }
1200 case GreenQuantum:
1201 case MagentaQuantum:
1202 {
1203 switch (quantum_info->depth)
1204 {
1205 case 8:
1206 {
1207 register unsigned char
1208 pixel;
1209
1210 for (x=0; x < (long) number_pixels; x++)
1211 {
cristyce70c172010-01-07 17:15:30 +00001212 pixel=ScaleQuantumToChar(GetGreenPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00001213 q=PopCharPixel(pixel,q);
1214 p++;
1215 q+=quantum_info->pad;
1216 }
1217 break;
1218 }
1219 case 16:
1220 {
1221 register unsigned short
1222 pixel;
1223
cristyc9672a92010-01-06 00:57:45 +00001224 if (quantum_info->format == FloatingPointQuantumFormat)
1225 {
1226 for (x=0; x < (long) number_pixels; x++)
1227 {
cristy2a4d01c2010-01-10 21:14:51 +00001228 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +00001229 GetGreenPixelComponent(p));
cristyc9672a92010-01-06 00:57:45 +00001230 q=PopShortPixel(endian,pixel,q);
1231 p++;
1232 q+=quantum_info->pad;
1233 }
1234 break;
1235 }
cristy3ed852e2009-09-05 21:47:34 +00001236 for (x=0; x < (long) number_pixels; x++)
1237 {
cristyce70c172010-01-07 17:15:30 +00001238 pixel=ScaleQuantumToShort(GetGreenPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00001239 q=PopShortPixel(endian,pixel,q);
1240 p++;
1241 q+=quantum_info->pad;
1242 }
1243 break;
1244 }
1245 case 32:
1246 {
1247 register unsigned long
1248 pixel;
1249
1250 if (quantum_info->format == FloatingPointQuantumFormat)
1251 {
1252 for (x=0; x < (long) number_pixels; x++)
1253 {
1254 q=PopFloatPixel(&quantum_state,(float) p->green,q);
1255 p++;
1256 q+=quantum_info->pad;
1257 }
1258 break;
1259 }
1260 for (x=0; x < (long) number_pixels; x++)
1261 {
cristyce70c172010-01-07 17:15:30 +00001262 pixel=ScaleQuantumToLong(GetGreenPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00001263 q=PopLongPixel(endian,pixel,q);
1264 p++;
1265 q+=quantum_info->pad;
1266 }
1267 break;
1268 }
1269 case 64:
1270 {
1271 if (quantum_info->format == FloatingPointQuantumFormat)
1272 {
1273 for (x=0; x < (long) number_pixels; x++)
1274 {
1275 q=PopDoublePixel(&quantum_state,(double) p->green,q);
1276 p++;
1277 q+=quantum_info->pad;
1278 }
1279 break;
1280 }
1281 }
1282 default:
1283 {
1284 range=GetQuantumRange(image->depth);
1285 for (x=0; x < (long) number_pixels; x++)
1286 {
1287 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1288 p->green,range),q);
1289 p++;
1290 q+=quantum_info->pad;
1291 }
1292 break;
1293 }
1294 }
1295 break;
1296 }
1297 case BlueQuantum:
1298 case YellowQuantum:
1299 {
1300 switch (quantum_info->depth)
1301 {
1302 case 8:
1303 {
1304 register unsigned char
1305 pixel;
1306
1307 for (x=0; x < (long) number_pixels; x++)
1308 {
cristyce70c172010-01-07 17:15:30 +00001309 pixel=ScaleQuantumToChar(GetBluePixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00001310 q=PopCharPixel(pixel,q);
1311 p++;
1312 q+=quantum_info->pad;
1313 }
1314 break;
1315 }
1316 case 16:
1317 {
1318 register unsigned short
1319 pixel;
1320
cristyc9672a92010-01-06 00:57:45 +00001321 if (quantum_info->format == FloatingPointQuantumFormat)
1322 {
1323 for (x=0; x < (long) number_pixels; x++)
1324 {
cristy2a4d01c2010-01-10 21:14:51 +00001325 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +00001326 GetBluePixelComponent(p));
cristyc9672a92010-01-06 00:57:45 +00001327 q=PopShortPixel(endian,pixel,q);
1328 p++;
1329 q+=quantum_info->pad;
1330 }
1331 break;
1332 }
cristy3ed852e2009-09-05 21:47:34 +00001333 for (x=0; x < (long) number_pixels; x++)
1334 {
cristyce70c172010-01-07 17:15:30 +00001335 pixel=ScaleQuantumToShort(GetBluePixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00001336 q=PopShortPixel(endian,pixel,q);
1337 p++;
1338 q+=quantum_info->pad;
1339 }
1340 break;
1341 }
1342 case 32:
1343 {
1344 register unsigned long
1345 pixel;
1346
1347 if (quantum_info->format == FloatingPointQuantumFormat)
1348 {
1349 for (x=0; x < (long) number_pixels; x++)
1350 {
1351 q=PopFloatPixel(&quantum_state,(float) p->blue,q);
1352 p++;
1353 q+=quantum_info->pad;
1354 }
1355 break;
1356 }
1357 for (x=0; x < (long) number_pixels; x++)
1358 {
cristyce70c172010-01-07 17:15:30 +00001359 pixel=ScaleQuantumToLong(GetBluePixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00001360 q=PopLongPixel(endian,pixel,q);
1361 p++;
1362 q+=quantum_info->pad;
1363 }
1364 break;
1365 }
1366 case 64:
1367 {
1368 if (quantum_info->format == FloatingPointQuantumFormat)
1369 {
1370 for (x=0; x < (long) number_pixels; x++)
1371 {
1372 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
1373 p++;
1374 q+=quantum_info->pad;
1375 }
1376 break;
1377 }
1378 }
1379 default:
1380 {
1381 range=GetQuantumRange(image->depth);
1382 for (x=0; x < (long) number_pixels; x++)
1383 {
1384 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1385 p->blue,range),q);
1386 p++;
1387 q+=quantum_info->pad;
1388 }
1389 break;
1390 }
1391 }
1392 break;
1393 }
1394 case AlphaQuantum:
1395 {
1396 switch (quantum_info->depth)
1397 {
1398 case 8:
1399 {
1400 register unsigned char
1401 pixel;
1402
1403 for (x=0; x < (long) number_pixels; x++)
1404 {
cristyce70c172010-01-07 17:15:30 +00001405 pixel=ScaleQuantumToChar((Quantum) (QuantumRange-
1406 GetOpacityPixelComponent(p)));
cristy3ed852e2009-09-05 21:47:34 +00001407 q=PopCharPixel(pixel,q);
1408 p++;
1409 q+=quantum_info->pad;
1410 }
1411 break;
1412 }
1413 case 16:
1414 {
1415 register unsigned short
1416 pixel;
1417
cristyc9672a92010-01-06 00:57:45 +00001418 if (quantum_info->format == FloatingPointQuantumFormat)
1419 {
1420 for (x=0; x < (long) number_pixels; x++)
1421 {
cristy2a4d01c2010-01-10 21:14:51 +00001422 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +00001423 GetAlphaPixelComponent(p));
cristyc9672a92010-01-06 00:57:45 +00001424 q=PopShortPixel(endian,pixel,q);
1425 p++;
1426 q+=quantum_info->pad;
1427 }
1428 break;
1429 }
cristy3ed852e2009-09-05 21:47:34 +00001430 for (x=0; x < (long) number_pixels; x++)
1431 {
cristyce70c172010-01-07 17:15:30 +00001432 pixel=ScaleQuantumToShort((Quantum) (QuantumRange-
1433 GetOpacityPixelComponent(p)));
cristy3ed852e2009-09-05 21:47:34 +00001434 q=PopShortPixel(endian,pixel,q);
1435 p++;
1436 q+=quantum_info->pad;
1437 }
1438 break;
1439 }
1440 case 32:
1441 {
1442 register unsigned long
1443 pixel;
1444
1445 if (quantum_info->format == FloatingPointQuantumFormat)
1446 {
1447 for (x=0; x < (long) number_pixels; x++)
1448 {
1449 float
1450 pixel;
1451
cristy46f08202010-01-10 04:04:21 +00001452 pixel=(float) (GetAlphaPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00001453 q=PopFloatPixel(&quantum_state,pixel,q);
1454 p++;
1455 q+=quantum_info->pad;
1456 }
1457 break;
1458 }
1459 for (x=0; x < (long) number_pixels; x++)
1460 {
cristyce70c172010-01-07 17:15:30 +00001461 pixel=ScaleQuantumToLong((Quantum) (QuantumRange-
1462 GetOpacityPixelComponent(p)));
cristy3ed852e2009-09-05 21:47:34 +00001463 q=PopLongPixel(endian,pixel,q);
1464 p++;
1465 q+=quantum_info->pad;
1466 }
1467 break;
1468 }
1469 case 64:
1470 {
1471 if (quantum_info->format == FloatingPointQuantumFormat)
1472 {
1473 for (x=0; x < (long) number_pixels; x++)
1474 {
1475 double
1476 pixel;
1477
cristy46f08202010-01-10 04:04:21 +00001478 pixel=(double) (GetAlphaPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00001479 q=PopDoublePixel(&quantum_state,pixel,q);
1480 p++;
1481 q+=quantum_info->pad;
1482 }
1483 break;
1484 }
1485 }
1486 default:
1487 {
1488 range=GetQuantumRange(image->depth);
1489 for (x=0; x < (long) number_pixels; x++)
1490 {
1491 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
cristy46f08202010-01-10 04:04:21 +00001492 (Quantum) (GetAlphaPixelComponent(p)),range),q);
cristy3ed852e2009-09-05 21:47:34 +00001493 p++;
1494 q+=quantum_info->pad;
1495 }
1496 break;
1497 }
1498 }
1499 break;
1500 }
1501 case OpacityQuantum:
1502 {
1503 switch (quantum_info->depth)
1504 {
1505 case 8:
1506 {
1507 register unsigned char
1508 pixel;
1509
1510 for (x=0; x < (long) number_pixels; x++)
1511 {
cristyce70c172010-01-07 17:15:30 +00001512 pixel=ScaleQuantumToChar(GetOpacityPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00001513 q=PopCharPixel(pixel,q);
1514 p++;
1515 q+=quantum_info->pad;
1516 }
1517 break;
1518 }
1519 case 16:
1520 {
1521 register unsigned short
1522 pixel;
1523
cristyc9672a92010-01-06 00:57:45 +00001524 if (quantum_info->format == FloatingPointQuantumFormat)
1525 {
1526 for (x=0; x < (long) number_pixels; x++)
1527 {
cristy2a4d01c2010-01-10 21:14:51 +00001528 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +00001529 GetOpacityPixelComponent(p));
cristyc9672a92010-01-06 00:57:45 +00001530 q=PopShortPixel(endian,pixel,q);
1531 p++;
1532 q+=quantum_info->pad;
1533 }
1534 break;
1535 }
cristy3ed852e2009-09-05 21:47:34 +00001536 for (x=0; x < (long) number_pixels; x++)
1537 {
cristyce70c172010-01-07 17:15:30 +00001538 pixel=ScaleQuantumToShort(GetOpacityPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00001539 q=PopShortPixel(endian,pixel,q);
1540 p++;
1541 q+=quantum_info->pad;
1542 }
1543 break;
1544 }
1545 case 32:
1546 {
1547 register unsigned long
1548 pixel;
1549
1550 if (quantum_info->format == FloatingPointQuantumFormat)
1551 {
1552 for (x=0; x < (long) number_pixels; x++)
1553 {
1554 q=PopFloatPixel(&quantum_state,(float) p->opacity,q);
1555 p++;
1556 q+=quantum_info->pad;
1557 }
1558 break;
1559 }
1560 for (x=0; x < (long) number_pixels; x++)
1561 {
cristyce70c172010-01-07 17:15:30 +00001562 pixel=ScaleQuantumToLong(GetOpacityPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00001563 q=PopLongPixel(endian,pixel,q);
1564 p++;
1565 q+=quantum_info->pad;
1566 }
1567 break;
1568 }
1569 case 64:
1570 {
1571 if (quantum_info->format == FloatingPointQuantumFormat)
1572 {
1573 for (x=0; x < (long) number_pixels; x++)
1574 {
1575 q=PopDoublePixel(&quantum_state,(double) p->opacity,q);
1576 p++;
1577 q+=quantum_info->pad;
1578 }
1579 break;
1580 }
1581 }
1582 default:
1583 {
1584 range=GetQuantumRange(image->depth);
1585 for (x=0; x < (long) number_pixels; x++)
1586 {
1587 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1588 p->opacity,range),q);
1589 p++;
1590 q+=quantum_info->pad;
1591 }
1592 break;
1593 }
1594 }
1595 break;
1596 }
1597 case BlackQuantum:
1598 {
1599 if (image->colorspace != CMYKColorspace)
1600 {
1601 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1602 "ColorSeparatedImageRequired","`%s'",image->filename);
1603 return(extent);
1604 }
1605 switch (quantum_info->depth)
1606 {
1607 case 8:
1608 {
1609 register unsigned char
1610 pixel;
1611
1612 for (x=0; x < (long) number_pixels; x++)
1613 {
1614 pixel=ScaleQuantumToChar(indexes[x]);
1615 q=PopCharPixel(pixel,q);
1616 p++;
1617 q+=quantum_info->pad;
1618 }
1619 break;
1620 }
1621 case 16:
1622 {
1623 register unsigned short
1624 pixel;
1625
cristyc9672a92010-01-06 00:57:45 +00001626 if (quantum_info->format == FloatingPointQuantumFormat)
1627 {
1628 for (x=0; x < (long) number_pixels; x++)
1629 {
cristy2a4d01c2010-01-10 21:14:51 +00001630 pixel=SinglePrecisionToHalf(QuantumScale*indexes[x]);
cristyc9672a92010-01-06 00:57:45 +00001631 q=PopShortPixel(endian,pixel,q);
1632 p++;
1633 q+=quantum_info->pad;
1634 }
1635 break;
1636 }
cristy3ed852e2009-09-05 21:47:34 +00001637 for (x=0; x < (long) number_pixels; x++)
1638 {
1639 pixel=ScaleQuantumToShort(indexes[x]);
1640 q=PopShortPixel(endian,pixel,q);
1641 p++;
1642 q+=quantum_info->pad;
1643 }
1644 break;
1645 }
1646 case 32:
1647 {
1648 register unsigned long
1649 pixel;
1650
1651 if (quantum_info->format == FloatingPointQuantumFormat)
1652 {
1653 for (x=0; x < (long) number_pixels; x++)
1654 {
1655 q=PopFloatPixel(&quantum_state,(float) indexes[x],q);
1656 p++;
1657 q+=quantum_info->pad;
1658 }
1659 break;
1660 }
1661 for (x=0; x < (long) number_pixels; x++)
1662 {
1663 pixel=ScaleQuantumToLong(indexes[x]);
1664 q=PopLongPixel(endian,pixel,q);
1665 p++;
1666 q+=quantum_info->pad;
1667 }
1668 break;
1669 }
1670 case 64:
1671 {
1672 if (quantum_info->format == FloatingPointQuantumFormat)
1673 {
1674 for (x=0; x < (long) number_pixels; x++)
1675 {
1676 q=PopDoublePixel(&quantum_state,(double) indexes[x],q);
1677 p++;
1678 q+=quantum_info->pad;
1679 }
1680 break;
1681 }
1682 }
1683 default:
1684 {
1685 range=GetQuantumRange(image->depth);
1686 for (x=0; x < (long) number_pixels; x++)
1687 {
1688 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1689 (Quantum) indexes[x],range),q);
1690 p++;
1691 q+=quantum_info->pad;
1692 }
1693 break;
1694 }
1695 }
1696 break;
1697 }
1698 case RGBQuantum:
1699 case CbYCrQuantum:
1700 {
1701 switch (quantum_info->depth)
1702 {
1703 case 8:
1704 {
1705 for (x=0; x < (long) number_pixels; x++)
1706 {
cristyce70c172010-01-07 17:15:30 +00001707 q=PopCharPixel(ScaleQuantumToChar(GetRedPixelComponent(p)),q);
1708 q=PopCharPixel(ScaleQuantumToChar(GetGreenPixelComponent(p)),q);
1709 q=PopCharPixel(ScaleQuantumToChar(GetBluePixelComponent(p)),q);
cristy3ed852e2009-09-05 21:47:34 +00001710 p++;
1711 q+=quantum_info->pad;
1712 }
1713 break;
1714 }
1715 case 10:
1716 {
1717 register unsigned long
1718 pixel;
1719
1720 range=GetQuantumRange(image->depth);
1721 if (quantum_info->pack == MagickFalse)
1722 {
1723 for (x=0; x < (long) number_pixels; x++)
1724 {
1725 pixel=(unsigned long) (ScaleQuantumToAny(p->red,range) << 22 |
1726 ScaleQuantumToAny(p->green,range) << 12 |
1727 ScaleQuantumToAny(p->blue,range) << 2);
1728 q=PopLongPixel(endian,pixel,q);
1729 p++;
1730 q+=quantum_info->pad;
1731 }
1732 break;
1733 }
1734 if (quantum_info->quantum == 32UL)
1735 {
1736 for (x=0; x < (long) number_pixels; x++)
1737 {
1738 pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
1739 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
1740 pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
1741 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
1742 pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
1743 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
1744 p++;
1745 q+=quantum_info->pad;
1746 }
1747 break;
1748 }
1749 for (x=0; x < (long) number_pixels; x++)
1750 {
1751 pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
1752 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
1753 pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
1754 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
1755 pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
1756 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
1757 p++;
1758 q+=quantum_info->pad;
1759 }
1760 break;
1761 }
1762 case 12:
1763 {
1764 register unsigned long
1765 pixel;
1766
1767 range=GetQuantumRange(image->depth);
1768 if (quantum_info->pack == MagickFalse)
1769 {
1770 for (x=0; x < (long) (3*number_pixels-1); x+=2)
1771 {
1772 switch (x % 3)
1773 {
1774 default:
1775 case 0:
1776 {
1777 pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
1778 break;
1779 }
1780 case 1:
1781 {
1782 pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
1783 break;
1784 }
1785 case 2:
1786 {
1787 pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
1788 p++;
1789 break;
1790 }
1791 }
1792 q=PopShortPixel(endian,(unsigned short) (pixel << 4),q);
1793 switch ((x+1) % 3)
1794 {
1795 default:
1796 case 0:
1797 {
1798 pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
1799 break;
1800 }
1801 case 1:
1802 {
1803 pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
1804 break;
1805 }
1806 case 2:
1807 {
1808 pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
1809 p++;
1810 break;
1811 }
1812 }
1813 q=PopShortPixel(endian,(unsigned short) (pixel << 4),q);
1814 q+=quantum_info->pad;
1815 }
1816 for (bit=0; bit < (long) (3*number_pixels % 2); bit++)
1817 {
1818 switch ((x+bit) % 3)
1819 {
1820 default:
1821 case 0:
1822 {
1823 pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
1824 break;
1825 }
1826 case 1:
1827 {
1828 pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
1829 break;
1830 }
1831 case 2:
1832 {
1833 pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
1834 p++;
1835 break;
1836 }
1837 }
1838 q=PopShortPixel(endian,(unsigned short) (pixel << 4),q);
1839 q+=quantum_info->pad;
1840 }
1841 if (bit != 0)
1842 p++;
1843 break;
1844 }
1845 if (quantum_info->quantum == 32UL)
1846 {
1847 for (x=0; x < (long) number_pixels; x++)
1848 {
1849 pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
1850 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
1851 pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
1852 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
1853 pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
1854 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
1855 p++;
1856 q+=quantum_info->pad;
1857 }
1858 break;
1859 }
1860 for (x=0; x < (long) number_pixels; x++)
1861 {
1862 pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
1863 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
1864 pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
1865 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
1866 pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
1867 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
1868 p++;
1869 q+=quantum_info->pad;
1870 }
1871 break;
1872 }
1873 case 16:
1874 {
1875 register unsigned short
1876 pixel;
1877
cristyc9672a92010-01-06 00:57:45 +00001878 if (quantum_info->format == FloatingPointQuantumFormat)
1879 {
1880 for (x=0; x < (long) number_pixels; x++)
1881 {
cristy2a4d01c2010-01-10 21:14:51 +00001882 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +00001883 GetRedPixelComponent(p));
cristyc9672a92010-01-06 00:57:45 +00001884 q=PopShortPixel(endian,pixel,q);
cristy2a4d01c2010-01-10 21:14:51 +00001885 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +00001886 GetGreenPixelComponent(p));
cristyc9672a92010-01-06 00:57:45 +00001887 q=PopShortPixel(endian,pixel,q);
cristy2a4d01c2010-01-10 21:14:51 +00001888 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +00001889 GetBluePixelComponent(p));
cristyc9672a92010-01-06 00:57:45 +00001890 q=PopShortPixel(endian,pixel,q);
1891 p++;
1892 q+=quantum_info->pad;
1893 }
1894 break;
1895 }
cristy3ed852e2009-09-05 21:47:34 +00001896 for (x=0; x < (long) number_pixels; x++)
1897 {
cristyce70c172010-01-07 17:15:30 +00001898 pixel=ScaleQuantumToShort(GetRedPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00001899 q=PopShortPixel(endian,pixel,q);
cristyce70c172010-01-07 17:15:30 +00001900 pixel=ScaleQuantumToShort(GetGreenPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00001901 q=PopShortPixel(endian,pixel,q);
cristyce70c172010-01-07 17:15:30 +00001902 pixel=ScaleQuantumToShort(GetBluePixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00001903 q=PopShortPixel(endian,pixel,q);
1904 p++;
1905 q+=quantum_info->pad;
1906 }
1907 break;
1908 }
1909 case 32:
1910 {
1911 register unsigned long
1912 pixel;
1913
1914 if (quantum_info->format == FloatingPointQuantumFormat)
1915 {
1916 for (x=0; x < (long) number_pixels; x++)
1917 {
1918 q=PopFloatPixel(&quantum_state,(float) p->red,q);
1919 q=PopFloatPixel(&quantum_state,(float) p->green,q);
1920 q=PopFloatPixel(&quantum_state,(float) p->blue,q);
1921 p++;
1922 q+=quantum_info->pad;
1923 }
1924 break;
1925 }
1926 for (x=0; x < (long) number_pixels; x++)
1927 {
cristyce70c172010-01-07 17:15:30 +00001928 pixel=ScaleQuantumToLong(GetRedPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00001929 q=PopLongPixel(endian,pixel,q);
cristyce70c172010-01-07 17:15:30 +00001930 pixel=ScaleQuantumToLong(GetGreenPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00001931 q=PopLongPixel(endian,pixel,q);
cristyce70c172010-01-07 17:15:30 +00001932 pixel=ScaleQuantumToLong(GetBluePixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00001933 q=PopLongPixel(endian,pixel,q);
1934 p++;
1935 q+=quantum_info->pad;
1936 }
1937 break;
1938 }
1939 case 64:
1940 {
1941 if (quantum_info->format == FloatingPointQuantumFormat)
1942 {
1943 for (x=0; x < (long) number_pixels; x++)
1944 {
1945 q=PopDoublePixel(&quantum_state,(double) p->red,q);
1946 q=PopDoublePixel(&quantum_state,(double) p->green,q);
1947 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
1948 p++;
1949 q+=quantum_info->pad;
1950 }
1951 break;
1952 }
1953 }
1954 default:
1955 {
1956 range=GetQuantumRange(image->depth);
1957 for (x=0; x < (long) number_pixels; x++)
1958 {
1959 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1960 p->red,range),q);
1961 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1962 p->green,range),q);
1963 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1964 p->blue,range),q);
1965 p++;
1966 q+=quantum_info->pad;
1967 }
1968 break;
1969 }
1970 }
1971 break;
1972 }
1973 case RGBAQuantum:
1974 case RGBOQuantum:
1975 case CbYCrAQuantum:
1976 {
1977 switch (quantum_info->depth)
1978 {
1979 case 8:
1980 {
1981 register unsigned char
1982 pixel;
1983
1984 for (x=0; x < (long) number_pixels; x++)
1985 {
cristyce70c172010-01-07 17:15:30 +00001986 pixel=ScaleQuantumToChar(GetRedPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00001987 q=PopCharPixel(pixel,q);
cristyce70c172010-01-07 17:15:30 +00001988 pixel=ScaleQuantumToChar(GetGreenPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00001989 q=PopCharPixel(pixel,q);
cristyce70c172010-01-07 17:15:30 +00001990 pixel=ScaleQuantumToChar(GetBluePixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00001991 q=PopCharPixel(pixel,q);
cristyce70c172010-01-07 17:15:30 +00001992 pixel=ScaleQuantumToChar((Quantum) (QuantumRange-
1993 GetOpacityPixelComponent(p)));
cristy3ed852e2009-09-05 21:47:34 +00001994 q=PopCharPixel(pixel,q);
1995 p++;
1996 q+=quantum_info->pad;
1997 }
1998 break;
1999 }
2000 case 16:
2001 {
2002 register unsigned short
2003 pixel;
2004
cristyc9672a92010-01-06 00:57:45 +00002005 if (quantum_info->format == FloatingPointQuantumFormat)
2006 {
2007 for (x=0; x < (long) number_pixels; x++)
2008 {
cristy2a4d01c2010-01-10 21:14:51 +00002009 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +00002010 GetRedPixelComponent(p));
cristyc9672a92010-01-06 00:57:45 +00002011 q=PopShortPixel(endian,pixel,q);
cristy2a4d01c2010-01-10 21:14:51 +00002012 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +00002013 GetGreenPixelComponent(p));
cristyc9672a92010-01-06 00:57:45 +00002014 q=PopShortPixel(endian,pixel,q);
cristy2a4d01c2010-01-10 21:14:51 +00002015 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +00002016 GetBluePixelComponent(p));
cristyc9672a92010-01-06 00:57:45 +00002017 q=PopShortPixel(endian,pixel,q);
cristy2a4d01c2010-01-10 21:14:51 +00002018 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +00002019 GetAlphaPixelComponent(p));
cristyc9672a92010-01-06 00:57:45 +00002020 q=PopShortPixel(endian,pixel,q);
2021 p++;
2022 q+=quantum_info->pad;
2023 }
2024 break;
2025 }
cristy3ed852e2009-09-05 21:47:34 +00002026 for (x=0; x < (long) number_pixels; x++)
2027 {
cristyce70c172010-01-07 17:15:30 +00002028 pixel=ScaleQuantumToShort(GetRedPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002029 q=PopShortPixel(endian,pixel,q);
cristyce70c172010-01-07 17:15:30 +00002030 pixel=ScaleQuantumToShort(GetGreenPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002031 q=PopShortPixel(endian,pixel,q);
cristyce70c172010-01-07 17:15:30 +00002032 pixel=ScaleQuantumToShort(GetBluePixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002033 q=PopShortPixel(endian,pixel,q);
cristyce70c172010-01-07 17:15:30 +00002034 pixel=ScaleQuantumToShort((Quantum) (QuantumRange-
2035 GetOpacityPixelComponent(p)));
cristy3ed852e2009-09-05 21:47:34 +00002036 q=PopShortPixel(endian,pixel,q);
2037 p++;
2038 q+=quantum_info->pad;
2039 }
2040 break;
2041 }
2042 case 32:
2043 {
2044 register unsigned long
2045 pixel;
2046
2047 if (quantum_info->format == FloatingPointQuantumFormat)
2048 {
2049 for (x=0; x < (long) number_pixels; x++)
2050 {
2051 float
2052 pixel;
2053
2054 q=PopFloatPixel(&quantum_state,(float) p->red,q);
2055 q=PopFloatPixel(&quantum_state,(float) p->green,q);
2056 q=PopFloatPixel(&quantum_state,(float) p->blue,q);
cristy46f08202010-01-10 04:04:21 +00002057 pixel=(float) (GetAlphaPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002058 q=PopFloatPixel(&quantum_state,pixel,q);
2059 p++;
2060 q+=quantum_info->pad;
2061 }
2062 break;
2063 }
2064 for (x=0; x < (long) number_pixels; x++)
2065 {
cristyce70c172010-01-07 17:15:30 +00002066 pixel=ScaleQuantumToLong(GetRedPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002067 q=PopLongPixel(endian,pixel,q);
cristyce70c172010-01-07 17:15:30 +00002068 pixel=ScaleQuantumToLong(GetGreenPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002069 q=PopLongPixel(endian,pixel,q);
cristyce70c172010-01-07 17:15:30 +00002070 pixel=ScaleQuantumToLong(GetBluePixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002071 q=PopLongPixel(endian,pixel,q);
cristyce70c172010-01-07 17:15:30 +00002072 pixel=ScaleQuantumToLong((Quantum) (QuantumRange-
2073 GetOpacityPixelComponent(p)));
cristy3ed852e2009-09-05 21:47:34 +00002074 q=PopLongPixel(endian,pixel,q);
2075 p++;
2076 q+=quantum_info->pad;
2077 }
2078 break;
2079 }
2080 case 64:
2081 {
2082 if (quantum_info->format == FloatingPointQuantumFormat)
2083 {
2084 double
2085 pixel;
2086
2087 for (x=0; x < (long) number_pixels; x++)
2088 {
2089 q=PopDoublePixel(&quantum_state,(double) p->red,q);
2090 q=PopDoublePixel(&quantum_state,(double) p->green,q);
2091 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
cristy46f08202010-01-10 04:04:21 +00002092 pixel=(double) (GetAlphaPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002093 q=PopDoublePixel(&quantum_state,pixel,q);
2094 p++;
2095 q+=quantum_info->pad;
2096 }
2097 break;
2098 }
2099 }
2100 default:
2101 {
2102 range=GetQuantumRange(image->depth);
2103 for (x=0; x < (long) number_pixels; x++)
2104 {
2105 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2106 p->red,range),q);
2107 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2108 p->green,range),q);
2109 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2110 p->blue,range),q);
2111 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
cristy46f08202010-01-10 04:04:21 +00002112 (Quantum) (GetAlphaPixelComponent(p)),range),q);
cristy3ed852e2009-09-05 21:47:34 +00002113 p++;
2114 q+=quantum_info->pad;
2115 }
2116 break;
2117 }
2118 }
2119 break;
2120 }
2121 case CMYKQuantum:
2122 {
2123 if (image->colorspace != CMYKColorspace)
2124 {
2125 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2126 "ColorSeparatedImageRequired","`%s'",image->filename);
2127 return(extent);
2128 }
2129 switch (quantum_info->depth)
2130 {
2131 case 8:
2132 {
2133 register unsigned char
2134 pixel;
2135
2136 for (x=0; x < (long) number_pixels; x++)
2137 {
cristyce70c172010-01-07 17:15:30 +00002138 pixel=ScaleQuantumToChar(GetRedPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002139 q=PopCharPixel(pixel,q);
cristyce70c172010-01-07 17:15:30 +00002140 pixel=ScaleQuantumToChar(GetGreenPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002141 q=PopCharPixel(pixel,q);
cristyce70c172010-01-07 17:15:30 +00002142 pixel=ScaleQuantumToChar(GetBluePixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002143 q=PopCharPixel(pixel,q);
2144 pixel=ScaleQuantumToChar(indexes[x]);
2145 q=PopCharPixel(pixel,q);
2146 p++;
2147 q+=quantum_info->pad;
2148 }
2149 break;
2150 }
2151 case 16:
2152 {
2153 register unsigned short
2154 pixel;
2155
cristyc9672a92010-01-06 00:57:45 +00002156 if (quantum_info->format == FloatingPointQuantumFormat)
2157 {
2158 for (x=0; x < (long) number_pixels; x++)
2159 {
cristy2a4d01c2010-01-10 21:14:51 +00002160 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +00002161 GetRedPixelComponent(p));
cristyc9672a92010-01-06 00:57:45 +00002162 q=PopShortPixel(endian,pixel,q);
cristy2a4d01c2010-01-10 21:14:51 +00002163 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +00002164 GetGreenPixelComponent(p));
cristyc9672a92010-01-06 00:57:45 +00002165 q=PopShortPixel(endian,pixel,q);
cristy2a4d01c2010-01-10 21:14:51 +00002166 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +00002167 GetBluePixelComponent(p));
cristyc9672a92010-01-06 00:57:45 +00002168 q=PopShortPixel(endian,pixel,q);
cristy2a4d01c2010-01-10 21:14:51 +00002169 pixel=SinglePrecisionToHalf(QuantumScale*indexes[x]);
cristyc9672a92010-01-06 00:57:45 +00002170 q=PopShortPixel(endian,pixel,q);
2171 p++;
2172 q+=quantum_info->pad;
2173 }
2174 break;
2175 }
cristy3ed852e2009-09-05 21:47:34 +00002176 for (x=0; x < (long) number_pixels; x++)
2177 {
cristyce70c172010-01-07 17:15:30 +00002178 pixel=ScaleQuantumToShort(GetRedPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002179 q=PopShortPixel(endian,pixel,q);
cristyce70c172010-01-07 17:15:30 +00002180 pixel=ScaleQuantumToShort(GetGreenPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002181 q=PopShortPixel(endian,pixel,q);
cristyce70c172010-01-07 17:15:30 +00002182 pixel=ScaleQuantumToShort(GetBluePixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002183 q=PopShortPixel(endian,pixel,q);
2184 pixel=ScaleQuantumToShort(indexes[x]);
2185 q=PopShortPixel(endian,pixel,q);
2186 p++;
2187 q+=quantum_info->pad;
2188 }
2189 break;
2190 }
2191 case 32:
2192 {
2193 register unsigned long
2194 pixel;
2195
2196 if (quantum_info->format == FloatingPointQuantumFormat)
2197 {
2198 for (x=0; x < (long) number_pixels; x++)
2199 {
2200 q=PopFloatPixel(&quantum_state,(float) p->red,q);
2201 q=PopFloatPixel(&quantum_state,(float) p->green,q);
2202 q=PopFloatPixel(&quantum_state,(float) p->blue,q);
2203 q=PopFloatPixel(&quantum_state,(float) indexes[x],q);
2204 p++;
2205 q+=quantum_info->pad;
2206 }
2207 break;
2208 }
2209 for (x=0; x < (long) number_pixels; x++)
2210 {
cristyce70c172010-01-07 17:15:30 +00002211 pixel=ScaleQuantumToLong(GetRedPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002212 q=PopLongPixel(endian,pixel,q);
cristyce70c172010-01-07 17:15:30 +00002213 pixel=ScaleQuantumToLong(GetGreenPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002214 q=PopLongPixel(endian,pixel,q);
cristyce70c172010-01-07 17:15:30 +00002215 pixel=ScaleQuantumToLong(GetBluePixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002216 q=PopLongPixel(endian,pixel,q);
2217 pixel=ScaleQuantumToLong(indexes[x]);
2218 q=PopLongPixel(endian,pixel,q);
2219 p++;
2220 q+=quantum_info->pad;
2221 }
2222 break;
2223 }
2224 case 64:
2225 {
2226 if (quantum_info->format == FloatingPointQuantumFormat)
2227 {
2228 for (x=0; x < (long) number_pixels; x++)
2229 {
2230 q=PopDoublePixel(&quantum_state,(double) p->red,q);
2231 q=PopDoublePixel(&quantum_state,(double) p->green,q);
2232 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
2233 q=PopDoublePixel(&quantum_state,(double) indexes[x],q);
2234 p++;
2235 q+=quantum_info->pad;
2236 }
2237 break;
2238 }
2239 }
2240 default:
2241 {
2242 range=GetQuantumRange(image->depth);
2243 for (x=0; x < (long) number_pixels; x++)
2244 {
2245 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2246 p->red,range),q);
2247 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2248 p->green,range),q);
2249 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2250 p->blue,range),q);
2251 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2252 indexes[x],range),q);
2253 p++;
2254 q+=quantum_info->pad;
2255 }
2256 break;
2257 }
2258 }
2259 break;
2260 }
2261 case CMYKAQuantum:
2262 case CMYKOQuantum:
2263 {
2264 if (image->colorspace != CMYKColorspace)
2265 {
2266 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2267 "ColorSeparatedImageRequired","`%s'",image->filename);
2268 return(extent);
2269 }
2270 switch (quantum_info->depth)
2271 {
2272 case 8:
2273 {
2274 register unsigned char
2275 pixel;
2276
2277 for (x=0; x < (long) number_pixels; x++)
2278 {
cristyce70c172010-01-07 17:15:30 +00002279 pixel=ScaleQuantumToChar(GetRedPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002280 q=PopCharPixel(pixel,q);
cristyce70c172010-01-07 17:15:30 +00002281 pixel=ScaleQuantumToChar(GetGreenPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002282 q=PopCharPixel(pixel,q);
cristyce70c172010-01-07 17:15:30 +00002283 pixel=ScaleQuantumToChar(GetBluePixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002284 q=PopCharPixel(pixel,q);
2285 pixel=ScaleQuantumToChar(indexes[x]);
2286 q=PopCharPixel(pixel,q);
cristyce70c172010-01-07 17:15:30 +00002287 pixel=ScaleQuantumToChar((Quantum) (QuantumRange-
2288 GetOpacityPixelComponent(p)));
cristy3ed852e2009-09-05 21:47:34 +00002289 q=PopCharPixel(pixel,q);
2290 p++;
2291 q+=quantum_info->pad;
2292 }
2293 break;
2294 }
2295 case 16:
2296 {
2297 register unsigned short
2298 pixel;
2299
cristyc9672a92010-01-06 00:57:45 +00002300 if (quantum_info->format == FloatingPointQuantumFormat)
2301 {
2302 for (x=0; x < (long) number_pixels; x++)
2303 {
cristy2a4d01c2010-01-10 21:14:51 +00002304 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +00002305 GetRedPixelComponent(p));
cristyc9672a92010-01-06 00:57:45 +00002306 q=PopShortPixel(endian,pixel,q);
cristy2a4d01c2010-01-10 21:14:51 +00002307 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +00002308 GetGreenPixelComponent(p));
cristyc9672a92010-01-06 00:57:45 +00002309 q=PopShortPixel(endian,pixel,q);
cristy2a4d01c2010-01-10 21:14:51 +00002310 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +00002311 GetBluePixelComponent(p));
cristyc9672a92010-01-06 00:57:45 +00002312 q=PopShortPixel(endian,pixel,q);
cristy2a4d01c2010-01-10 21:14:51 +00002313 pixel=SinglePrecisionToHalf(QuantumScale*indexes[x]);
cristyc9672a92010-01-06 00:57:45 +00002314 q=PopShortPixel(endian,pixel,q);
cristy2a4d01c2010-01-10 21:14:51 +00002315 pixel=SinglePrecisionToHalf(QuantumScale*
cristy24fb7dc2010-01-10 20:15:51 +00002316 GetAlphaPixelComponent(p));
cristyc9672a92010-01-06 00:57:45 +00002317 q=PopShortPixel(endian,pixel,q);
2318 p++;
2319 q+=quantum_info->pad;
2320 }
2321 break;
2322 }
cristy3ed852e2009-09-05 21:47:34 +00002323 for (x=0; x < (long) number_pixels; x++)
2324 {
cristyce70c172010-01-07 17:15:30 +00002325 pixel=ScaleQuantumToShort(GetRedPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002326 q=PopShortPixel(endian,pixel,q);
cristyce70c172010-01-07 17:15:30 +00002327 pixel=ScaleQuantumToShort(GetGreenPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002328 q=PopShortPixel(endian,pixel,q);
cristyce70c172010-01-07 17:15:30 +00002329 pixel=ScaleQuantumToShort(GetBluePixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002330 q=PopShortPixel(endian,pixel,q);
2331 pixel=ScaleQuantumToShort(indexes[x]);
2332 q=PopShortPixel(endian,pixel,q);
cristyce70c172010-01-07 17:15:30 +00002333 pixel=ScaleQuantumToShort((Quantum) (QuantumRange-
2334 GetOpacityPixelComponent(p)));
cristy3ed852e2009-09-05 21:47:34 +00002335 q=PopShortPixel(endian,pixel,q);
2336 p++;
2337 q+=quantum_info->pad;
2338 }
2339 break;
2340 }
2341 case 32:
2342 {
2343 register unsigned long
2344 pixel;
2345
2346 if (quantum_info->format == FloatingPointQuantumFormat)
2347 {
2348 for (x=0; x < (long) number_pixels; x++)
2349 {
2350 float
2351 pixel;
2352
2353 q=PopFloatPixel(&quantum_state,(float) p->red,q);
2354 q=PopFloatPixel(&quantum_state,(float) p->green,q);
2355 q=PopFloatPixel(&quantum_state,(float) p->blue,q);
2356 q=PopFloatPixel(&quantum_state,(float) indexes[x],q);
cristy46f08202010-01-10 04:04:21 +00002357 pixel=(float) (GetAlphaPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002358 q=PopFloatPixel(&quantum_state,pixel,q);
2359 p++;
2360 q+=quantum_info->pad;
2361 }
2362 break;
2363 }
2364 for (x=0; x < (long) number_pixels; x++)
2365 {
cristyce70c172010-01-07 17:15:30 +00002366 pixel=ScaleQuantumToLong(GetRedPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002367 q=PopLongPixel(endian,pixel,q);
cristyce70c172010-01-07 17:15:30 +00002368 pixel=ScaleQuantumToLong(GetGreenPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002369 q=PopLongPixel(endian,pixel,q);
cristyce70c172010-01-07 17:15:30 +00002370 pixel=ScaleQuantumToLong(GetBluePixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002371 q=PopLongPixel(endian,pixel,q);
2372 pixel=ScaleQuantumToLong(indexes[x]);
2373 q=PopLongPixel(endian,pixel,q);
cristyce70c172010-01-07 17:15:30 +00002374 pixel=ScaleQuantumToLong((Quantum) (QuantumRange-
2375 GetOpacityPixelComponent(p)));
cristy3ed852e2009-09-05 21:47:34 +00002376 q=PopLongPixel(endian,pixel,q);
2377 p++;
2378 q+=quantum_info->pad;
2379 }
2380 break;
2381 }
2382 case 64:
2383 {
2384 if (quantum_info->format == FloatingPointQuantumFormat)
2385 {
2386 double
2387 pixel;
2388
2389 for (x=0; x < (long) number_pixels; x++)
2390 {
2391 q=PopDoublePixel(&quantum_state,(double) p->red,q);
2392 q=PopDoublePixel(&quantum_state,(double) p->green,q);
2393 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
2394 q=PopDoublePixel(&quantum_state,(double) indexes[x],q);
cristy46f08202010-01-10 04:04:21 +00002395 pixel=(double) (GetAlphaPixelComponent(p));
cristy3ed852e2009-09-05 21:47:34 +00002396 q=PopDoublePixel(&quantum_state,pixel,q);
2397 p++;
2398 q+=quantum_info->pad;
2399 }
2400 break;
2401 }
2402 }
2403 default:
2404 {
2405 range=GetQuantumRange(image->depth);
2406 for (x=0; x < (long) number_pixels; x++)
2407 {
2408 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2409 p->red,range),q);
2410 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2411 p->green,range),q);
2412 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2413 p->blue,range),q);
2414 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2415 indexes[x],range),q);
2416 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2417 p->opacity,range),q);
2418 p++;
2419 q+=quantum_info->pad;
2420 }
2421 break;
2422 }
2423 }
2424 break;
2425 }
2426 case CbYCrYQuantum:
2427 {
2428 long
2429 n;
2430
2431 Quantum
2432 cbcr[4];
2433
2434 register long
2435 i;
2436
2437 register unsigned long
2438 pixel;
2439
2440 unsigned long
2441 quantum;
2442
2443 n=0;
2444 quantum=0;
2445 range=GetQuantumRange(image->depth);
2446 switch (quantum_info->depth)
2447 {
2448 case 10:
2449 {
2450 if (quantum_info->pack == MagickFalse)
2451 {
2452 for (x=0; x < (long) number_pixels; x+=2)
2453 {
2454 for (i=0; i < 4; i++)
2455 {
2456 switch (n % 3)
2457 {
2458 case 0:
2459 {
cristyce70c172010-01-07 17:15:30 +00002460 quantum=GetRedPixelComponent(p);
cristy3ed852e2009-09-05 21:47:34 +00002461 break;
2462 }
2463 case 1:
2464 {
cristyce70c172010-01-07 17:15:30 +00002465 quantum=GetGreenPixelComponent(p);
cristy3ed852e2009-09-05 21:47:34 +00002466 break;
2467 }
2468 case 2:
2469 {
cristyce70c172010-01-07 17:15:30 +00002470 quantum=GetBluePixelComponent(p);
cristy3ed852e2009-09-05 21:47:34 +00002471 break;
2472 }
2473 }
2474 cbcr[i]=(Quantum) quantum;
2475 n++;
2476 }
2477 pixel=(unsigned long) ((unsigned long) (cbcr[1]) << 22 |
2478 (unsigned long) (cbcr[0]) << 12 |
2479 (unsigned long) (cbcr[2]) << 2);
2480 q=PopLongPixel(endian,pixel,q);
2481 p++;
2482 pixel=(unsigned long) ((unsigned long) (cbcr[3]) << 22 |
2483 (unsigned long) (cbcr[0]) << 12 |
2484 (unsigned long) (cbcr[2]) << 2);
2485 q=PopLongPixel(endian,pixel,q);
2486 p++;
2487 q+=quantum_info->pad;
2488 }
2489 break;
2490 }
2491 break;
2492 }
2493 default:
2494 {
2495 for (x=0; x < (long) number_pixels; x+=2)
2496 {
2497 for (i=0; i < 4; i++)
2498 {
2499 switch (n % 3)
2500 {
2501 case 0:
2502 {
cristyce70c172010-01-07 17:15:30 +00002503 quantum=GetRedPixelComponent(p);
cristy3ed852e2009-09-05 21:47:34 +00002504 break;
2505 }
2506 case 1:
2507 {
cristyce70c172010-01-07 17:15:30 +00002508 quantum=GetGreenPixelComponent(p);
cristy3ed852e2009-09-05 21:47:34 +00002509 break;
2510 }
2511 case 2:
2512 {
cristyce70c172010-01-07 17:15:30 +00002513 quantum=GetBluePixelComponent(p);
cristy3ed852e2009-09-05 21:47:34 +00002514 break;
2515 }
2516 }
2517 cbcr[i]=(Quantum) quantum;
2518 n++;
2519 }
2520 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2521 cbcr[1],range),q);
2522 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2523 cbcr[0],range),q);
2524 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2525 cbcr[2],range),q);
2526 p++;
2527 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2528 cbcr[3],range),q);
2529 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2530 cbcr[0],range),q);
2531 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2532 cbcr[2],range),q);
2533 p++;
2534 q+=quantum_info->pad;
2535 }
2536 break;
2537 }
2538 }
2539 break;
2540 }
2541 default:
2542 break;
2543 }
2544 if ((quantum_type == CbYCrQuantum) || (quantum_type == CbYCrAQuantum))
2545 {
2546 Quantum
2547 quantum;
2548
2549 register PixelPacket
cristyc47d1f82009-11-26 01:44:43 +00002550 *restrict q;
cristy3ed852e2009-09-05 21:47:34 +00002551
2552 q=GetAuthenticPixelQueue(image);
2553 if (image_view != (CacheView *) NULL)
2554 q=(PixelPacket *) GetCacheViewVirtualPixelQueue(image_view);
2555 for (x=0; x < (long) number_pixels; x++)
2556 {
2557 quantum=q->red;
2558 q->red=q->green;
2559 q->green=quantum;
2560 q++;
2561 }
2562 }
2563 if ((quantum_type == RGBOQuantum) || (quantum_type == CMYKOQuantum))
2564 {
2565 register PixelPacket
cristyc47d1f82009-11-26 01:44:43 +00002566 *restrict q;
cristy3ed852e2009-09-05 21:47:34 +00002567
2568 q=GetAuthenticPixelQueue(image);
2569 if (image_view != (CacheView *) NULL)
2570 q=(PixelPacket *) GetCacheViewVirtualPixelQueue(image_view);
2571 for (x=0; x < (long) number_pixels; x++)
2572 {
cristy46f08202010-01-10 04:04:21 +00002573 q->opacity=(Quantum) GetAlphaPixelComponent(q);
cristy3ed852e2009-09-05 21:47:34 +00002574 q++;
2575 }
2576 }
2577 return(extent);
2578}