2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
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 %
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 %
16 % EEEEE X X P OOO R R T %
18 % MagickCore Methods to Export Quantum Pixels %
25 % Copyright 1999-2015 ImageMagick Studio LLC, a non-profit organization %
26 % dedicated to making software imaging solutions freely available. %
28 % You may not use this file except in compliance with the License. You may %
29 % obtain a copy of the License at %
31 % http://www.imagemagick.org/script/license.php %
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. %
39 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
47 #include "MagickCore/studio.h"
48 #include "MagickCore/property.h"
49 #include "MagickCore/blob.h"
50 #include "MagickCore/blob-private.h"
51 #include "MagickCore/color-private.h"
52 #include "MagickCore/exception.h"
53 #include "MagickCore/exception-private.h"
54 #include "MagickCore/cache.h"
55 #include "MagickCore/constitute.h"
56 #include "MagickCore/delegate.h"
57 #include "MagickCore/geometry.h"
58 #include "MagickCore/list.h"
59 #include "MagickCore/magick.h"
60 #include "MagickCore/memory_.h"
61 #include "MagickCore/monitor.h"
62 #include "MagickCore/option.h"
63 #include "MagickCore/pixel.h"
64 #include "MagickCore/pixel-accessor.h"
65 #include "MagickCore/quantum.h"
66 #include "MagickCore/quantum-private.h"
67 #include "MagickCore/resource_.h"
68 #include "MagickCore/semaphore.h"
69 #include "MagickCore/statistic.h"
70 #include "MagickCore/stream.h"
71 #include "MagickCore/string_.h"
72 #include "MagickCore/utility.h"
75 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
79 + E x p o r t Q u a n t u m P i x e l s %
83 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
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.
90 % The format of the ExportQuantumPixels method is:
92 % size_t ExportQuantumPixels(const Image *image,CacheView *image_view,
93 % QuantumInfo *quantum_info,const QuantumType quantum_type,
94 % unsigned char *restrict pixels,ExceptionInfo *exception)
96 % A description of each parameter follows:
100 % o image_view: the image cache view.
102 % o quantum_info: the quantum info.
104 % o quantum_type: Declare which pixel components to transfer (RGB, RGBA,
107 % o pixels: The components are transferred to this buffer.
109 % o exception: return any errors or warnings in this structure.
113 static inline unsigned char *PopDoublePixel(QuantumInfo *quantum_info,
114 const double pixel,unsigned char *restrict pixels)
122 (void) ResetMagickMemory(quantum,0,sizeof(quantum));
123 p=(double *) quantum;
124 *p=(double) (pixel*quantum_info->state.inverse_scale+quantum_info->minimum);
125 if (quantum_info->endian == LSBEndian)
127 *pixels++=quantum[0];
128 *pixels++=quantum[1];
129 *pixels++=quantum[2];
130 *pixels++=quantum[3];
131 *pixels++=quantum[4];
132 *pixels++=quantum[5];
133 *pixels++=quantum[6];
134 *pixels++=quantum[7];
137 *pixels++=quantum[7];
138 *pixels++=quantum[6];
139 *pixels++=quantum[5];
140 *pixels++=quantum[4];
141 *pixels++=quantum[3];
142 *pixels++=quantum[2];
143 *pixels++=quantum[1];
144 *pixels++=quantum[0];
148 static inline unsigned char *PopFloatPixel(QuantumInfo *quantum_info,
149 const float pixel,unsigned char *restrict pixels)
157 (void) ResetMagickMemory(quantum,0,sizeof(quantum));
159 *p=(float) ((double) pixel*quantum_info->state.inverse_scale+
160 quantum_info->minimum);
161 if (quantum_info->endian == LSBEndian)
163 *pixels++=quantum[0];
164 *pixels++=quantum[1];
165 *pixels++=quantum[2];
166 *pixels++=quantum[3];
169 *pixels++=quantum[3];
170 *pixels++=quantum[2];
171 *pixels++=quantum[1];
172 *pixels++=quantum[0];
176 static inline unsigned char *PopQuantumPixel(QuantumInfo *quantum_info,
177 const QuantumAny pixel,unsigned char *restrict pixels)
185 if (quantum_info->state.bits == 0UL)
186 quantum_info->state.bits=8U;
187 for (i=(ssize_t) quantum_info->depth; i > 0L; )
189 quantum_bits=(size_t) i;
190 if (quantum_bits > quantum_info->state.bits)
191 quantum_bits=quantum_info->state.bits;
192 i-=(ssize_t) quantum_bits;
195 if (quantum_info->state.bits == 8UL)
197 quantum_info->state.bits-=quantum_bits;
198 *pixels|=(((pixel >> i) &~ ((~0UL) << quantum_bits)) <<
199 quantum_info->state.bits);
200 if (quantum_info->state.bits == 0UL)
203 quantum_info->state.bits=8UL;
209 static inline unsigned char *PopQuantumLongPixel(QuantumInfo *quantum_info,
210 const size_t pixel,unsigned char *restrict pixels)
218 if (quantum_info->state.bits == 0U)
219 quantum_info->state.bits=32UL;
220 for (i=(ssize_t) quantum_info->depth; i > 0; )
222 quantum_bits=(size_t) i;
223 if (quantum_bits > quantum_info->state.bits)
224 quantum_bits=quantum_info->state.bits;
225 quantum_info->state.pixel|=(((pixel >> (quantum_info->depth-i)) &
226 quantum_info->state.mask[quantum_bits]) << (32U-
227 quantum_info->state.bits));
228 i-=(ssize_t) quantum_bits;
229 quantum_info->state.bits-=quantum_bits;
230 if (quantum_info->state.bits == 0U)
232 pixels=PopLongPixel(quantum_info->endian,quantum_info->state.pixel,
234 quantum_info->state.pixel=0U;
235 quantum_info->state.bits=32U;
241 static void ExportAlphaQuantum(const Image *image,QuantumInfo *quantum_info,
242 const MagickSizeType number_pixels,const Quantum *restrict p,
243 unsigned char *restrict q,ExceptionInfo *exception)
251 assert(exception != (ExceptionInfo *) NULL);
252 assert(exception->signature == MagickSignature);
253 switch (quantum_info->depth)
257 register unsigned char
260 for (x=0; x < (ssize_t) number_pixels; x++)
262 pixel=ScaleQuantumToChar(GetPixelAlpha(image,p));
263 q=PopCharPixel(pixel,q);
264 p+=GetPixelChannels(image);
265 q+=quantum_info->pad;
271 register unsigned short
274 if (quantum_info->format == FloatingPointQuantumFormat)
276 for (x=0; x < (ssize_t) number_pixels; x++)
278 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelAlpha(image,p));
279 q=PopShortPixel(quantum_info->endian,pixel,q);
280 p+=GetPixelChannels(image);
281 q+=quantum_info->pad;
285 for (x=0; x < (ssize_t) number_pixels; x++)
287 pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
288 q=PopShortPixel(quantum_info->endian,pixel,q);
289 p+=GetPixelChannels(image);
290 q+=quantum_info->pad;
296 register unsigned int
299 if (quantum_info->format == FloatingPointQuantumFormat)
301 for (x=0; x < (ssize_t) number_pixels; x++)
303 q=PopFloatPixel(quantum_info,(float) GetPixelAlpha(image,p),q);
304 p+=GetPixelChannels(image);
305 q+=quantum_info->pad;
309 for (x=0; x < (ssize_t) number_pixels; x++)
311 pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
312 q=PopLongPixel(quantum_info->endian,pixel,q);
313 p+=GetPixelChannels(image);
314 q+=quantum_info->pad;
320 if (quantum_info->format == FloatingPointQuantumFormat)
322 for (x=0; x < (ssize_t) number_pixels; x++)
324 q=PopDoublePixel(quantum_info,(double) GetPixelAlpha(image,p),q);
325 p+=GetPixelChannels(image);
326 q+=quantum_info->pad;
333 range=GetQuantumRange(quantum_info->depth);
334 for (x=0; x < (ssize_t) number_pixels; x++)
336 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
338 p+=GetPixelChannels(image);
339 q+=quantum_info->pad;
346 static void ExportBGRQuantum(const Image *image,QuantumInfo *quantum_info,
347 const MagickSizeType number_pixels,const Quantum *restrict p,
348 unsigned char *restrict q,ExceptionInfo *exception)
359 assert(exception != (ExceptionInfo *) NULL);
360 assert(exception->signature == MagickSignature);
361 switch (quantum_info->depth)
365 for (x=0; x < (ssize_t) number_pixels; x++)
367 q=PopCharPixel(ScaleQuantumToChar(GetPixelBlue(image,p)),q);
368 q=PopCharPixel(ScaleQuantumToChar(GetPixelGreen(image,p)),q);
369 q=PopCharPixel(ScaleQuantumToChar(GetPixelRed(image,p)),q);
370 p+=GetPixelChannels(image);
371 q+=quantum_info->pad;
377 register unsigned int
380 range=GetQuantumRange(quantum_info->depth);
381 if (quantum_info->pack == MagickFalse)
383 for (x=0; x < (ssize_t) number_pixels; x++)
385 pixel=(unsigned int) (
386 ScaleQuantumToAny(GetPixelRed(image,p),range) << 22 |
387 ScaleQuantumToAny(GetPixelGreen(image,p),range) << 12 |
388 ScaleQuantumToAny(GetPixelBlue(image,p),range) << 2);
389 q=PopLongPixel(quantum_info->endian,pixel,q);
390 p+=GetPixelChannels(image);
391 q+=quantum_info->pad;
395 if (quantum_info->quantum == 32UL)
397 for (x=0; x < (ssize_t) number_pixels; x++)
399 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
400 q=PopQuantumLongPixel(quantum_info,pixel,q);
401 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
403 q=PopQuantumLongPixel(quantum_info,pixel,q);
404 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
405 q=PopQuantumLongPixel(quantum_info,pixel,q);
406 p+=GetPixelChannels(image);
407 q+=quantum_info->pad;
411 for (x=0; x < (ssize_t) number_pixels; x++)
413 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
414 q=PopQuantumPixel(quantum_info,pixel,q);
415 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
416 q=PopQuantumPixel(quantum_info,pixel,q);
417 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
418 q=PopQuantumPixel(quantum_info,pixel,q);
419 p+=GetPixelChannels(image);
420 q+=quantum_info->pad;
426 register unsigned int
429 range=GetQuantumRange(quantum_info->depth);
430 if (quantum_info->pack == MagickFalse)
432 for (x=0; x < (ssize_t) (3*number_pixels-1); x+=2)
439 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),
445 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
451 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),
453 p+=GetPixelChannels(image);
457 q=PopShortPixel(quantum_info->endian,(unsigned short) (pixel << 4),
464 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),
470 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
476 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),
478 p+=GetPixelChannels(image);
482 q=PopShortPixel(quantum_info->endian,(unsigned short) (pixel << 4),
484 q+=quantum_info->pad;
486 for (bit=0; bit < (ssize_t) (3*number_pixels % 2); bit++)
493 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),
499 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
505 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),
507 p+=GetPixelChannels(image);
511 q=PopShortPixel(quantum_info->endian,(unsigned short) (pixel << 4),
513 q+=quantum_info->pad;
516 p+=GetPixelChannels(image);
519 if (quantum_info->quantum == 32UL)
521 for (x=0; x < (ssize_t) number_pixels; x++)
523 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
524 q=PopQuantumLongPixel(quantum_info,pixel,q);
525 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
527 q=PopQuantumLongPixel(quantum_info,pixel,q);
528 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
529 q=PopQuantumLongPixel(quantum_info,pixel,q);
530 p+=GetPixelChannels(image);
531 q+=quantum_info->pad;
535 for (x=0; x < (ssize_t) number_pixels; x++)
537 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
538 q=PopQuantumPixel(quantum_info,pixel,q);
539 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
540 q=PopQuantumPixel(quantum_info,pixel,q);
541 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
542 q=PopQuantumPixel(quantum_info,pixel,q);
543 p+=GetPixelChannels(image);
544 q+=quantum_info->pad;
550 register unsigned short
553 if (quantum_info->format == FloatingPointQuantumFormat)
555 for (x=0; x < (ssize_t) number_pixels; x++)
557 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlue(image,p));
558 q=PopShortPixel(quantum_info->endian,pixel,q);
559 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelGreen(image,p));
560 q=PopShortPixel(quantum_info->endian,pixel,q);
561 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelRed(image,p));
562 q=PopShortPixel(quantum_info->endian,pixel,q);
563 p+=GetPixelChannels(image);
564 q+=quantum_info->pad;
568 for (x=0; x < (ssize_t) number_pixels; x++)
570 pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
571 q=PopShortPixel(quantum_info->endian,pixel,q);
572 pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
573 q=PopShortPixel(quantum_info->endian,pixel,q);
574 pixel=ScaleQuantumToShort(GetPixelRed(image,p));
575 q=PopShortPixel(quantum_info->endian,pixel,q);
576 p+=GetPixelChannels(image);
577 q+=quantum_info->pad;
583 register unsigned int
586 if (quantum_info->format == FloatingPointQuantumFormat)
588 for (x=0; x < (ssize_t) number_pixels; x++)
590 q=PopFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
591 q=PopFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
592 q=PopFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
593 p+=GetPixelChannels(image);
594 q+=quantum_info->pad;
598 for (x=0; x < (ssize_t) number_pixels; x++)
600 pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
601 q=PopLongPixel(quantum_info->endian,pixel,q);
602 pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
603 q=PopLongPixel(quantum_info->endian,pixel,q);
604 pixel=ScaleQuantumToLong(GetPixelRed(image,p));
605 q=PopLongPixel(quantum_info->endian,pixel,q);
606 p+=GetPixelChannels(image);
607 q+=quantum_info->pad;
613 if (quantum_info->format == FloatingPointQuantumFormat)
615 for (x=0; x < (ssize_t) number_pixels; x++)
617 q=PopDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
618 q=PopDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
619 q=PopDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
620 p+=GetPixelChannels(image);
621 q+=quantum_info->pad;
628 range=GetQuantumRange(quantum_info->depth);
629 for (x=0; x < (ssize_t) number_pixels; x++)
631 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
633 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
635 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
637 p+=GetPixelChannels(image);
638 q+=quantum_info->pad;
645 static void ExportBGRAQuantum(const Image *image,QuantumInfo *quantum_info,
646 const MagickSizeType number_pixels,const Quantum *restrict p,
647 unsigned char *restrict q,ExceptionInfo *exception)
655 assert(exception != (ExceptionInfo *) NULL);
656 assert(exception->signature == MagickSignature);
657 switch (quantum_info->depth)
661 register unsigned char
664 for (x=0; x < (ssize_t) number_pixels; x++)
666 pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
667 q=PopCharPixel(pixel,q);
668 pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
669 q=PopCharPixel(pixel,q);
670 pixel=ScaleQuantumToChar(GetPixelRed(image,p));
671 q=PopCharPixel(pixel,q);
672 pixel=ScaleQuantumToChar(GetPixelAlpha(image,p));
673 q=PopCharPixel(pixel,q);
674 p+=GetPixelChannels(image);
675 q+=quantum_info->pad;
681 register unsigned int
684 range=GetQuantumRange(quantum_info->depth);
685 if (quantum_info->pack == MagickFalse)
699 for (x=0; x < (ssize_t) number_pixels; x++)
701 for (i=0; i < 4; i++)
705 case 0: quantum=GetPixelRed(image,p); break;
706 case 1: quantum=GetPixelGreen(image,p); break;
707 case 2: quantum=GetPixelBlue(image,p); break;
708 case 3: quantum=GetPixelAlpha(image,p); break;
714 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
720 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
726 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
728 q=PopLongPixel(quantum_info->endian,pixel,q);
735 p+=GetPixelChannels(image);
736 q+=quantum_info->pad;
740 if (quantum_info->quantum == 32UL)
742 for (x=0; x < (ssize_t) number_pixels; x++)
744 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
745 q=PopQuantumLongPixel(quantum_info,pixel,q);
746 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
748 q=PopQuantumLongPixel(quantum_info,pixel,q);
749 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
750 q=PopQuantumLongPixel(quantum_info,pixel,q);
751 pixel=(unsigned int) ScaleQuantumToAny(GetPixelAlpha(image,p),
753 q=PopQuantumLongPixel(quantum_info,pixel,q);
754 p+=GetPixelChannels(image);
755 q+=quantum_info->pad;
759 for (x=0; x < (ssize_t) number_pixels; x++)
761 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
762 q=PopQuantumPixel(quantum_info,pixel,q);
763 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
764 q=PopQuantumPixel(quantum_info,pixel,q);
765 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
766 q=PopQuantumPixel(quantum_info,pixel,q);
767 pixel=(unsigned int) ScaleQuantumToAny(GetPixelAlpha(image,p),range);
768 q=PopQuantumPixel(quantum_info,pixel,q);
769 p+=GetPixelChannels(image);
770 q+=quantum_info->pad;
776 register unsigned short
779 if (quantum_info->format == FloatingPointQuantumFormat)
781 for (x=0; x < (ssize_t) number_pixels; x++)
783 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlue(image,p));
784 q=PopShortPixel(quantum_info->endian,pixel,q);
785 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelGreen(image,p));
786 q=PopShortPixel(quantum_info->endian,pixel,q);
787 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelRed(image,p));
788 q=PopShortPixel(quantum_info->endian,pixel,q);
789 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelAlpha(image,p));
790 q=PopShortPixel(quantum_info->endian,pixel,q);
791 p+=GetPixelChannels(image);
792 q+=quantum_info->pad;
796 for (x=0; x < (ssize_t) number_pixels; x++)
798 pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
799 q=PopShortPixel(quantum_info->endian,pixel,q);
800 pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
801 q=PopShortPixel(quantum_info->endian,pixel,q);
802 pixel=ScaleQuantumToShort(GetPixelRed(image,p));
803 q=PopShortPixel(quantum_info->endian,pixel,q);
804 pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
805 q=PopShortPixel(quantum_info->endian,pixel,q);
806 p+=GetPixelChannels(image);
807 q+=quantum_info->pad;
813 register unsigned int
816 if (quantum_info->format == FloatingPointQuantumFormat)
818 for (x=0; x < (ssize_t) number_pixels; x++)
823 q=PopFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
824 q=PopFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
825 q=PopFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
826 pixel=(float) GetPixelAlpha(image,p);
827 q=PopFloatPixel(quantum_info,pixel,q);
828 p+=GetPixelChannels(image);
829 q+=quantum_info->pad;
833 for (x=0; x < (ssize_t) number_pixels; x++)
835 pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
836 q=PopLongPixel(quantum_info->endian,pixel,q);
837 pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
838 q=PopLongPixel(quantum_info->endian,pixel,q);
839 pixel=ScaleQuantumToLong(GetPixelRed(image,p));
840 q=PopLongPixel(quantum_info->endian,pixel,q);
841 pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
842 q=PopLongPixel(quantum_info->endian,pixel,q);
843 p+=GetPixelChannels(image);
844 q+=quantum_info->pad;
850 if (quantum_info->format == FloatingPointQuantumFormat)
855 for (x=0; x < (ssize_t) number_pixels; x++)
857 q=PopDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
858 q=PopDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
859 q=PopDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
860 pixel=(double) GetPixelAlpha(image,p);
861 q=PopDoublePixel(quantum_info,pixel,q);
862 p+=GetPixelChannels(image);
863 q+=quantum_info->pad;
870 range=GetQuantumRange(quantum_info->depth);
871 for (x=0; x < (ssize_t) number_pixels; x++)
873 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
875 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
877 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
879 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
881 p+=GetPixelChannels(image);
882 q+=quantum_info->pad;
889 static void ExportBGROQuantum(const Image *image,QuantumInfo *quantum_info,
890 const MagickSizeType number_pixels,const Quantum *restrict p,
891 unsigned char *restrict q,ExceptionInfo *exception)
899 assert(exception != (ExceptionInfo *) NULL);
900 assert(exception->signature == MagickSignature);
901 switch (quantum_info->depth)
905 register unsigned char
908 for (x=0; x < (ssize_t) number_pixels; x++)
910 pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
911 q=PopCharPixel(pixel,q);
912 pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
913 q=PopCharPixel(pixel,q);
914 pixel=ScaleQuantumToChar(GetPixelRed(image,p));
915 q=PopCharPixel(pixel,q);
916 pixel=ScaleQuantumToChar(GetPixelOpacity(image,p));
917 q=PopCharPixel(pixel,q);
918 p+=GetPixelChannels(image);
919 q+=quantum_info->pad;
925 register unsigned int
928 range=GetQuantumRange(quantum_info->depth);
929 if (quantum_info->pack == MagickFalse)
943 for (x=0; x < (ssize_t) number_pixels; x++)
945 for (i=0; i < 4; i++)
949 case 0: quantum=GetPixelRed(image,p); break;
950 case 1: quantum=GetPixelGreen(image,p); break;
951 case 2: quantum=GetPixelBlue(image,p); break;
952 case 3: quantum=GetPixelOpacity(image,p); break;
958 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
964 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
970 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
972 q=PopLongPixel(quantum_info->endian,pixel,q);
979 p+=GetPixelChannels(image);
980 q+=quantum_info->pad;
984 if (quantum_info->quantum == 32UL)
986 for (x=0; x < (ssize_t) number_pixels; x++)
988 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
989 q=PopQuantumLongPixel(quantum_info,pixel,q);
990 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
992 q=PopQuantumLongPixel(quantum_info,pixel,q);
993 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
994 q=PopQuantumLongPixel(quantum_info,pixel,q);
995 pixel=(unsigned int) ScaleQuantumToAny(GetPixelOpacity(image,p),
997 q=PopQuantumLongPixel(quantum_info,pixel,q);
998 p+=GetPixelChannels(image);
999 q+=quantum_info->pad;
1003 for (x=0; x < (ssize_t) number_pixels; x++)
1005 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
1006 q=PopQuantumPixel(quantum_info,pixel,q);
1007 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
1008 q=PopQuantumPixel(quantum_info,pixel,q);
1009 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
1010 q=PopQuantumPixel(quantum_info,pixel,q);
1011 pixel=(unsigned int) ScaleQuantumToAny(GetPixelOpacity(image,p),range);
1012 q=PopQuantumPixel(quantum_info,pixel,q);
1013 p+=GetPixelChannels(image);
1014 q+=quantum_info->pad;
1020 register unsigned short
1023 if (quantum_info->format == FloatingPointQuantumFormat)
1025 for (x=0; x < (ssize_t) number_pixels; x++)
1027 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlue(image,p));
1028 q=PopShortPixel(quantum_info->endian,pixel,q);
1029 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelGreen(image,p));
1030 q=PopShortPixel(quantum_info->endian,pixel,q);
1031 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelRed(image,p));
1032 q=PopShortPixel(quantum_info->endian,pixel,q);
1033 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelOpacity(image,p));
1034 q=PopShortPixel(quantum_info->endian,pixel,q);
1035 p+=GetPixelChannels(image);
1036 q+=quantum_info->pad;
1040 for (x=0; x < (ssize_t) number_pixels; x++)
1042 pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
1043 q=PopShortPixel(quantum_info->endian,pixel,q);
1044 pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
1045 q=PopShortPixel(quantum_info->endian,pixel,q);
1046 pixel=ScaleQuantumToShort(GetPixelRed(image,p));
1047 q=PopShortPixel(quantum_info->endian,pixel,q);
1048 pixel=ScaleQuantumToShort(GetPixelOpacity(image,p));
1049 q=PopShortPixel(quantum_info->endian,pixel,q);
1050 p+=GetPixelChannels(image);
1051 q+=quantum_info->pad;
1057 register unsigned int
1060 if (quantum_info->format == FloatingPointQuantumFormat)
1062 for (x=0; x < (ssize_t) number_pixels; x++)
1067 q=PopFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
1068 q=PopFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
1069 q=PopFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
1070 pixel=(float) GetPixelOpacity(image,p);
1071 q=PopFloatPixel(quantum_info,pixel,q);
1072 p+=GetPixelChannels(image);
1073 q+=quantum_info->pad;
1077 for (x=0; x < (ssize_t) number_pixels; x++)
1079 pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
1080 q=PopLongPixel(quantum_info->endian,pixel,q);
1081 pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
1082 q=PopLongPixel(quantum_info->endian,pixel,q);
1083 pixel=ScaleQuantumToLong(GetPixelRed(image,p));
1084 q=PopLongPixel(quantum_info->endian,pixel,q);
1085 pixel=ScaleQuantumToLong(GetPixelOpacity(image,p));
1086 q=PopLongPixel(quantum_info->endian,pixel,q);
1087 p+=GetPixelChannels(image);
1088 q+=quantum_info->pad;
1094 if (quantum_info->format == FloatingPointQuantumFormat)
1099 for (x=0; x < (ssize_t) number_pixels; x++)
1101 q=PopDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
1102 q=PopDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
1103 q=PopDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
1104 pixel=(double) GetPixelOpacity(image,p);
1105 q=PopDoublePixel(quantum_info,pixel,q);
1106 p+=GetPixelChannels(image);
1107 q+=quantum_info->pad;
1114 range=GetQuantumRange(quantum_info->depth);
1115 for (x=0; x < (ssize_t) number_pixels; x++)
1117 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
1119 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
1121 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
1123 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelOpacity(image,p),
1125 p+=GetPixelChannels(image);
1126 q+=quantum_info->pad;
1133 static void ExportBlackQuantum(const Image *image,QuantumInfo *quantum_info,
1134 const MagickSizeType number_pixels,const Quantum *restrict p,
1135 unsigned char *restrict q,ExceptionInfo *exception)
1143 if (image->colorspace != CMYKColorspace)
1145 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1146 "ColorSeparatedImageRequired","`%s'",image->filename);
1149 switch (quantum_info->depth)
1153 register unsigned char
1156 for (x=0; x < (ssize_t) number_pixels; x++)
1158 pixel=ScaleQuantumToChar(GetPixelBlack(image,p));
1159 q=PopCharPixel(pixel,q);
1160 p+=GetPixelChannels(image);
1161 q+=quantum_info->pad;
1167 register unsigned short
1170 if (quantum_info->format == FloatingPointQuantumFormat)
1172 for (x=0; x < (ssize_t) number_pixels; x++)
1174 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlack(image,p));
1175 q=PopShortPixel(quantum_info->endian,pixel,q);
1176 p+=GetPixelChannels(image);
1177 q+=quantum_info->pad;
1181 for (x=0; x < (ssize_t) number_pixels; x++)
1183 pixel=ScaleQuantumToShort(GetPixelBlack(image,p));
1184 q=PopShortPixel(quantum_info->endian,pixel,q);
1185 p+=GetPixelChannels(image);
1186 q+=quantum_info->pad;
1192 register unsigned int
1195 if (quantum_info->format == FloatingPointQuantumFormat)
1197 for (x=0; x < (ssize_t) number_pixels; x++)
1199 q=PopFloatPixel(quantum_info,(float) GetPixelBlack(image,p),q);
1200 p+=GetPixelChannels(image);
1201 q+=quantum_info->pad;
1205 for (x=0; x < (ssize_t) number_pixels; x++)
1207 pixel=ScaleQuantumToLong(GetPixelBlack(image,p));
1208 q=PopLongPixel(quantum_info->endian,pixel,q);
1209 p+=GetPixelChannels(image);
1210 q+=quantum_info->pad;
1216 if (quantum_info->format == FloatingPointQuantumFormat)
1218 for (x=0; x < (ssize_t) number_pixels; x++)
1220 q=PopDoublePixel(quantum_info,(double) GetPixelBlack(image,p),q);
1221 p+=GetPixelChannels(image);
1222 q+=quantum_info->pad;
1229 range=GetQuantumRange(quantum_info->depth);
1230 for (x=0; x < (ssize_t) number_pixels; x++)
1232 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlack(image,p),
1234 p+=GetPixelChannels(image);
1235 q+=quantum_info->pad;
1242 static void ExportBlueQuantum(const Image *image,QuantumInfo *quantum_info,
1243 const MagickSizeType number_pixels,const Quantum *restrict p,
1244 unsigned char *restrict q,ExceptionInfo *exception)
1252 assert(exception != (ExceptionInfo *) NULL);
1253 assert(exception->signature == MagickSignature);
1254 switch (quantum_info->depth)
1258 register unsigned char
1261 for (x=0; x < (ssize_t) number_pixels; x++)
1263 pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
1264 q=PopCharPixel(pixel,q);
1265 p+=GetPixelChannels(image);
1266 q+=quantum_info->pad;
1272 register unsigned short
1275 if (quantum_info->format == FloatingPointQuantumFormat)
1277 for (x=0; x < (ssize_t) number_pixels; x++)
1279 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlue(image,p));
1280 q=PopShortPixel(quantum_info->endian,pixel,q);
1281 p+=GetPixelChannels(image);
1282 q+=quantum_info->pad;
1286 for (x=0; x < (ssize_t) number_pixels; x++)
1288 pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
1289 q=PopShortPixel(quantum_info->endian,pixel,q);
1290 p+=GetPixelChannels(image);
1291 q+=quantum_info->pad;
1297 register unsigned int
1300 if (quantum_info->format == FloatingPointQuantumFormat)
1302 for (x=0; x < (ssize_t) number_pixels; x++)
1304 q=PopFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
1305 p+=GetPixelChannels(image);
1306 q+=quantum_info->pad;
1310 for (x=0; x < (ssize_t) number_pixels; x++)
1312 pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
1313 q=PopLongPixel(quantum_info->endian,pixel,q);
1314 p+=GetPixelChannels(image);
1315 q+=quantum_info->pad;
1321 if (quantum_info->format == FloatingPointQuantumFormat)
1323 for (x=0; x < (ssize_t) number_pixels; x++)
1325 q=PopDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
1326 p+=GetPixelChannels(image);
1327 q+=quantum_info->pad;
1334 range=GetQuantumRange(quantum_info->depth);
1335 for (x=0; x < (ssize_t) number_pixels; x++)
1337 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
1339 p+=GetPixelChannels(image);
1340 q+=quantum_info->pad;
1347 static void ExportCbYCrYQuantum(const Image *image,QuantumInfo *quantum_info,
1348 const MagickSizeType number_pixels,const Quantum *restrict p,
1349 unsigned char *restrict q,ExceptionInfo *exception)
1358 register unsigned int
1367 assert(exception != (ExceptionInfo *) NULL);
1368 assert(exception->signature == MagickSignature);
1371 switch (quantum_info->depth)
1375 if (quantum_info->pack == MagickFalse)
1377 for (x=0; x < (ssize_t) number_pixels; x+=2)
1379 for (i=0; i < 4; i++)
1385 quantum=GetPixelRed(image,p);
1390 quantum=GetPixelGreen(image,p);
1395 quantum=GetPixelBlue(image,p);
1399 cbcr[i]=(Quantum) quantum;
1402 pixel=(unsigned int) ((size_t) (cbcr[1]) << 22 | (size_t)
1403 (cbcr[0]) << 12 | (size_t) (cbcr[2]) << 2);
1404 q=PopLongPixel(quantum_info->endian,pixel,q);
1405 p+=GetPixelChannels(image);
1406 pixel=(unsigned int) ((size_t) (cbcr[3]) << 22 | (size_t)
1407 (cbcr[0]) << 12 | (size_t) (cbcr[2]) << 2);
1408 q=PopLongPixel(quantum_info->endian,pixel,q);
1409 p+=GetPixelChannels(image);
1410 q+=quantum_info->pad;
1421 for (x=0; x < (ssize_t) number_pixels; x+=2)
1423 for (i=0; i < 4; i++)
1429 quantum=GetPixelRed(image,p);
1434 quantum=GetPixelGreen(image,p);
1439 quantum=GetPixelBlue(image,p);
1443 cbcr[i]=(Quantum) quantum;
1446 range=GetQuantumRange(quantum_info->depth);
1447 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(cbcr[1],range),q);
1448 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(cbcr[0],range),q);
1449 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(cbcr[2],range),q);
1450 p+=GetPixelChannels(image);
1451 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(cbcr[3],range),q);
1452 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(cbcr[0],range),q);
1453 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(cbcr[2],range),q);
1454 p+=GetPixelChannels(image);
1455 q+=quantum_info->pad;
1462 static void ExportCMYKQuantum(const Image *image,QuantumInfo *quantum_info,
1463 const MagickSizeType number_pixels,const Quantum *restrict p,
1464 unsigned char *restrict q,ExceptionInfo *exception)
1469 if (image->colorspace != CMYKColorspace)
1471 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1472 "ColorSeparatedImageRequired","`%s'",image->filename);
1475 switch (quantum_info->depth)
1479 register unsigned char
1482 for (x=0; x < (ssize_t) number_pixels; x++)
1484 pixel=ScaleQuantumToChar(GetPixelRed(image,p));
1485 q=PopCharPixel(pixel,q);
1486 pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
1487 q=PopCharPixel(pixel,q);
1488 pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
1489 q=PopCharPixel(pixel,q);
1490 pixel=ScaleQuantumToChar(GetPixelBlack(image,p));
1491 q=PopCharPixel(pixel,q);
1492 p+=GetPixelChannels(image);
1493 q+=quantum_info->pad;
1499 register unsigned short
1502 if (quantum_info->format == FloatingPointQuantumFormat)
1504 for (x=0; x < (ssize_t) number_pixels; x++)
1506 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelRed(image,p));
1507 q=PopShortPixel(quantum_info->endian,pixel,q);
1508 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelGreen(image,p));
1509 q=PopShortPixel(quantum_info->endian,pixel,q);
1510 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlue(image,p));
1511 q=PopShortPixel(quantum_info->endian,pixel,q);
1512 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlack(image,p));
1513 q=PopShortPixel(quantum_info->endian,pixel,q);
1514 p+=GetPixelChannels(image);
1515 q+=quantum_info->pad;
1519 for (x=0; x < (ssize_t) number_pixels; x++)
1521 pixel=ScaleQuantumToShort(GetPixelRed(image,p));
1522 q=PopShortPixel(quantum_info->endian,pixel,q);
1523 pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
1524 q=PopShortPixel(quantum_info->endian,pixel,q);
1525 pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
1526 q=PopShortPixel(quantum_info->endian,pixel,q);
1527 pixel=ScaleQuantumToShort(GetPixelBlack(image,p));
1528 q=PopShortPixel(quantum_info->endian,pixel,q);
1529 p+=GetPixelChannels(image);
1530 q+=quantum_info->pad;
1536 register unsigned int
1539 if (quantum_info->format == FloatingPointQuantumFormat)
1541 for (x=0; x < (ssize_t) number_pixels; x++)
1543 q=PopFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
1544 q=PopFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
1545 q=PopFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
1546 q=PopFloatPixel(quantum_info,(float) GetPixelBlack(image,p),q);
1547 p+=GetPixelChannels(image);
1548 q+=quantum_info->pad;
1552 for (x=0; x < (ssize_t) number_pixels; x++)
1554 pixel=ScaleQuantumToLong(GetPixelRed(image,p));
1555 q=PopLongPixel(quantum_info->endian,pixel,q);
1556 pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
1557 q=PopLongPixel(quantum_info->endian,pixel,q);
1558 pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
1559 q=PopLongPixel(quantum_info->endian,pixel,q);
1560 pixel=ScaleQuantumToLong(GetPixelBlack(image,p));
1561 q=PopLongPixel(quantum_info->endian,pixel,q);
1562 p+=GetPixelChannels(image);
1563 q+=quantum_info->pad;
1569 if (quantum_info->format == FloatingPointQuantumFormat)
1571 for (x=0; x < (ssize_t) number_pixels; x++)
1573 q=PopDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
1574 q=PopDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
1575 q=PopDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
1576 q=PopDoublePixel(quantum_info,(double) GetPixelBlack(image,p),q);
1577 p+=GetPixelChannels(image);
1578 q+=quantum_info->pad;
1588 range=GetQuantumRange(quantum_info->depth);
1589 for (x=0; x < (ssize_t) number_pixels; x++)
1591 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
1593 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
1595 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
1597 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlack(image,p),
1599 p+=GetPixelChannels(image);
1600 q+=quantum_info->pad;
1607 static void ExportCMYKAQuantum(const Image *image,QuantumInfo *quantum_info,
1608 const MagickSizeType number_pixels,const Quantum *restrict p,
1609 unsigned char *restrict q,ExceptionInfo *exception)
1614 if (image->colorspace != CMYKColorspace)
1616 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1617 "ColorSeparatedImageRequired","`%s'",image->filename);
1620 switch (quantum_info->depth)
1624 register unsigned char
1627 for (x=0; x < (ssize_t) number_pixels; x++)
1629 pixel=ScaleQuantumToChar(GetPixelRed(image,p));
1630 q=PopCharPixel(pixel,q);
1631 pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
1632 q=PopCharPixel(pixel,q);
1633 pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
1634 q=PopCharPixel(pixel,q);
1635 pixel=ScaleQuantumToChar(GetPixelBlack(image,p));
1636 q=PopCharPixel(pixel,q);
1637 pixel=ScaleQuantumToChar(GetPixelAlpha(image,p));
1638 q=PopCharPixel(pixel,q);
1639 p+=GetPixelChannels(image);
1640 q+=quantum_info->pad;
1646 register unsigned short
1649 if (quantum_info->format == FloatingPointQuantumFormat)
1651 for (x=0; x < (ssize_t) number_pixels; x++)
1653 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelRed(image,p));
1654 q=PopShortPixel(quantum_info->endian,pixel,q);
1655 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelGreen(image,p));
1656 q=PopShortPixel(quantum_info->endian,pixel,q);
1657 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlue(image,p));
1658 q=PopShortPixel(quantum_info->endian,pixel,q);
1659 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlack(image,p));
1660 q=PopShortPixel(quantum_info->endian,pixel,q);
1661 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelAlpha(image,p));
1662 q=PopShortPixel(quantum_info->endian,pixel,q);
1663 p+=GetPixelChannels(image);
1664 q+=quantum_info->pad;
1668 for (x=0; x < (ssize_t) number_pixels; x++)
1670 pixel=ScaleQuantumToShort(GetPixelRed(image,p));
1671 q=PopShortPixel(quantum_info->endian,pixel,q);
1672 pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
1673 q=PopShortPixel(quantum_info->endian,pixel,q);
1674 pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
1675 q=PopShortPixel(quantum_info->endian,pixel,q);
1676 pixel=ScaleQuantumToShort(GetPixelBlack(image,p));
1677 q=PopShortPixel(quantum_info->endian,pixel,q);
1678 pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
1679 q=PopShortPixel(quantum_info->endian,pixel,q);
1680 p+=GetPixelChannels(image);
1681 q+=quantum_info->pad;
1687 register unsigned int
1690 if (quantum_info->format == FloatingPointQuantumFormat)
1692 for (x=0; x < (ssize_t) number_pixels; x++)
1697 q=PopFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
1698 q=PopFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
1699 q=PopFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
1700 q=PopFloatPixel(quantum_info,(float) GetPixelBlack(image,p),q);
1701 pixel=(float) (GetPixelAlpha(image,p));
1702 q=PopFloatPixel(quantum_info,pixel,q);
1703 p+=GetPixelChannels(image);
1704 q+=quantum_info->pad;
1708 for (x=0; x < (ssize_t) number_pixels; x++)
1710 pixel=ScaleQuantumToLong(GetPixelRed(image,p));
1711 q=PopLongPixel(quantum_info->endian,pixel,q);
1712 pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
1713 q=PopLongPixel(quantum_info->endian,pixel,q);
1714 pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
1715 q=PopLongPixel(quantum_info->endian,pixel,q);
1716 pixel=ScaleQuantumToLong(GetPixelBlack(image,p));
1717 q=PopLongPixel(quantum_info->endian,pixel,q);
1718 pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
1719 q=PopLongPixel(quantum_info->endian,pixel,q);
1720 p+=GetPixelChannels(image);
1721 q+=quantum_info->pad;
1727 if (quantum_info->format == FloatingPointQuantumFormat)
1732 for (x=0; x < (ssize_t) number_pixels; x++)
1734 q=PopDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
1735 q=PopDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
1736 q=PopDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
1737 q=PopDoublePixel(quantum_info,(double) GetPixelBlack(image,p),q);
1738 pixel=(double) (GetPixelAlpha(image,p));
1739 q=PopDoublePixel(quantum_info,pixel,q);
1740 p+=GetPixelChannels(image);
1741 q+=quantum_info->pad;
1751 range=GetQuantumRange(quantum_info->depth);
1752 for (x=0; x < (ssize_t) number_pixels; x++)
1754 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
1756 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
1758 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
1760 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlack(image,p),
1762 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
1764 p+=GetPixelChannels(image);
1765 q+=quantum_info->pad;
1772 static void ExportCMYKOQuantum(const Image *image,QuantumInfo *quantum_info,
1773 const MagickSizeType number_pixels,const Quantum *restrict p,
1774 unsigned char *restrict q,ExceptionInfo *exception)
1779 if (image->colorspace != CMYKColorspace)
1781 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1782 "ColorSeparatedImageRequired","`%s'",image->filename);
1785 switch (quantum_info->depth)
1789 register unsigned char
1792 for (x=0; x < (ssize_t) number_pixels; x++)
1794 pixel=ScaleQuantumToChar(GetPixelRed(image,p));
1795 q=PopCharPixel(pixel,q);
1796 pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
1797 q=PopCharPixel(pixel,q);
1798 pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
1799 q=PopCharPixel(pixel,q);
1800 pixel=ScaleQuantumToChar(GetPixelBlack(image,p));
1801 q=PopCharPixel(pixel,q);
1802 pixel=ScaleQuantumToChar(GetPixelOpacity(image,p));
1803 q=PopCharPixel(pixel,q);
1804 p+=GetPixelChannels(image);
1805 q+=quantum_info->pad;
1811 register unsigned short
1814 if (quantum_info->format == FloatingPointQuantumFormat)
1816 for (x=0; x < (ssize_t) number_pixels; x++)
1818 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelRed(image,p));
1819 q=PopShortPixel(quantum_info->endian,pixel,q);
1820 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelGreen(image,p));
1821 q=PopShortPixel(quantum_info->endian,pixel,q);
1822 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlue(image,p));
1823 q=PopShortPixel(quantum_info->endian,pixel,q);
1824 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlack(image,p));
1825 q=PopShortPixel(quantum_info->endian,pixel,q);
1826 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelOpacity(image,p));
1827 q=PopShortPixel(quantum_info->endian,pixel,q);
1828 p+=GetPixelChannels(image);
1829 q+=quantum_info->pad;
1833 for (x=0; x < (ssize_t) number_pixels; x++)
1835 pixel=ScaleQuantumToShort(GetPixelRed(image,p));
1836 q=PopShortPixel(quantum_info->endian,pixel,q);
1837 pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
1838 q=PopShortPixel(quantum_info->endian,pixel,q);
1839 pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
1840 q=PopShortPixel(quantum_info->endian,pixel,q);
1841 pixel=ScaleQuantumToShort(GetPixelBlack(image,p));
1842 q=PopShortPixel(quantum_info->endian,pixel,q);
1843 pixel=ScaleQuantumToShort(GetPixelOpacity(image,p));
1844 q=PopShortPixel(quantum_info->endian,pixel,q);
1845 p+=GetPixelChannels(image);
1846 q+=quantum_info->pad;
1852 register unsigned int
1855 if (quantum_info->format == FloatingPointQuantumFormat)
1857 for (x=0; x < (ssize_t) number_pixels; x++)
1862 q=PopFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
1863 q=PopFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
1864 q=PopFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
1865 q=PopFloatPixel(quantum_info,(float) GetPixelBlack(image,p),q);
1866 pixel=(float) (GetPixelOpacity(image,p));
1867 q=PopFloatPixel(quantum_info,pixel,q);
1868 p+=GetPixelChannels(image);
1869 q+=quantum_info->pad;
1873 for (x=0; x < (ssize_t) number_pixels; x++)
1875 pixel=ScaleQuantumToLong(GetPixelRed(image,p));
1876 q=PopLongPixel(quantum_info->endian,pixel,q);
1877 pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
1878 q=PopLongPixel(quantum_info->endian,pixel,q);
1879 pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
1880 q=PopLongPixel(quantum_info->endian,pixel,q);
1881 pixel=ScaleQuantumToLong(GetPixelBlack(image,p));
1882 q=PopLongPixel(quantum_info->endian,pixel,q);
1883 pixel=ScaleQuantumToLong(GetPixelOpacity(image,p));
1884 q=PopLongPixel(quantum_info->endian,pixel,q);
1885 p+=GetPixelChannels(image);
1886 q+=quantum_info->pad;
1892 if (quantum_info->format == FloatingPointQuantumFormat)
1897 for (x=0; x < (ssize_t) number_pixels; x++)
1899 q=PopDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
1900 q=PopDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
1901 q=PopDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
1902 q=PopDoublePixel(quantum_info,(double) GetPixelBlack(image,p),q);
1903 pixel=(double) (GetPixelOpacity(image,p));
1904 q=PopDoublePixel(quantum_info,pixel,q);
1905 p+=GetPixelChannels(image);
1906 q+=quantum_info->pad;
1916 range=GetQuantumRange(quantum_info->depth);
1917 for (x=0; x < (ssize_t) number_pixels; x++)
1919 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
1921 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
1923 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
1925 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlack(image,p),
1927 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelOpacity(image,p),
1929 p+=GetPixelChannels(image);
1930 q+=quantum_info->pad;
1937 static void ExportGrayQuantum(const Image *image,QuantumInfo *quantum_info,
1938 const MagickSizeType number_pixels,const Quantum *restrict p,
1939 unsigned char *restrict q,ExceptionInfo *exception)
1947 assert(exception != (ExceptionInfo *) NULL);
1948 assert(exception->signature == MagickSignature);
1949 switch (quantum_info->depth)
1956 register unsigned char
1965 if (quantum_info->min_is_white != MagickFalse)
1970 threshold=QuantumRange/2.0;
1971 for (x=((ssize_t) number_pixels-7); x > 0; x-=8)
1974 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 7;
1975 p+=GetPixelChannels(image);
1976 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 6;
1977 p+=GetPixelChannels(image);
1978 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 5;
1979 p+=GetPixelChannels(image);
1980 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 4;
1981 p+=GetPixelChannels(image);
1982 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 3;
1983 p+=GetPixelChannels(image);
1984 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 2;
1985 p+=GetPixelChannels(image);
1986 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 1;
1987 p+=GetPixelChannels(image);
1988 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 0;
1989 p+=GetPixelChannels(image);
1992 if ((number_pixels % 8) != 0)
1995 for (bit=7; bit >= (ssize_t) (8-(number_pixels % 8)); bit--)
1997 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << bit;
1998 p+=GetPixelChannels(image);
2006 register unsigned char
2009 for (x=0; x < (ssize_t) (number_pixels-1) ; x+=2)
2011 pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
2012 *q=(((pixel >> 4) & 0xf) << 4);
2013 p+=GetPixelChannels(image);
2014 pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
2016 p+=GetPixelChannels(image);
2019 if ((number_pixels % 2) != 0)
2021 pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
2022 *q=(((pixel >> 4) & 0xf) << 4);
2023 p+=GetPixelChannels(image);
2030 register unsigned char
2033 for (x=0; x < (ssize_t) number_pixels; x++)
2035 pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
2036 q=PopCharPixel(pixel,q);
2037 p+=GetPixelChannels(image);
2038 q+=quantum_info->pad;
2044 range=GetQuantumRange(quantum_info->depth);
2045 if (quantum_info->pack == MagickFalse)
2047 register unsigned int
2050 for (x=0; x < (ssize_t) (number_pixels-2); x+=3)
2052 pixel=(unsigned int) (ScaleQuantumToAny(ClampToQuantum(
2053 GetPixelLuma(image,p+2*GetPixelChannels(image))),range) << 22 |
2054 ScaleQuantumToAny(ClampToQuantum(GetPixelLuma(image,p+
2055 GetPixelChannels(image))),range) << 12 | ScaleQuantumToAny(
2056 ClampToQuantum(GetPixelLuma(image,p)),range) << 2);
2057 q=PopLongPixel(quantum_info->endian,pixel,q);
2058 p+=3*GetPixelChannels(image);
2059 q+=quantum_info->pad;
2061 if (x < (ssize_t) number_pixels)
2064 if (x++ < (ssize_t) (number_pixels-1))
2065 pixel|=ScaleQuantumToAny(ClampToQuantum(GetPixelLuma(image,p+
2066 GetPixelChannels(image))),range) << 12;
2067 if (x++ < (ssize_t) number_pixels)
2068 pixel|=ScaleQuantumToAny(ClampToQuantum(GetPixelLuma(image,p)),
2070 q=PopLongPixel(quantum_info->endian,pixel,q);
2074 for (x=0; x < (ssize_t) number_pixels; x++)
2076 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(ClampToQuantum(
2077 GetPixelLuma(image,p)),range),q);
2078 p+=GetPixelChannels(image);
2079 q+=quantum_info->pad;
2085 register unsigned short
2088 range=GetQuantumRange(quantum_info->depth);
2089 if (quantum_info->pack == MagickFalse)
2091 for (x=0; x < (ssize_t) number_pixels; x++)
2093 pixel=ScaleQuantumToShort(ClampToQuantum(GetPixelLuma(image,p)));
2094 q=PopShortPixel(quantum_info->endian,(unsigned short) (pixel >> 4),
2096 p+=GetPixelChannels(image);
2097 q+=quantum_info->pad;
2101 for (x=0; x < (ssize_t) number_pixels; x++)
2103 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(ClampToQuantum(
2104 GetPixelLuma(image,p)),range),q);
2105 p+=GetPixelChannels(image);
2106 q+=quantum_info->pad;
2112 register unsigned short
2115 if (quantum_info->format == FloatingPointQuantumFormat)
2117 for (x=0; x < (ssize_t) number_pixels; x++)
2119 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelLuma(image,p));
2120 q=PopShortPixel(quantum_info->endian,pixel,q);
2121 p+=GetPixelChannels(image);
2122 q+=quantum_info->pad;
2126 for (x=0; x < (ssize_t) number_pixels; x++)
2128 pixel=ScaleQuantumToShort(ClampToQuantum(GetPixelLuma(image,p)));
2129 q=PopShortPixel(quantum_info->endian,pixel,q);
2130 p+=GetPixelChannels(image);
2131 q+=quantum_info->pad;
2137 register unsigned int
2140 if (quantum_info->format == FloatingPointQuantumFormat)
2142 for (x=0; x < (ssize_t) number_pixels; x++)
2147 pixel=(float) GetPixelLuma(image,p);
2148 q=PopFloatPixel(quantum_info,pixel,q);
2149 p+=GetPixelChannels(image);
2150 q+=quantum_info->pad;
2154 for (x=0; x < (ssize_t) number_pixels; x++)
2156 pixel=ScaleQuantumToLong(ClampToQuantum(GetPixelLuma(image,p)));
2157 q=PopLongPixel(quantum_info->endian,pixel,q);
2158 p+=GetPixelChannels(image);
2159 q+=quantum_info->pad;
2165 if (quantum_info->format == FloatingPointQuantumFormat)
2167 for (x=0; x < (ssize_t) number_pixels; x++)
2172 pixel=GetPixelLuma(image,p);
2173 q=PopDoublePixel(quantum_info,pixel,q);
2174 p+=GetPixelChannels(image);
2175 q+=quantum_info->pad;
2182 range=GetQuantumRange(quantum_info->depth);
2183 for (x=0; x < (ssize_t) number_pixels; x++)
2185 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(ClampToQuantum(
2186 GetPixelLuma(image,p)),range),q);
2187 p+=GetPixelChannels(image);
2188 q+=quantum_info->pad;
2195 static void ExportGrayAlphaQuantum(const Image *image,QuantumInfo *quantum_info,
2196 const MagickSizeType number_pixels,const Quantum *restrict p,
2197 unsigned char *restrict q,ExceptionInfo *exception)
2205 assert(exception != (ExceptionInfo *) NULL);
2206 assert(exception->signature == MagickSignature);
2207 switch (quantum_info->depth)
2214 register unsigned char
2224 if (quantum_info->min_is_white == MagickFalse)
2229 threshold=QuantumRange/2.0;
2230 for (x=((ssize_t) number_pixels-3); x > 0; x-=4)
2233 *q|=(GetPixelLuma(image,p) > threshold ? black : white) << 7;
2234 pixel=(unsigned char) (GetPixelAlpha(image,p) == OpaqueAlpha ?
2236 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 6);
2237 p+=GetPixelChannels(image);
2238 *q|=(GetPixelLuma(image,p) > threshold ? black : white) << 5;
2239 pixel=(unsigned char) (GetPixelAlpha(image,p) == OpaqueAlpha ?
2241 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 4);
2242 p+=GetPixelChannels(image);
2243 *q|=(GetPixelLuma(image,p) > threshold ? black : white) << 3;
2244 pixel=(unsigned char) (GetPixelAlpha(image,p) == OpaqueAlpha ?
2246 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 2);
2247 p+=GetPixelChannels(image);
2248 *q|=(GetPixelLuma(image,p) > threshold ? black : white) << 1;
2249 pixel=(unsigned char) (GetPixelAlpha(image,p) == OpaqueAlpha ?
2251 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 0);
2252 p+=GetPixelChannels(image);
2255 if ((number_pixels % 4) != 0)
2258 for (bit=0; bit <= (ssize_t) (number_pixels % 4); bit+=2)
2260 *q|=(GetPixelLuma(image,p) > threshold ? black : white) <<
2262 pixel=(unsigned char) (GetPixelAlpha(image,p) == OpaqueAlpha ?
2264 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << (unsigned char)
2266 p+=GetPixelChannels(image);
2274 register unsigned char
2277 for (x=0; x < (ssize_t) number_pixels ; x++)
2279 pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
2280 *q=(((pixel >> 4) & 0xf) << 4);
2281 pixel=(unsigned char) (16*QuantumScale*GetPixelAlpha(image,p)+0.5);
2283 p+=GetPixelChannels(image);
2290 register unsigned char
2293 for (x=0; x < (ssize_t) number_pixels; x++)
2295 pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
2296 q=PopCharPixel(pixel,q);
2297 pixel=ScaleQuantumToChar(GetPixelAlpha(image,p));
2298 q=PopCharPixel(pixel,q);
2299 p+=GetPixelChannels(image);
2300 q+=quantum_info->pad;
2306 register unsigned short
2309 if (quantum_info->format == FloatingPointQuantumFormat)
2311 for (x=0; x < (ssize_t) number_pixels; x++)
2313 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelLuma(image,p));
2314 q=PopShortPixel(quantum_info->endian,pixel,q);
2315 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelAlpha(image,p));
2316 q=PopShortPixel(quantum_info->endian,pixel,q);
2317 p+=GetPixelChannels(image);
2318 q+=quantum_info->pad;
2322 for (x=0; x < (ssize_t) number_pixels; x++)
2324 pixel=ScaleQuantumToShort(ClampToQuantum(GetPixelLuma(image,p)));
2325 q=PopShortPixel(quantum_info->endian,pixel,q);
2326 pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
2327 q=PopShortPixel(quantum_info->endian,pixel,q);
2328 p+=GetPixelChannels(image);
2329 q+=quantum_info->pad;
2335 register unsigned int
2338 if (quantum_info->format == FloatingPointQuantumFormat)
2340 for (x=0; x < (ssize_t) number_pixels; x++)
2345 pixel=(float) GetPixelLuma(image,p);
2346 q=PopFloatPixel(quantum_info,pixel,q);
2347 pixel=(float) (GetPixelAlpha(image,p));
2348 q=PopFloatPixel(quantum_info,pixel,q);
2349 p+=GetPixelChannels(image);
2350 q+=quantum_info->pad;
2354 for (x=0; x < (ssize_t) number_pixels; x++)
2356 pixel=ScaleQuantumToLong(ClampToQuantum(GetPixelLuma(image,p)));
2357 q=PopLongPixel(quantum_info->endian,pixel,q);
2358 pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
2359 q=PopLongPixel(quantum_info->endian,pixel,q);
2360 p+=GetPixelChannels(image);
2361 q+=quantum_info->pad;
2367 if (quantum_info->format == FloatingPointQuantumFormat)
2369 for (x=0; x < (ssize_t) number_pixels; x++)
2374 pixel=GetPixelLuma(image,p);
2375 q=PopDoublePixel(quantum_info,pixel,q);
2376 pixel=(double) (GetPixelAlpha(image,p));
2377 q=PopDoublePixel(quantum_info,pixel,q);
2378 p+=GetPixelChannels(image);
2379 q+=quantum_info->pad;
2386 range=GetQuantumRange(quantum_info->depth);
2387 for (x=0; x < (ssize_t) number_pixels; x++)
2389 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(ClampToQuantum(
2390 GetPixelLuma(image,p)),range),q);
2391 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
2393 p+=GetPixelChannels(image);
2394 q+=quantum_info->pad;
2401 static void ExportGreenQuantum(const Image *image,QuantumInfo *quantum_info,
2402 const MagickSizeType number_pixels,const Quantum *restrict p,
2403 unsigned char *restrict q,ExceptionInfo *exception)
2411 assert(exception != (ExceptionInfo *) NULL);
2412 assert(exception->signature == MagickSignature);
2413 switch (quantum_info->depth)
2417 register unsigned char
2420 for (x=0; x < (ssize_t) number_pixels; x++)
2422 pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
2423 q=PopCharPixel(pixel,q);
2424 p+=GetPixelChannels(image);
2425 q+=quantum_info->pad;
2431 register unsigned short
2434 if (quantum_info->format == FloatingPointQuantumFormat)
2436 for (x=0; x < (ssize_t) number_pixels; x++)
2438 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelGreen(image,p));
2439 q=PopShortPixel(quantum_info->endian,pixel,q);
2440 p+=GetPixelChannels(image);
2441 q+=quantum_info->pad;
2445 for (x=0; x < (ssize_t) number_pixels; x++)
2447 pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
2448 q=PopShortPixel(quantum_info->endian,pixel,q);
2449 p+=GetPixelChannels(image);
2450 q+=quantum_info->pad;
2456 register unsigned int
2459 if (quantum_info->format == FloatingPointQuantumFormat)
2461 for (x=0; x < (ssize_t) number_pixels; x++)
2463 q=PopFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
2464 p+=GetPixelChannels(image);
2465 q+=quantum_info->pad;
2469 for (x=0; x < (ssize_t) number_pixels; x++)
2471 pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
2472 q=PopLongPixel(quantum_info->endian,pixel,q);
2473 p+=GetPixelChannels(image);
2474 q+=quantum_info->pad;
2480 if (quantum_info->format == FloatingPointQuantumFormat)
2482 for (x=0; x < (ssize_t) number_pixels; x++)
2484 q=PopDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
2485 p+=GetPixelChannels(image);
2486 q+=quantum_info->pad;
2493 range=GetQuantumRange(quantum_info->depth);
2494 for (x=0; x < (ssize_t) number_pixels; x++)
2496 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
2498 p+=GetPixelChannels(image);
2499 q+=quantum_info->pad;
2506 static void ExportIndexQuantum(const Image *image,QuantumInfo *quantum_info,
2507 const MagickSizeType number_pixels,const Quantum *restrict p,
2508 unsigned char *restrict q,ExceptionInfo *exception)
2516 if (image->storage_class != PseudoClass)
2518 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2519 "ColormappedImageRequired","`%s'",image->filename);
2522 switch (quantum_info->depth)
2526 register unsigned char
2529 for (x=((ssize_t) number_pixels-7); x > 0; x-=8)
2531 pixel=(unsigned char) GetPixelIndex(image,p);
2532 *q=((pixel & 0x01) << 7);
2533 p+=GetPixelChannels(image);
2534 pixel=(unsigned char) GetPixelIndex(image,p);
2535 *q|=((pixel & 0x01) << 6);
2536 p+=GetPixelChannels(image);
2537 pixel=(unsigned char) GetPixelIndex(image,p);
2538 *q|=((pixel & 0x01) << 5);
2539 p+=GetPixelChannels(image);
2540 pixel=(unsigned char) GetPixelIndex(image,p);
2541 *q|=((pixel & 0x01) << 4);
2542 p+=GetPixelChannels(image);
2543 pixel=(unsigned char) GetPixelIndex(image,p);
2544 *q|=((pixel & 0x01) << 3);
2545 p+=GetPixelChannels(image);
2546 pixel=(unsigned char) GetPixelIndex(image,p);
2547 *q|=((pixel & 0x01) << 2);
2548 p+=GetPixelChannels(image);
2549 pixel=(unsigned char) GetPixelIndex(image,p);
2550 *q|=((pixel & 0x01) << 1);
2551 p+=GetPixelChannels(image);
2552 pixel=(unsigned char) GetPixelIndex(image,p);
2553 *q|=((pixel & 0x01) << 0);
2554 p+=GetPixelChannels(image);
2557 if ((number_pixels % 8) != 0)
2560 for (bit=7; bit >= (ssize_t) (8-(number_pixels % 8)); bit--)
2562 pixel=(unsigned char) GetPixelIndex(image,p);
2563 *q|=((pixel & 0x01) << (unsigned char) bit);
2564 p+=GetPixelChannels(image);
2572 register unsigned char
2575 for (x=0; x < (ssize_t) (number_pixels-1) ; x+=2)
2577 pixel=(unsigned char) GetPixelIndex(image,p);
2578 *q=((pixel & 0xf) << 4);
2579 p+=GetPixelChannels(image);
2580 pixel=(unsigned char) GetPixelIndex(image,p);
2581 *q|=((pixel & 0xf) << 0);
2582 p+=GetPixelChannels(image);
2585 if ((number_pixels % 2) != 0)
2587 pixel=(unsigned char) GetPixelIndex(image,p);
2588 *q=((pixel & 0xf) << 4);
2589 p+=GetPixelChannels(image);
2596 for (x=0; x < (ssize_t) number_pixels; x++)
2598 q=PopCharPixel((unsigned char) GetPixelIndex(image,p),q);
2599 p+=GetPixelChannels(image);
2600 q+=quantum_info->pad;
2606 if (quantum_info->format == FloatingPointQuantumFormat)
2608 for (x=0; x < (ssize_t) number_pixels; x++)
2610 q=PopShortPixel(quantum_info->endian,SinglePrecisionToHalf(
2611 QuantumScale*GetPixelIndex(image,p)),q);
2612 p+=GetPixelChannels(image);
2613 q+=quantum_info->pad;
2617 for (x=0; x < (ssize_t) number_pixels; x++)
2619 q=PopShortPixel(quantum_info->endian,(unsigned short)
2620 GetPixelIndex(image,p),q);
2621 p+=GetPixelChannels(image);
2622 q+=quantum_info->pad;
2628 if (quantum_info->format == FloatingPointQuantumFormat)
2630 for (x=0; x < (ssize_t) number_pixels; x++)
2632 q=PopFloatPixel(quantum_info,(float) GetPixelIndex(image,p),q);
2633 p+=GetPixelChannels(image);
2634 q+=quantum_info->pad;
2638 for (x=0; x < (ssize_t) number_pixels; x++)
2640 q=PopLongPixel(quantum_info->endian,(unsigned int)
2641 GetPixelIndex(image,p),q);
2642 p+=GetPixelChannels(image);
2643 q+=quantum_info->pad;
2649 if (quantum_info->format == FloatingPointQuantumFormat)
2651 for (x=0; x < (ssize_t) number_pixels; x++)
2653 q=PopDoublePixel(quantum_info,(double) GetPixelIndex(image,p),q);
2654 p+=GetPixelChannels(image);
2655 q+=quantum_info->pad;
2662 for (x=0; x < (ssize_t) number_pixels; x++)
2664 q=PopQuantumPixel(quantum_info,GetPixelIndex(image,p),q);
2665 p+=GetPixelChannels(image);
2666 q+=quantum_info->pad;
2673 static void ExportIndexAlphaQuantum(const Image *image,
2674 QuantumInfo *quantum_info,const MagickSizeType number_pixels,
2675 const Quantum *restrict p,unsigned char *restrict q,ExceptionInfo *exception)
2683 if (image->storage_class != PseudoClass)
2685 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2686 "ColormappedImageRequired","`%s'",image->filename);
2689 switch (quantum_info->depth)
2693 register unsigned char
2696 for (x=((ssize_t) number_pixels-3); x > 0; x-=4)
2698 pixel=(unsigned char) GetPixelIndex(image,p);
2699 *q=((pixel & 0x01) << 7);
2700 pixel=(unsigned char) (GetPixelAlpha(image,p) == (Quantum)
2701 TransparentAlpha ? 1 : 0);
2702 *q|=((pixel & 0x01) << 6);
2703 p+=GetPixelChannels(image);
2704 pixel=(unsigned char) GetPixelIndex(image,p);
2705 *q|=((pixel & 0x01) << 5);
2706 pixel=(unsigned char) (GetPixelAlpha(image,p) == (Quantum)
2707 TransparentAlpha ? 1 : 0);
2708 *q|=((pixel & 0x01) << 4);
2709 p+=GetPixelChannels(image);
2710 pixel=(unsigned char) GetPixelIndex(image,p);
2711 *q|=((pixel & 0x01) << 3);
2712 pixel=(unsigned char) (GetPixelAlpha(image,p) == (Quantum)
2713 TransparentAlpha ? 1 : 0);
2714 *q|=((pixel & 0x01) << 2);
2715 p+=GetPixelChannels(image);
2716 pixel=(unsigned char) GetPixelIndex(image,p);
2717 *q|=((pixel & 0x01) << 1);
2718 pixel=(unsigned char) (GetPixelAlpha(image,p) == (Quantum)
2719 TransparentAlpha ? 1 : 0);
2720 *q|=((pixel & 0x01) << 0);
2721 p+=GetPixelChannels(image);
2724 if ((number_pixels % 4) != 0)
2727 for (bit=3; bit >= (ssize_t) (4-(number_pixels % 4)); bit-=2)
2729 pixel=(unsigned char) GetPixelIndex(image,p);
2730 *q|=((pixel & 0x01) << (unsigned char) (bit+4));
2731 pixel=(unsigned char) (GetPixelAlpha(image,p) == (Quantum)
2732 TransparentAlpha ? 1 : 0);
2733 *q|=((pixel & 0x01) << (unsigned char) (bit+4-1));
2734 p+=GetPixelChannels(image);
2742 register unsigned char
2745 for (x=0; x < (ssize_t) number_pixels ; x++)
2747 pixel=(unsigned char) GetPixelIndex(image,p);
2748 *q=((pixel & 0xf) << 4);
2749 pixel=(unsigned char) (16*QuantumScale*GetPixelAlpha(image,p)+0.5);
2750 *q|=((pixel & 0xf) << 0);
2751 p+=GetPixelChannels(image);
2758 register unsigned char
2761 for (x=0; x < (ssize_t) number_pixels; x++)
2763 q=PopCharPixel((unsigned char) GetPixelIndex(image,p),q);
2764 pixel=ScaleQuantumToChar(GetPixelAlpha(image,p));
2765 q=PopCharPixel(pixel,q);
2766 p+=GetPixelChannels(image);
2767 q+=quantum_info->pad;
2773 register unsigned short
2776 if (quantum_info->format == FloatingPointQuantumFormat)
2778 for (x=0; x < (ssize_t) number_pixels; x++)
2780 q=PopShortPixel(quantum_info->endian,(unsigned short)
2781 GetPixelIndex(image,p),q);
2782 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelAlpha(image,p));
2783 q=PopShortPixel(quantum_info->endian,pixel,q);
2784 p+=GetPixelChannels(image);
2785 q+=quantum_info->pad;
2789 for (x=0; x < (ssize_t) number_pixels; x++)
2791 q=PopShortPixel(quantum_info->endian,(unsigned short)
2792 GetPixelIndex(image,p),q);
2793 pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
2794 q=PopShortPixel(quantum_info->endian,pixel,q);
2795 p+=GetPixelChannels(image);
2796 q+=quantum_info->pad;
2802 register unsigned int
2805 if (quantum_info->format == FloatingPointQuantumFormat)
2807 for (x=0; x < (ssize_t) number_pixels; x++)
2812 q=PopFloatPixel(quantum_info,(float) GetPixelIndex(image,p),q);
2813 pixel=(float) GetPixelAlpha(image,p);
2814 q=PopFloatPixel(quantum_info,pixel,q);
2815 p+=GetPixelChannels(image);
2816 q+=quantum_info->pad;
2820 for (x=0; x < (ssize_t) number_pixels; x++)
2822 q=PopLongPixel(quantum_info->endian,(unsigned int)
2823 GetPixelIndex(image,p),q);
2824 pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
2825 q=PopLongPixel(quantum_info->endian,pixel,q);
2826 p+=GetPixelChannels(image);
2827 q+=quantum_info->pad;
2833 if (quantum_info->format == FloatingPointQuantumFormat)
2835 for (x=0; x < (ssize_t) number_pixels; x++)
2840 q=PopDoublePixel(quantum_info,(double) GetPixelIndex(image,p),q);
2841 pixel=(double) GetPixelAlpha(image,p);
2842 q=PopDoublePixel(quantum_info,pixel,q);
2843 p+=GetPixelChannels(image);
2844 q+=quantum_info->pad;
2854 range=GetQuantumRange(quantum_info->depth);
2855 for (x=0; x < (ssize_t) number_pixels; x++)
2857 q=PopQuantumPixel(quantum_info,GetPixelIndex(image,p),q);
2858 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
2860 p+=GetPixelChannels(image);
2861 q+=quantum_info->pad;
2868 static void ExportOpacityQuantum(const Image *image,QuantumInfo *quantum_info,
2869 const MagickSizeType number_pixels,const Quantum *restrict p,
2870 unsigned char *restrict q,ExceptionInfo *exception)
2878 assert(exception != (ExceptionInfo *) NULL);
2879 assert(exception->signature == MagickSignature);
2880 switch (quantum_info->depth)
2884 register unsigned char
2887 for (x=0; x < (ssize_t) number_pixels; x++)
2889 pixel=ScaleQuantumToChar(GetPixelOpacity(image,p));
2890 q=PopCharPixel(pixel,q);
2891 p+=GetPixelChannels(image);
2892 q+=quantum_info->pad;
2898 register unsigned short
2901 if (quantum_info->format == FloatingPointQuantumFormat)
2903 for (x=0; x < (ssize_t) number_pixels; x++)
2905 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelOpacity(image,p));
2906 q=PopShortPixel(quantum_info->endian,pixel,q);
2907 p+=GetPixelChannels(image);
2908 q+=quantum_info->pad;
2912 for (x=0; x < (ssize_t) number_pixels; x++)
2914 pixel=ScaleQuantumToShort(GetPixelOpacity(image,p));
2915 q=PopShortPixel(quantum_info->endian,pixel,q);
2916 p+=GetPixelChannels(image);
2917 q+=quantum_info->pad;
2923 register unsigned int
2926 if (quantum_info->format == FloatingPointQuantumFormat)
2928 for (x=0; x < (ssize_t) number_pixels; x++)
2930 q=PopFloatPixel(quantum_info,(float) GetPixelOpacity(image,p),q);
2931 p+=GetPixelChannels(image);
2932 q+=quantum_info->pad;
2936 for (x=0; x < (ssize_t) number_pixels; x++)
2938 pixel=ScaleQuantumToLong(GetPixelOpacity(image,p));
2939 q=PopLongPixel(quantum_info->endian,pixel,q);
2940 p+=GetPixelChannels(image);
2941 q+=quantum_info->pad;
2947 if (quantum_info->format == FloatingPointQuantumFormat)
2949 for (x=0; x < (ssize_t) number_pixels; x++)
2951 q=PopDoublePixel(quantum_info,(double) GetPixelOpacity(image,p),q);
2952 p+=GetPixelChannels(image);
2953 q+=quantum_info->pad;
2960 range=GetQuantumRange(quantum_info->depth);
2961 for (x=0; x < (ssize_t) number_pixels; x++)
2963 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(
2964 GetPixelOpacity(image,p),range),q);
2965 p+=GetPixelChannels(image);
2966 q+=quantum_info->pad;
2973 static void ExportRedQuantum(const Image *image,QuantumInfo *quantum_info,
2974 const MagickSizeType number_pixels,const Quantum *restrict p,
2975 unsigned char *restrict q,ExceptionInfo *exception)
2983 assert(exception != (ExceptionInfo *) NULL);
2984 assert(exception->signature == MagickSignature);
2985 switch (quantum_info->depth)
2989 register unsigned char
2992 for (x=0; x < (ssize_t) number_pixels; x++)
2994 pixel=ScaleQuantumToChar(GetPixelRed(image,p));
2995 q=PopCharPixel(pixel,q);
2996 p+=GetPixelChannels(image);
2997 q+=quantum_info->pad;
3003 register unsigned short
3006 if (quantum_info->format == FloatingPointQuantumFormat)
3008 for (x=0; x < (ssize_t) number_pixels; x++)
3010 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelRed(image,p));
3011 q=PopShortPixel(quantum_info->endian,pixel,q);
3012 p+=GetPixelChannels(image);
3013 q+=quantum_info->pad;
3017 for (x=0; x < (ssize_t) number_pixels; x++)
3019 pixel=ScaleQuantumToShort(GetPixelRed(image,p));
3020 q=PopShortPixel(quantum_info->endian,pixel,q);
3021 p+=GetPixelChannels(image);
3022 q+=quantum_info->pad;
3028 register unsigned int
3031 if (quantum_info->format == FloatingPointQuantumFormat)
3033 for (x=0; x < (ssize_t) number_pixels; x++)
3035 q=PopFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
3036 p+=GetPixelChannels(image);
3037 q+=quantum_info->pad;
3041 for (x=0; x < (ssize_t) number_pixels; x++)
3043 pixel=ScaleQuantumToLong(GetPixelRed(image,p));
3044 q=PopLongPixel(quantum_info->endian,pixel,q);
3045 p+=GetPixelChannels(image);
3046 q+=quantum_info->pad;
3052 if (quantum_info->format == FloatingPointQuantumFormat)
3054 for (x=0; x < (ssize_t) number_pixels; x++)
3056 q=PopDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
3057 p+=GetPixelChannels(image);
3058 q+=quantum_info->pad;
3065 range=GetQuantumRange(quantum_info->depth);
3066 for (x=0; x < (ssize_t) number_pixels; x++)
3068 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
3070 p+=GetPixelChannels(image);
3071 q+=quantum_info->pad;
3078 static void ExportRGBQuantum(const Image *image,QuantumInfo *quantum_info,
3079 const MagickSizeType number_pixels,const Quantum *restrict p,
3080 unsigned char *restrict q,ExceptionInfo *exception)
3091 assert(exception != (ExceptionInfo *) NULL);
3092 assert(exception->signature == MagickSignature);
3093 switch (quantum_info->depth)
3097 for (x=0; x < (ssize_t) number_pixels; x++)
3099 q=PopCharPixel(ScaleQuantumToChar(GetPixelRed(image,p)),q);
3100 q=PopCharPixel(ScaleQuantumToChar(GetPixelGreen(image,p)),q);
3101 q=PopCharPixel(ScaleQuantumToChar(GetPixelBlue(image,p)),q);
3102 p+=GetPixelChannels(image);
3103 q+=quantum_info->pad;
3109 register unsigned int
3112 range=GetQuantumRange(quantum_info->depth);
3113 if (quantum_info->pack == MagickFalse)
3115 for (x=0; x < (ssize_t) number_pixels; x++)
3117 pixel=(unsigned int) (
3118 ScaleQuantumToAny(GetPixelRed(image,p),range) << 22 |
3119 ScaleQuantumToAny(GetPixelGreen(image,p),range) << 12 |
3120 ScaleQuantumToAny(GetPixelBlue(image,p),range) << 2);
3121 q=PopLongPixel(quantum_info->endian,pixel,q);
3122 p+=GetPixelChannels(image);
3123 q+=quantum_info->pad;
3127 if (quantum_info->quantum == 32UL)
3129 for (x=0; x < (ssize_t) number_pixels; x++)
3131 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
3132 q=PopQuantumLongPixel(quantum_info,pixel,q);
3133 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
3135 q=PopQuantumLongPixel(quantum_info,pixel,q);
3136 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
3137 q=PopQuantumLongPixel(quantum_info,pixel,q);
3138 p+=GetPixelChannels(image);
3139 q+=quantum_info->pad;
3143 for (x=0; x < (ssize_t) number_pixels; x++)
3145 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
3146 q=PopQuantumPixel(quantum_info,pixel,q);
3147 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
3148 q=PopQuantumPixel(quantum_info,pixel,q);
3149 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
3150 q=PopQuantumPixel(quantum_info,pixel,q);
3151 p+=GetPixelChannels(image);
3152 q+=quantum_info->pad;
3158 register unsigned int
3161 range=GetQuantumRange(quantum_info->depth);
3162 if (quantum_info->pack == MagickFalse)
3164 for (x=0; x < (ssize_t) (3*number_pixels-1); x+=2)
3171 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),
3177 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
3183 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),
3185 p+=GetPixelChannels(image);
3189 q=PopShortPixel(quantum_info->endian,(unsigned short) (pixel << 4),
3196 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),
3202 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
3208 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),
3210 p+=GetPixelChannels(image);
3214 q=PopShortPixel(quantum_info->endian,(unsigned short) (pixel << 4),
3216 q+=quantum_info->pad;
3218 for (bit=0; bit < (ssize_t) (3*number_pixels % 2); bit++)
3220 switch ((x+bit) % 3)
3225 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),
3231 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
3237 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),
3239 p+=GetPixelChannels(image);
3243 q=PopShortPixel(quantum_info->endian,(unsigned short) (pixel << 4),
3245 q+=quantum_info->pad;
3248 p+=GetPixelChannels(image);
3251 if (quantum_info->quantum == 32UL)
3253 for (x=0; x < (ssize_t) number_pixels; x++)
3255 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
3256 q=PopQuantumLongPixel(quantum_info,pixel,q);
3257 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
3259 q=PopQuantumLongPixel(quantum_info,pixel,q);
3260 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
3261 q=PopQuantumLongPixel(quantum_info,pixel,q);
3262 p+=GetPixelChannels(image);
3263 q+=quantum_info->pad;
3267 for (x=0; x < (ssize_t) number_pixels; x++)
3269 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
3270 q=PopQuantumPixel(quantum_info,pixel,q);
3271 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
3272 q=PopQuantumPixel(quantum_info,pixel,q);
3273 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
3274 q=PopQuantumPixel(quantum_info,pixel,q);
3275 p+=GetPixelChannels(image);
3276 q+=quantum_info->pad;
3282 register unsigned short
3285 if (quantum_info->format == FloatingPointQuantumFormat)
3287 for (x=0; x < (ssize_t) number_pixels; x++)
3289 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelRed(image,p));
3290 q=PopShortPixel(quantum_info->endian,pixel,q);
3291 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelGreen(image,p));
3292 q=PopShortPixel(quantum_info->endian,pixel,q);
3293 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlue(image,p));
3294 q=PopShortPixel(quantum_info->endian,pixel,q);
3295 p+=GetPixelChannels(image);
3296 q+=quantum_info->pad;
3300 for (x=0; x < (ssize_t) number_pixels; x++)
3302 pixel=ScaleQuantumToShort(GetPixelRed(image,p));
3303 q=PopShortPixel(quantum_info->endian,pixel,q);
3304 pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
3305 q=PopShortPixel(quantum_info->endian,pixel,q);
3306 pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
3307 q=PopShortPixel(quantum_info->endian,pixel,q);
3308 p+=GetPixelChannels(image);
3309 q+=quantum_info->pad;
3315 register unsigned int
3318 if (quantum_info->format == FloatingPointQuantumFormat)
3320 for (x=0; x < (ssize_t) number_pixels; x++)
3322 q=PopFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
3323 q=PopFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
3324 q=PopFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
3325 p+=GetPixelChannels(image);
3326 q+=quantum_info->pad;
3330 for (x=0; x < (ssize_t) number_pixels; x++)
3332 pixel=ScaleQuantumToLong(GetPixelRed(image,p));
3333 q=PopLongPixel(quantum_info->endian,pixel,q);
3334 pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
3335 q=PopLongPixel(quantum_info->endian,pixel,q);
3336 pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
3337 q=PopLongPixel(quantum_info->endian,pixel,q);
3338 p+=GetPixelChannels(image);
3339 q+=quantum_info->pad;
3345 if (quantum_info->format == FloatingPointQuantumFormat)
3347 for (x=0; x < (ssize_t) number_pixels; x++)
3349 q=PopDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
3350 q=PopDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
3351 q=PopDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
3352 p+=GetPixelChannels(image);
3353 q+=quantum_info->pad;
3360 range=GetQuantumRange(quantum_info->depth);
3361 for (x=0; x < (ssize_t) number_pixels; x++)
3363 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
3365 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
3367 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
3369 p+=GetPixelChannels(image);
3370 q+=quantum_info->pad;
3377 static void ExportRGBAQuantum(const Image *image,QuantumInfo *quantum_info,
3378 const MagickSizeType number_pixels,const Quantum *restrict p,
3379 unsigned char *restrict q,ExceptionInfo *exception)
3387 assert(exception != (ExceptionInfo *) NULL);
3388 assert(exception->signature == MagickSignature);
3389 switch (quantum_info->depth)
3393 register unsigned char
3396 for (x=0; x < (ssize_t) number_pixels; x++)
3398 pixel=ScaleQuantumToChar(GetPixelRed(image,p));
3399 q=PopCharPixel(pixel,q);
3400 pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
3401 q=PopCharPixel(pixel,q);
3402 pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
3403 q=PopCharPixel(pixel,q);
3404 pixel=ScaleQuantumToChar(GetPixelAlpha(image,p));
3405 q=PopCharPixel(pixel,q);
3406 p+=GetPixelChannels(image);
3407 q+=quantum_info->pad;
3413 register unsigned int
3416 range=GetQuantumRange(quantum_info->depth);
3417 if (quantum_info->pack == MagickFalse)
3431 for (x=0; x < (ssize_t) number_pixels; x++)
3433 for (i=0; i < 4; i++)
3437 case 0: quantum=GetPixelRed(image,p); break;
3438 case 1: quantum=GetPixelGreen(image,p); break;
3439 case 2: quantum=GetPixelBlue(image,p); break;
3440 case 3: quantum=GetPixelAlpha(image,p); break;
3446 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
3452 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
3458 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
3460 q=PopLongPixel(quantum_info->endian,pixel,q);
3467 p+=GetPixelChannels(image);
3468 q+=quantum_info->pad;
3472 if (quantum_info->quantum == 32UL)
3474 for (x=0; x < (ssize_t) number_pixels; x++)
3476 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
3477 q=PopQuantumLongPixel(quantum_info,pixel,q);
3478 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
3480 q=PopQuantumLongPixel(quantum_info,pixel,q);
3481 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
3482 q=PopQuantumLongPixel(quantum_info,pixel,q);
3483 pixel=(unsigned int) ScaleQuantumToAny(GetPixelAlpha(image,p),
3485 q=PopQuantumLongPixel(quantum_info,pixel,q);
3486 p+=GetPixelChannels(image);
3487 q+=quantum_info->pad;
3491 for (x=0; x < (ssize_t) number_pixels; x++)
3493 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
3494 q=PopQuantumPixel(quantum_info,pixel,q);
3495 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
3496 q=PopQuantumPixel(quantum_info,pixel,q);
3497 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
3498 q=PopQuantumPixel(quantum_info,pixel,q);
3499 pixel=(unsigned int) ScaleQuantumToAny(GetPixelAlpha(image,p),range);
3500 q=PopQuantumPixel(quantum_info,pixel,q);
3501 p+=GetPixelChannels(image);
3502 q+=quantum_info->pad;
3508 register unsigned short
3511 if (quantum_info->format == FloatingPointQuantumFormat)
3513 for (x=0; x < (ssize_t) number_pixels; x++)
3515 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelRed(image,p));
3516 q=PopShortPixel(quantum_info->endian,pixel,q);
3517 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelGreen(image,p));
3518 q=PopShortPixel(quantum_info->endian,pixel,q);
3519 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlue(image,p));
3520 q=PopShortPixel(quantum_info->endian,pixel,q);
3521 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelAlpha(image,p));
3522 q=PopShortPixel(quantum_info->endian,pixel,q);
3523 p+=GetPixelChannels(image);
3524 q+=quantum_info->pad;
3528 for (x=0; x < (ssize_t) number_pixels; x++)
3530 pixel=ScaleQuantumToShort(GetPixelRed(image,p));
3531 q=PopShortPixel(quantum_info->endian,pixel,q);
3532 pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
3533 q=PopShortPixel(quantum_info->endian,pixel,q);
3534 pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
3535 q=PopShortPixel(quantum_info->endian,pixel,q);
3536 pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
3537 q=PopShortPixel(quantum_info->endian,pixel,q);
3538 p+=GetPixelChannels(image);
3539 q+=quantum_info->pad;
3545 register unsigned int
3548 if (quantum_info->format == FloatingPointQuantumFormat)
3550 for (x=0; x < (ssize_t) number_pixels; x++)
3555 q=PopFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
3556 q=PopFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
3557 q=PopFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
3558 pixel=(float) GetPixelAlpha(image,p);
3559 q=PopFloatPixel(quantum_info,pixel,q);
3560 p+=GetPixelChannels(image);
3561 q+=quantum_info->pad;
3565 for (x=0; x < (ssize_t) number_pixels; x++)
3567 pixel=ScaleQuantumToLong(GetPixelRed(image,p));
3568 q=PopLongPixel(quantum_info->endian,pixel,q);
3569 pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
3570 q=PopLongPixel(quantum_info->endian,pixel,q);
3571 pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
3572 q=PopLongPixel(quantum_info->endian,pixel,q);
3573 pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
3574 q=PopLongPixel(quantum_info->endian,pixel,q);
3575 p+=GetPixelChannels(image);
3576 q+=quantum_info->pad;
3582 if (quantum_info->format == FloatingPointQuantumFormat)
3587 for (x=0; x < (ssize_t) number_pixels; x++)
3589 q=PopDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
3590 q=PopDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
3591 q=PopDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
3592 pixel=(double) GetPixelAlpha(image,p);
3593 q=PopDoublePixel(quantum_info,pixel,q);
3594 p+=GetPixelChannels(image);
3595 q+=quantum_info->pad;
3602 range=GetQuantumRange(quantum_info->depth);
3603 for (x=0; x < (ssize_t) number_pixels; x++)
3605 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
3607 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
3609 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
3611 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
3613 p+=GetPixelChannels(image);
3614 q+=quantum_info->pad;
3621 static void ExportRGBOQuantum(const Image *image,QuantumInfo *quantum_info,
3622 const MagickSizeType number_pixels,const Quantum *restrict p,
3623 unsigned char *restrict q,ExceptionInfo *exception)
3631 assert(exception != (ExceptionInfo *) NULL);
3632 assert(exception->signature == MagickSignature);
3633 switch (quantum_info->depth)
3637 register unsigned char
3640 for (x=0; x < (ssize_t) number_pixels; x++)
3642 pixel=ScaleQuantumToChar(GetPixelRed(image,p));
3643 q=PopCharPixel(pixel,q);
3644 pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
3645 q=PopCharPixel(pixel,q);
3646 pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
3647 q=PopCharPixel(pixel,q);
3648 pixel=ScaleQuantumToChar(GetPixelOpacity(image,p));
3649 q=PopCharPixel(pixel,q);
3650 p+=GetPixelChannels(image);
3651 q+=quantum_info->pad;
3657 register unsigned int
3660 range=GetQuantumRange(quantum_info->depth);
3661 if (quantum_info->pack == MagickFalse)
3675 for (x=0; x < (ssize_t) number_pixels; x++)
3677 for (i=0; i < 4; i++)
3681 case 0: quantum=GetPixelRed(image,p); break;
3682 case 1: quantum=GetPixelGreen(image,p); break;
3683 case 2: quantum=GetPixelBlue(image,p); break;
3684 case 3: quantum=GetPixelOpacity(image,p); break;
3690 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
3696 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
3702 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
3704 q=PopLongPixel(quantum_info->endian,pixel,q);
3711 p+=GetPixelChannels(image);
3712 q+=quantum_info->pad;
3716 if (quantum_info->quantum == 32UL)
3718 for (x=0; x < (ssize_t) number_pixels; x++)
3720 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
3721 q=PopQuantumLongPixel(quantum_info,pixel,q);
3722 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
3724 q=PopQuantumLongPixel(quantum_info,pixel,q);
3725 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
3726 q=PopQuantumLongPixel(quantum_info,pixel,q);
3727 pixel=(unsigned int) ScaleQuantumToAny(GetPixelOpacity(image,p),
3729 q=PopQuantumLongPixel(quantum_info,pixel,q);
3730 p+=GetPixelChannels(image);
3731 q+=quantum_info->pad;
3735 for (x=0; x < (ssize_t) number_pixels; x++)
3737 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
3738 q=PopQuantumPixel(quantum_info,pixel,q);
3739 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
3740 q=PopQuantumPixel(quantum_info,pixel,q);
3741 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
3742 q=PopQuantumPixel(quantum_info,pixel,q);
3743 pixel=(unsigned int) ScaleQuantumToAny(GetPixelOpacity(image,p),range);
3744 q=PopQuantumPixel(quantum_info,pixel,q);
3745 p+=GetPixelChannels(image);
3746 q+=quantum_info->pad;
3752 register unsigned short
3755 if (quantum_info->format == FloatingPointQuantumFormat)
3757 for (x=0; x < (ssize_t) number_pixels; x++)
3759 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelRed(image,p));
3760 q=PopShortPixel(quantum_info->endian,pixel,q);
3761 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelGreen(image,p));
3762 q=PopShortPixel(quantum_info->endian,pixel,q);
3763 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlue(image,p));
3764 q=PopShortPixel(quantum_info->endian,pixel,q);
3765 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelOpacity(image,p));
3766 q=PopShortPixel(quantum_info->endian,pixel,q);
3767 p+=GetPixelChannels(image);
3768 q+=quantum_info->pad;
3772 for (x=0; x < (ssize_t) number_pixels; x++)
3774 pixel=ScaleQuantumToShort(GetPixelRed(image,p));
3775 q=PopShortPixel(quantum_info->endian,pixel,q);
3776 pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
3777 q=PopShortPixel(quantum_info->endian,pixel,q);
3778 pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
3779 q=PopShortPixel(quantum_info->endian,pixel,q);
3780 pixel=ScaleQuantumToShort(GetPixelOpacity(image,p));
3781 q=PopShortPixel(quantum_info->endian,pixel,q);
3782 p+=GetPixelChannels(image);
3783 q+=quantum_info->pad;
3789 register unsigned int
3792 if (quantum_info->format == FloatingPointQuantumFormat)
3794 for (x=0; x < (ssize_t) number_pixels; x++)
3799 q=PopFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
3800 q=PopFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
3801 q=PopFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
3802 pixel=(float) GetPixelOpacity(image,p);
3803 q=PopFloatPixel(quantum_info,pixel,q);
3804 p+=GetPixelChannels(image);
3805 q+=quantum_info->pad;
3809 for (x=0; x < (ssize_t) number_pixels; x++)
3811 pixel=ScaleQuantumToLong(GetPixelRed(image,p));
3812 q=PopLongPixel(quantum_info->endian,pixel,q);
3813 pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
3814 q=PopLongPixel(quantum_info->endian,pixel,q);
3815 pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
3816 q=PopLongPixel(quantum_info->endian,pixel,q);
3817 pixel=ScaleQuantumToLong(GetPixelOpacity(image,p));
3818 q=PopLongPixel(quantum_info->endian,pixel,q);
3819 p+=GetPixelChannels(image);
3820 q+=quantum_info->pad;
3826 if (quantum_info->format == FloatingPointQuantumFormat)
3831 for (x=0; x < (ssize_t) number_pixels; x++)
3833 q=PopDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
3834 q=PopDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
3835 q=PopDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
3836 pixel=(double) GetPixelOpacity(image,p);
3837 q=PopDoublePixel(quantum_info,pixel,q);
3838 p+=GetPixelChannels(image);
3839 q+=quantum_info->pad;
3846 range=GetQuantumRange(quantum_info->depth);
3847 for (x=0; x < (ssize_t) number_pixels; x++)
3849 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
3851 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
3853 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
3855 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelOpacity(image,p),
3857 p+=GetPixelChannels(image);
3858 q+=quantum_info->pad;
3865 MagickExport size_t ExportQuantumPixels(const Image *image,
3866 CacheView *image_view,QuantumInfo *quantum_info,
3867 const QuantumType quantum_type,unsigned char *restrict pixels,
3868 ExceptionInfo *exception)
3873 register const Quantum
3879 register unsigned char
3885 assert(image != (Image *) NULL);
3886 assert(image->signature == MagickSignature);
3887 if (image->debug != MagickFalse)
3888 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
3889 assert(quantum_info != (QuantumInfo *) NULL);
3890 assert(quantum_info->signature == MagickSignature);
3891 if (pixels == (unsigned char *) NULL)
3892 pixels=(unsigned char *) GetQuantumPixels(quantum_info);
3893 if (image_view == (CacheView *) NULL)
3895 number_pixels=GetImageExtent(image);
3896 p=GetVirtualPixelQueue(image);
3900 number_pixels=GetCacheViewExtent(image_view);
3901 p=GetCacheViewVirtualPixelQueue(image_view);
3903 if (quantum_info->alpha_type == AssociatedQuantumAlpha)
3914 q=GetAuthenticPixelQueue(image);
3915 if (image_view != (CacheView *) NULL)
3916 q=GetCacheViewAuthenticPixelQueue(image_view);
3917 for (x=0; x < (ssize_t) image->columns; x++)
3922 if (GetPixelReadMask(image,q) == 0)
3924 q+=GetPixelChannels(image);
3927 Sa=QuantumScale*GetPixelAlpha(image,q);
3928 for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
3930 PixelChannel channel=GetPixelChannelChannel(image,i);
3931 PixelTrait traits=GetPixelChannelTraits(image,channel);
3932 if ((traits & UpdatePixelTrait) == 0)
3934 q[i]=ClampToQuantum(Sa*q[i]);
3936 q+=GetPixelChannels(image);
3939 if ((quantum_type == CbYCrQuantum) || (quantum_type == CbYCrAQuantum))
3947 q=GetAuthenticPixelQueue(image);
3948 if (image_view != (CacheView *) NULL)
3949 q=GetAuthenticPixelQueue(image);
3950 for (x=0; x < (ssize_t) number_pixels; x++)
3952 quantum=GetPixelRed(image,q);
3953 SetPixelRed(image,GetPixelGreen(image,q),q);
3954 SetPixelGreen(image,quantum,q);
3955 q+=GetPixelChannels(image);
3960 ResetQuantumState(quantum_info);
3961 extent=GetQuantumExtent(image,quantum_info,quantum_type);
3962 switch (quantum_type)
3966 ExportAlphaQuantum(image,quantum_info,number_pixels,p,q,exception);
3971 ExportBGRQuantum(image,quantum_info,number_pixels,p,q,exception);
3976 ExportBGRAQuantum(image,quantum_info,number_pixels,p,q,exception);
3981 ExportBGROQuantum(image,quantum_info,number_pixels,p,q,exception);
3986 ExportBlackQuantum(image,quantum_info,number_pixels,p,q,exception);
3992 ExportBlueQuantum(image,quantum_info,number_pixels,p,q,exception);
3997 ExportCMYKQuantum(image,quantum_info,number_pixels,p,q,exception);
4002 ExportCMYKAQuantum(image,quantum_info,number_pixels,p,q,exception);
4007 ExportCMYKOQuantum(image,quantum_info,number_pixels,p,q,exception);
4012 ExportCbYCrYQuantum(image,quantum_info,number_pixels,p,q,exception);
4017 ExportGrayQuantum(image,quantum_info,number_pixels,p,q,exception);
4020 case GrayAlphaQuantum:
4022 ExportGrayAlphaQuantum(image,quantum_info,number_pixels,p,q,exception);
4026 case MagentaQuantum:
4028 ExportGreenQuantum(image,quantum_info,number_pixels,p,q,exception);
4033 ExportIndexQuantum(image,quantum_info,number_pixels,p,q,exception);
4036 case IndexAlphaQuantum:
4038 ExportIndexAlphaQuantum(image,quantum_info,number_pixels,p,q,exception);
4044 ExportRedQuantum(image,quantum_info,number_pixels,p,q,exception);
4047 case OpacityQuantum:
4049 ExportOpacityQuantum(image,quantum_info,number_pixels,p,q,exception);
4055 ExportRGBQuantum(image,quantum_info,number_pixels,p,q,exception);
4061 ExportRGBAQuantum(image,quantum_info,number_pixels,p,q,exception);
4066 ExportRGBOQuantum(image,quantum_info,number_pixels,p,q,exception);
4072 if ((quantum_type == CbYCrQuantum) || (quantum_type == CbYCrAQuantum))
4080 q=GetAuthenticPixelQueue(image);
4081 if (image_view != (CacheView *) NULL)
4082 q=GetCacheViewAuthenticPixelQueue(image_view);
4083 for (x=0; x < (ssize_t) number_pixels; x++)
4085 quantum=GetPixelRed(image,q);
4086 SetPixelRed(image,GetPixelGreen(image,q),q);
4087 SetPixelGreen(image,quantum,q);
4088 q+=GetPixelChannels(image);