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 ExportBlackQuantum(const Image *image,QuantumInfo *quantum_info,
890 const MagickSizeType number_pixels,const Quantum *restrict p,
891 unsigned char *restrict q,ExceptionInfo *exception)
899 if (image->colorspace != CMYKColorspace)
901 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
902 "ColorSeparatedImageRequired","`%s'",image->filename);
905 switch (quantum_info->depth)
909 register unsigned char
912 for (x=0; x < (ssize_t) number_pixels; x++)
914 pixel=ScaleQuantumToChar(GetPixelBlack(image,p));
915 q=PopCharPixel(pixel,q);
916 p+=GetPixelChannels(image);
917 q+=quantum_info->pad;
923 register unsigned short
926 if (quantum_info->format == FloatingPointQuantumFormat)
928 for (x=0; x < (ssize_t) number_pixels; x++)
930 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlack(image,p));
931 q=PopShortPixel(quantum_info->endian,pixel,q);
932 p+=GetPixelChannels(image);
933 q+=quantum_info->pad;
937 for (x=0; x < (ssize_t) number_pixels; x++)
939 pixel=ScaleQuantumToShort(GetPixelBlack(image,p));
940 q=PopShortPixel(quantum_info->endian,pixel,q);
941 p+=GetPixelChannels(image);
942 q+=quantum_info->pad;
948 register unsigned int
951 if (quantum_info->format == FloatingPointQuantumFormat)
953 for (x=0; x < (ssize_t) number_pixels; x++)
955 q=PopFloatPixel(quantum_info,(float) GetPixelBlack(image,p),q);
956 p+=GetPixelChannels(image);
957 q+=quantum_info->pad;
961 for (x=0; x < (ssize_t) number_pixels; x++)
963 pixel=ScaleQuantumToLong(GetPixelBlack(image,p));
964 q=PopLongPixel(quantum_info->endian,pixel,q);
965 p+=GetPixelChannels(image);
966 q+=quantum_info->pad;
972 if (quantum_info->format == FloatingPointQuantumFormat)
974 for (x=0; x < (ssize_t) number_pixels; x++)
976 q=PopDoublePixel(quantum_info,(double) GetPixelBlack(image,p),q);
977 p+=GetPixelChannels(image);
978 q+=quantum_info->pad;
985 range=GetQuantumRange(quantum_info->depth);
986 for (x=0; x < (ssize_t) number_pixels; x++)
988 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlack(image,p),
990 p+=GetPixelChannels(image);
991 q+=quantum_info->pad;
998 static void ExportBlueQuantum(const Image *image,QuantumInfo *quantum_info,
999 const MagickSizeType number_pixels,const Quantum *restrict p,
1000 unsigned char *restrict q,ExceptionInfo *exception)
1008 assert(exception != (ExceptionInfo *) NULL);
1009 assert(exception->signature == MagickSignature);
1010 switch (quantum_info->depth)
1014 register unsigned char
1017 for (x=0; x < (ssize_t) number_pixels; x++)
1019 pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
1020 q=PopCharPixel(pixel,q);
1021 p+=GetPixelChannels(image);
1022 q+=quantum_info->pad;
1028 register unsigned short
1031 if (quantum_info->format == FloatingPointQuantumFormat)
1033 for (x=0; x < (ssize_t) number_pixels; x++)
1035 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlue(image,p));
1036 q=PopShortPixel(quantum_info->endian,pixel,q);
1037 p+=GetPixelChannels(image);
1038 q+=quantum_info->pad;
1042 for (x=0; x < (ssize_t) number_pixels; x++)
1044 pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
1045 q=PopShortPixel(quantum_info->endian,pixel,q);
1046 p+=GetPixelChannels(image);
1047 q+=quantum_info->pad;
1053 register unsigned int
1056 if (quantum_info->format == FloatingPointQuantumFormat)
1058 for (x=0; x < (ssize_t) number_pixels; x++)
1060 q=PopFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
1061 p+=GetPixelChannels(image);
1062 q+=quantum_info->pad;
1066 for (x=0; x < (ssize_t) number_pixels; x++)
1068 pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
1069 q=PopLongPixel(quantum_info->endian,pixel,q);
1070 p+=GetPixelChannels(image);
1071 q+=quantum_info->pad;
1077 if (quantum_info->format == FloatingPointQuantumFormat)
1079 for (x=0; x < (ssize_t) number_pixels; x++)
1081 q=PopDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
1082 p+=GetPixelChannels(image);
1083 q+=quantum_info->pad;
1090 range=GetQuantumRange(quantum_info->depth);
1091 for (x=0; x < (ssize_t) number_pixels; x++)
1093 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
1095 p+=GetPixelChannels(image);
1096 q+=quantum_info->pad;
1103 static void ExportCbYCrYQuantum(const Image *image,QuantumInfo *quantum_info,
1104 const MagickSizeType number_pixels,const Quantum *restrict p,
1105 unsigned char *restrict q,ExceptionInfo *exception)
1114 register unsigned int
1123 assert(exception != (ExceptionInfo *) NULL);
1124 assert(exception->signature == MagickSignature);
1127 switch (quantum_info->depth)
1131 if (quantum_info->pack == MagickFalse)
1133 for (x=0; x < (ssize_t) number_pixels; x+=2)
1135 for (i=0; i < 4; i++)
1141 quantum=GetPixelRed(image,p);
1146 quantum=GetPixelGreen(image,p);
1151 quantum=GetPixelBlue(image,p);
1155 cbcr[i]=(Quantum) quantum;
1158 pixel=(unsigned int) ((size_t) (cbcr[1]) << 22 | (size_t)
1159 (cbcr[0]) << 12 | (size_t) (cbcr[2]) << 2);
1160 q=PopLongPixel(quantum_info->endian,pixel,q);
1161 p+=GetPixelChannels(image);
1162 pixel=(unsigned int) ((size_t) (cbcr[3]) << 22 | (size_t)
1163 (cbcr[0]) << 12 | (size_t) (cbcr[2]) << 2);
1164 q=PopLongPixel(quantum_info->endian,pixel,q);
1165 p+=GetPixelChannels(image);
1166 q+=quantum_info->pad;
1177 for (x=0; x < (ssize_t) number_pixels; x+=2)
1179 for (i=0; i < 4; i++)
1185 quantum=GetPixelRed(image,p);
1190 quantum=GetPixelGreen(image,p);
1195 quantum=GetPixelBlue(image,p);
1199 cbcr[i]=(Quantum) quantum;
1202 range=GetQuantumRange(quantum_info->depth);
1203 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(cbcr[1],range),q);
1204 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(cbcr[0],range),q);
1205 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(cbcr[2],range),q);
1206 p+=GetPixelChannels(image);
1207 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(cbcr[3],range),q);
1208 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(cbcr[0],range),q);
1209 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(cbcr[2],range),q);
1210 p+=GetPixelChannels(image);
1211 q+=quantum_info->pad;
1218 static void ExportCMYKQuantum(const Image *image,QuantumInfo *quantum_info,
1219 const MagickSizeType number_pixels,const Quantum *restrict p,
1220 unsigned char *restrict q,ExceptionInfo *exception)
1225 if (image->colorspace != CMYKColorspace)
1227 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1228 "ColorSeparatedImageRequired","`%s'",image->filename);
1231 switch (quantum_info->depth)
1235 register unsigned char
1238 for (x=0; x < (ssize_t) number_pixels; x++)
1240 pixel=ScaleQuantumToChar(GetPixelRed(image,p));
1241 q=PopCharPixel(pixel,q);
1242 pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
1243 q=PopCharPixel(pixel,q);
1244 pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
1245 q=PopCharPixel(pixel,q);
1246 pixel=ScaleQuantumToChar(GetPixelBlack(image,p));
1247 q=PopCharPixel(pixel,q);
1248 p+=GetPixelChannels(image);
1249 q+=quantum_info->pad;
1255 register unsigned short
1258 if (quantum_info->format == FloatingPointQuantumFormat)
1260 for (x=0; x < (ssize_t) number_pixels; x++)
1262 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelRed(image,p));
1263 q=PopShortPixel(quantum_info->endian,pixel,q);
1264 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelGreen(image,p));
1265 q=PopShortPixel(quantum_info->endian,pixel,q);
1266 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlue(image,p));
1267 q=PopShortPixel(quantum_info->endian,pixel,q);
1268 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlack(image,p));
1269 q=PopShortPixel(quantum_info->endian,pixel,q);
1270 p+=GetPixelChannels(image);
1271 q+=quantum_info->pad;
1275 for (x=0; x < (ssize_t) number_pixels; x++)
1277 pixel=ScaleQuantumToShort(GetPixelRed(image,p));
1278 q=PopShortPixel(quantum_info->endian,pixel,q);
1279 pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
1280 q=PopShortPixel(quantum_info->endian,pixel,q);
1281 pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
1282 q=PopShortPixel(quantum_info->endian,pixel,q);
1283 pixel=ScaleQuantumToShort(GetPixelBlack(image,p));
1284 q=PopShortPixel(quantum_info->endian,pixel,q);
1285 p+=GetPixelChannels(image);
1286 q+=quantum_info->pad;
1292 register unsigned int
1295 if (quantum_info->format == FloatingPointQuantumFormat)
1297 for (x=0; x < (ssize_t) number_pixels; x++)
1299 q=PopFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
1300 q=PopFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
1301 q=PopFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
1302 q=PopFloatPixel(quantum_info,(float) GetPixelBlack(image,p),q);
1303 p+=GetPixelChannels(image);
1304 q+=quantum_info->pad;
1308 for (x=0; x < (ssize_t) number_pixels; x++)
1310 pixel=ScaleQuantumToLong(GetPixelRed(image,p));
1311 q=PopLongPixel(quantum_info->endian,pixel,q);
1312 pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
1313 q=PopLongPixel(quantum_info->endian,pixel,q);
1314 pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
1315 q=PopLongPixel(quantum_info->endian,pixel,q);
1316 pixel=ScaleQuantumToLong(GetPixelBlack(image,p));
1317 q=PopLongPixel(quantum_info->endian,pixel,q);
1318 p+=GetPixelChannels(image);
1319 q+=quantum_info->pad;
1325 if (quantum_info->format == FloatingPointQuantumFormat)
1327 for (x=0; x < (ssize_t) number_pixels; x++)
1329 q=PopDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
1330 q=PopDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
1331 q=PopDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
1332 q=PopDoublePixel(quantum_info,(double) GetPixelBlack(image,p),q);
1333 p+=GetPixelChannels(image);
1334 q+=quantum_info->pad;
1344 range=GetQuantumRange(quantum_info->depth);
1345 for (x=0; x < (ssize_t) number_pixels; x++)
1347 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
1349 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
1351 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
1353 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlack(image,p),
1355 p+=GetPixelChannels(image);
1356 q+=quantum_info->pad;
1363 static void ExportCMYKAQuantum(const Image *image,QuantumInfo *quantum_info,
1364 const MagickSizeType number_pixels,const Quantum *restrict p,
1365 unsigned char *restrict q,ExceptionInfo *exception)
1370 if (image->colorspace != CMYKColorspace)
1372 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1373 "ColorSeparatedImageRequired","`%s'",image->filename);
1376 switch (quantum_info->depth)
1380 register unsigned char
1383 for (x=0; x < (ssize_t) number_pixels; x++)
1385 pixel=ScaleQuantumToChar(GetPixelRed(image,p));
1386 q=PopCharPixel(pixel,q);
1387 pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
1388 q=PopCharPixel(pixel,q);
1389 pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
1390 q=PopCharPixel(pixel,q);
1391 pixel=ScaleQuantumToChar(GetPixelBlack(image,p));
1392 q=PopCharPixel(pixel,q);
1393 pixel=ScaleQuantumToChar(GetPixelAlpha(image,p));
1394 q=PopCharPixel(pixel,q);
1395 p+=GetPixelChannels(image);
1396 q+=quantum_info->pad;
1402 register unsigned short
1405 if (quantum_info->format == FloatingPointQuantumFormat)
1407 for (x=0; x < (ssize_t) number_pixels; x++)
1409 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelRed(image,p));
1410 q=PopShortPixel(quantum_info->endian,pixel,q);
1411 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelGreen(image,p));
1412 q=PopShortPixel(quantum_info->endian,pixel,q);
1413 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlue(image,p));
1414 q=PopShortPixel(quantum_info->endian,pixel,q);
1415 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlack(image,p));
1416 q=PopShortPixel(quantum_info->endian,pixel,q);
1417 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelAlpha(image,p));
1418 q=PopShortPixel(quantum_info->endian,pixel,q);
1419 p+=GetPixelChannels(image);
1420 q+=quantum_info->pad;
1424 for (x=0; x < (ssize_t) number_pixels; x++)
1426 pixel=ScaleQuantumToShort(GetPixelRed(image,p));
1427 q=PopShortPixel(quantum_info->endian,pixel,q);
1428 pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
1429 q=PopShortPixel(quantum_info->endian,pixel,q);
1430 pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
1431 q=PopShortPixel(quantum_info->endian,pixel,q);
1432 pixel=ScaleQuantumToShort(GetPixelBlack(image,p));
1433 q=PopShortPixel(quantum_info->endian,pixel,q);
1434 pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
1435 q=PopShortPixel(quantum_info->endian,pixel,q);
1436 p+=GetPixelChannels(image);
1437 q+=quantum_info->pad;
1443 register unsigned int
1446 if (quantum_info->format == FloatingPointQuantumFormat)
1448 for (x=0; x < (ssize_t) number_pixels; x++)
1453 q=PopFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
1454 q=PopFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
1455 q=PopFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
1456 q=PopFloatPixel(quantum_info,(float) GetPixelBlack(image,p),q);
1457 pixel=(float) (GetPixelAlpha(image,p));
1458 q=PopFloatPixel(quantum_info,pixel,q);
1459 p+=GetPixelChannels(image);
1460 q+=quantum_info->pad;
1464 for (x=0; x < (ssize_t) number_pixels; x++)
1466 pixel=ScaleQuantumToLong(GetPixelRed(image,p));
1467 q=PopLongPixel(quantum_info->endian,pixel,q);
1468 pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
1469 q=PopLongPixel(quantum_info->endian,pixel,q);
1470 pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
1471 q=PopLongPixel(quantum_info->endian,pixel,q);
1472 pixel=ScaleQuantumToLong(GetPixelBlack(image,p));
1473 q=PopLongPixel(quantum_info->endian,pixel,q);
1474 pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
1475 q=PopLongPixel(quantum_info->endian,pixel,q);
1476 p+=GetPixelChannels(image);
1477 q+=quantum_info->pad;
1483 if (quantum_info->format == FloatingPointQuantumFormat)
1488 for (x=0; x < (ssize_t) number_pixels; x++)
1490 q=PopDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
1491 q=PopDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
1492 q=PopDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
1493 q=PopDoublePixel(quantum_info,(double) GetPixelBlack(image,p),q);
1494 pixel=(double) (GetPixelAlpha(image,p));
1495 q=PopDoublePixel(quantum_info,pixel,q);
1496 p+=GetPixelChannels(image);
1497 q+=quantum_info->pad;
1507 range=GetQuantumRange(quantum_info->depth);
1508 for (x=0; x < (ssize_t) number_pixels; x++)
1510 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
1512 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
1514 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
1516 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlack(image,p),
1518 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
1520 p+=GetPixelChannels(image);
1521 q+=quantum_info->pad;
1528 static void ExportGrayQuantum(const Image *image,QuantumInfo *quantum_info,
1529 const MagickSizeType number_pixels,const Quantum *restrict p,
1530 unsigned char *restrict q,ExceptionInfo *exception)
1538 assert(exception != (ExceptionInfo *) NULL);
1539 assert(exception->signature == MagickSignature);
1540 switch (quantum_info->depth)
1547 register unsigned char
1556 if (quantum_info->min_is_white != MagickFalse)
1561 threshold=QuantumRange/2.0;
1562 for (x=((ssize_t) number_pixels-7); x > 0; x-=8)
1565 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 7;
1566 p+=GetPixelChannels(image);
1567 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 6;
1568 p+=GetPixelChannels(image);
1569 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 5;
1570 p+=GetPixelChannels(image);
1571 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 4;
1572 p+=GetPixelChannels(image);
1573 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 3;
1574 p+=GetPixelChannels(image);
1575 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 2;
1576 p+=GetPixelChannels(image);
1577 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 1;
1578 p+=GetPixelChannels(image);
1579 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 0;
1580 p+=GetPixelChannels(image);
1583 if ((number_pixels % 8) != 0)
1586 for (bit=7; bit >= (ssize_t) (8-(number_pixels % 8)); bit--)
1588 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << bit;
1589 p+=GetPixelChannels(image);
1597 register unsigned char
1600 for (x=0; x < (ssize_t) (number_pixels-1) ; x+=2)
1602 pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
1603 *q=(((pixel >> 4) & 0xf) << 4);
1604 p+=GetPixelChannels(image);
1605 pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
1607 p+=GetPixelChannels(image);
1610 if ((number_pixels % 2) != 0)
1612 pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
1613 *q=(((pixel >> 4) & 0xf) << 4);
1614 p+=GetPixelChannels(image);
1621 register unsigned char
1624 for (x=0; x < (ssize_t) number_pixels; x++)
1626 pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
1627 q=PopCharPixel(pixel,q);
1628 p+=GetPixelChannels(image);
1629 q+=quantum_info->pad;
1635 range=GetQuantumRange(quantum_info->depth);
1636 if (quantum_info->pack == MagickFalse)
1638 register unsigned int
1641 for (x=0; x < (ssize_t) (number_pixels-2); x+=3)
1643 pixel=(unsigned int) (ScaleQuantumToAny(ClampToQuantum(
1644 GetPixelLuma(image,p+2*GetPixelChannels(image))),range) << 22 |
1645 ScaleQuantumToAny(ClampToQuantum(GetPixelLuma(image,p+
1646 GetPixelChannels(image))),range) << 12 | ScaleQuantumToAny(
1647 ClampToQuantum(GetPixelLuma(image,p)),range) << 2);
1648 q=PopLongPixel(quantum_info->endian,pixel,q);
1649 p+=3*GetPixelChannels(image);
1650 q+=quantum_info->pad;
1652 if (x < (ssize_t) number_pixels)
1655 if (x++ < (ssize_t) (number_pixels-1))
1656 pixel|=ScaleQuantumToAny(ClampToQuantum(GetPixelLuma(image,p+
1657 GetPixelChannels(image))),range) << 12;
1658 if (x++ < (ssize_t) number_pixels)
1659 pixel|=ScaleQuantumToAny(ClampToQuantum(GetPixelLuma(image,p)),
1661 q=PopLongPixel(quantum_info->endian,pixel,q);
1665 for (x=0; x < (ssize_t) number_pixels; x++)
1667 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(ClampToQuantum(
1668 GetPixelLuma(image,p)),range),q);
1669 p+=GetPixelChannels(image);
1670 q+=quantum_info->pad;
1676 register unsigned short
1679 range=GetQuantumRange(quantum_info->depth);
1680 if (quantum_info->pack == MagickFalse)
1682 for (x=0; x < (ssize_t) number_pixels; x++)
1684 pixel=ScaleQuantumToShort(ClampToQuantum(GetPixelLuma(image,p)));
1685 q=PopShortPixel(quantum_info->endian,(unsigned short) (pixel >> 4),
1687 p+=GetPixelChannels(image);
1688 q+=quantum_info->pad;
1692 for (x=0; x < (ssize_t) number_pixels; x++)
1694 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(ClampToQuantum(
1695 GetPixelLuma(image,p)),range),q);
1696 p+=GetPixelChannels(image);
1697 q+=quantum_info->pad;
1703 register unsigned short
1706 if (quantum_info->format == FloatingPointQuantumFormat)
1708 for (x=0; x < (ssize_t) number_pixels; x++)
1710 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelLuma(image,p));
1711 q=PopShortPixel(quantum_info->endian,pixel,q);
1712 p+=GetPixelChannels(image);
1713 q+=quantum_info->pad;
1717 for (x=0; x < (ssize_t) number_pixels; x++)
1719 pixel=ScaleQuantumToShort(ClampToQuantum(GetPixelLuma(image,p)));
1720 q=PopShortPixel(quantum_info->endian,pixel,q);
1721 p+=GetPixelChannels(image);
1722 q+=quantum_info->pad;
1728 register unsigned int
1731 if (quantum_info->format == FloatingPointQuantumFormat)
1733 for (x=0; x < (ssize_t) number_pixels; x++)
1738 pixel=(float) GetPixelLuma(image,p);
1739 q=PopFloatPixel(quantum_info,pixel,q);
1740 p+=GetPixelChannels(image);
1741 q+=quantum_info->pad;
1745 for (x=0; x < (ssize_t) number_pixels; x++)
1747 pixel=ScaleQuantumToLong(ClampToQuantum(GetPixelLuma(image,p)));
1748 q=PopLongPixel(quantum_info->endian,pixel,q);
1749 p+=GetPixelChannels(image);
1750 q+=quantum_info->pad;
1756 if (quantum_info->format == FloatingPointQuantumFormat)
1758 for (x=0; x < (ssize_t) number_pixels; x++)
1763 pixel=GetPixelLuma(image,p);
1764 q=PopDoublePixel(quantum_info,pixel,q);
1765 p+=GetPixelChannels(image);
1766 q+=quantum_info->pad;
1773 range=GetQuantumRange(quantum_info->depth);
1774 for (x=0; x < (ssize_t) number_pixels; x++)
1776 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(ClampToQuantum(
1777 GetPixelLuma(image,p)),range),q);
1778 p+=GetPixelChannels(image);
1779 q+=quantum_info->pad;
1786 static void ExportGrayAlphaQuantum(const Image *image,QuantumInfo *quantum_info,
1787 const MagickSizeType number_pixels,const Quantum *restrict p,
1788 unsigned char *restrict q,ExceptionInfo *exception)
1796 assert(exception != (ExceptionInfo *) NULL);
1797 assert(exception->signature == MagickSignature);
1798 switch (quantum_info->depth)
1805 register unsigned char
1815 if (quantum_info->min_is_white == MagickFalse)
1820 threshold=QuantumRange/2.0;
1821 for (x=((ssize_t) number_pixels-3); x > 0; x-=4)
1824 *q|=(GetPixelLuma(image,p) > threshold ? black : white) << 7;
1825 pixel=(unsigned char) (GetPixelAlpha(image,p) == OpaqueAlpha ?
1827 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 6);
1828 p+=GetPixelChannels(image);
1829 *q|=(GetPixelLuma(image,p) > threshold ? black : white) << 5;
1830 pixel=(unsigned char) (GetPixelAlpha(image,p) == OpaqueAlpha ?
1832 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 4);
1833 p+=GetPixelChannels(image);
1834 *q|=(GetPixelLuma(image,p) > threshold ? black : white) << 3;
1835 pixel=(unsigned char) (GetPixelAlpha(image,p) == OpaqueAlpha ?
1837 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 2);
1838 p+=GetPixelChannels(image);
1839 *q|=(GetPixelLuma(image,p) > threshold ? black : white) << 1;
1840 pixel=(unsigned char) (GetPixelAlpha(image,p) == OpaqueAlpha ?
1842 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 0);
1843 p+=GetPixelChannels(image);
1846 if ((number_pixels % 4) != 0)
1849 for (bit=0; bit <= (ssize_t) (number_pixels % 4); bit+=2)
1851 *q|=(GetPixelLuma(image,p) > threshold ? black : white) <<
1853 pixel=(unsigned char) (GetPixelAlpha(image,p) == OpaqueAlpha ?
1855 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << (unsigned char)
1857 p+=GetPixelChannels(image);
1865 register unsigned char
1868 for (x=0; x < (ssize_t) number_pixels ; x++)
1870 pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
1871 *q=(((pixel >> 4) & 0xf) << 4);
1872 pixel=(unsigned char) (16*QuantumScale*GetPixelAlpha(image,p)+0.5);
1874 p+=GetPixelChannels(image);
1881 register unsigned char
1884 for (x=0; x < (ssize_t) number_pixels; x++)
1886 pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
1887 q=PopCharPixel(pixel,q);
1888 pixel=ScaleQuantumToChar(GetPixelAlpha(image,p));
1889 q=PopCharPixel(pixel,q);
1890 p+=GetPixelChannels(image);
1891 q+=quantum_info->pad;
1897 register unsigned short
1900 if (quantum_info->format == FloatingPointQuantumFormat)
1902 for (x=0; x < (ssize_t) number_pixels; x++)
1904 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelLuma(image,p));
1905 q=PopShortPixel(quantum_info->endian,pixel,q);
1906 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelAlpha(image,p));
1907 q=PopShortPixel(quantum_info->endian,pixel,q);
1908 p+=GetPixelChannels(image);
1909 q+=quantum_info->pad;
1913 for (x=0; x < (ssize_t) number_pixels; x++)
1915 pixel=ScaleQuantumToShort(ClampToQuantum(GetPixelLuma(image,p)));
1916 q=PopShortPixel(quantum_info->endian,pixel,q);
1917 pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
1918 q=PopShortPixel(quantum_info->endian,pixel,q);
1919 p+=GetPixelChannels(image);
1920 q+=quantum_info->pad;
1926 register unsigned int
1929 if (quantum_info->format == FloatingPointQuantumFormat)
1931 for (x=0; x < (ssize_t) number_pixels; x++)
1936 pixel=(float) GetPixelLuma(image,p);
1937 q=PopFloatPixel(quantum_info,pixel,q);
1938 pixel=(float) (GetPixelAlpha(image,p));
1939 q=PopFloatPixel(quantum_info,pixel,q);
1940 p+=GetPixelChannels(image);
1941 q+=quantum_info->pad;
1945 for (x=0; x < (ssize_t) number_pixels; x++)
1947 pixel=ScaleQuantumToLong(ClampToQuantum(GetPixelLuma(image,p)));
1948 q=PopLongPixel(quantum_info->endian,pixel,q);
1949 pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
1950 q=PopLongPixel(quantum_info->endian,pixel,q);
1951 p+=GetPixelChannels(image);
1952 q+=quantum_info->pad;
1958 if (quantum_info->format == FloatingPointQuantumFormat)
1960 for (x=0; x < (ssize_t) number_pixels; x++)
1965 pixel=GetPixelLuma(image,p);
1966 q=PopDoublePixel(quantum_info,pixel,q);
1967 pixel=(double) (GetPixelAlpha(image,p));
1968 q=PopDoublePixel(quantum_info,pixel,q);
1969 p+=GetPixelChannels(image);
1970 q+=quantum_info->pad;
1977 range=GetQuantumRange(quantum_info->depth);
1978 for (x=0; x < (ssize_t) number_pixels; x++)
1980 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(ClampToQuantum(
1981 GetPixelLuma(image,p)),range),q);
1982 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
1984 p+=GetPixelChannels(image);
1985 q+=quantum_info->pad;
1992 static void ExportGreenQuantum(const Image *image,QuantumInfo *quantum_info,
1993 const MagickSizeType number_pixels,const Quantum *restrict p,
1994 unsigned char *restrict q,ExceptionInfo *exception)
2002 assert(exception != (ExceptionInfo *) NULL);
2003 assert(exception->signature == MagickSignature);
2004 switch (quantum_info->depth)
2008 register unsigned char
2011 for (x=0; x < (ssize_t) number_pixels; x++)
2013 pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
2014 q=PopCharPixel(pixel,q);
2015 p+=GetPixelChannels(image);
2016 q+=quantum_info->pad;
2022 register unsigned short
2025 if (quantum_info->format == FloatingPointQuantumFormat)
2027 for (x=0; x < (ssize_t) number_pixels; x++)
2029 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelGreen(image,p));
2030 q=PopShortPixel(quantum_info->endian,pixel,q);
2031 p+=GetPixelChannels(image);
2032 q+=quantum_info->pad;
2036 for (x=0; x < (ssize_t) number_pixels; x++)
2038 pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
2039 q=PopShortPixel(quantum_info->endian,pixel,q);
2040 p+=GetPixelChannels(image);
2041 q+=quantum_info->pad;
2047 register unsigned int
2050 if (quantum_info->format == FloatingPointQuantumFormat)
2052 for (x=0; x < (ssize_t) number_pixels; x++)
2054 q=PopFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
2055 p+=GetPixelChannels(image);
2056 q+=quantum_info->pad;
2060 for (x=0; x < (ssize_t) number_pixels; x++)
2062 pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
2063 q=PopLongPixel(quantum_info->endian,pixel,q);
2064 p+=GetPixelChannels(image);
2065 q+=quantum_info->pad;
2071 if (quantum_info->format == FloatingPointQuantumFormat)
2073 for (x=0; x < (ssize_t) number_pixels; x++)
2075 q=PopDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
2076 p+=GetPixelChannels(image);
2077 q+=quantum_info->pad;
2084 range=GetQuantumRange(quantum_info->depth);
2085 for (x=0; x < (ssize_t) number_pixels; x++)
2087 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
2089 p+=GetPixelChannels(image);
2090 q+=quantum_info->pad;
2097 static void ExportIndexQuantum(const Image *image,QuantumInfo *quantum_info,
2098 const MagickSizeType number_pixels,const Quantum *restrict p,
2099 unsigned char *restrict q,ExceptionInfo *exception)
2107 if (image->storage_class != PseudoClass)
2109 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2110 "ColormappedImageRequired","`%s'",image->filename);
2113 switch (quantum_info->depth)
2117 register unsigned char
2120 for (x=((ssize_t) number_pixels-7); x > 0; x-=8)
2122 pixel=(unsigned char) GetPixelIndex(image,p);
2123 *q=((pixel & 0x01) << 7);
2124 p+=GetPixelChannels(image);
2125 pixel=(unsigned char) GetPixelIndex(image,p);
2126 *q|=((pixel & 0x01) << 6);
2127 p+=GetPixelChannels(image);
2128 pixel=(unsigned char) GetPixelIndex(image,p);
2129 *q|=((pixel & 0x01) << 5);
2130 p+=GetPixelChannels(image);
2131 pixel=(unsigned char) GetPixelIndex(image,p);
2132 *q|=((pixel & 0x01) << 4);
2133 p+=GetPixelChannels(image);
2134 pixel=(unsigned char) GetPixelIndex(image,p);
2135 *q|=((pixel & 0x01) << 3);
2136 p+=GetPixelChannels(image);
2137 pixel=(unsigned char) GetPixelIndex(image,p);
2138 *q|=((pixel & 0x01) << 2);
2139 p+=GetPixelChannels(image);
2140 pixel=(unsigned char) GetPixelIndex(image,p);
2141 *q|=((pixel & 0x01) << 1);
2142 p+=GetPixelChannels(image);
2143 pixel=(unsigned char) GetPixelIndex(image,p);
2144 *q|=((pixel & 0x01) << 0);
2145 p+=GetPixelChannels(image);
2148 if ((number_pixels % 8) != 0)
2151 for (bit=7; bit >= (ssize_t) (8-(number_pixels % 8)); bit--)
2153 pixel=(unsigned char) GetPixelIndex(image,p);
2154 *q|=((pixel & 0x01) << (unsigned char) bit);
2155 p+=GetPixelChannels(image);
2163 register unsigned char
2166 for (x=0; x < (ssize_t) (number_pixels-1) ; x+=2)
2168 pixel=(unsigned char) GetPixelIndex(image,p);
2169 *q=((pixel & 0xf) << 4);
2170 p+=GetPixelChannels(image);
2171 pixel=(unsigned char) GetPixelIndex(image,p);
2172 *q|=((pixel & 0xf) << 0);
2173 p+=GetPixelChannels(image);
2176 if ((number_pixels % 2) != 0)
2178 pixel=(unsigned char) GetPixelIndex(image,p);
2179 *q=((pixel & 0xf) << 4);
2180 p+=GetPixelChannels(image);
2187 for (x=0; x < (ssize_t) number_pixels; x++)
2189 q=PopCharPixel((unsigned char) GetPixelIndex(image,p),q);
2190 p+=GetPixelChannels(image);
2191 q+=quantum_info->pad;
2197 if (quantum_info->format == FloatingPointQuantumFormat)
2199 for (x=0; x < (ssize_t) number_pixels; x++)
2201 q=PopShortPixel(quantum_info->endian,SinglePrecisionToHalf(
2202 QuantumScale*GetPixelIndex(image,p)),q);
2203 p+=GetPixelChannels(image);
2204 q+=quantum_info->pad;
2208 for (x=0; x < (ssize_t) number_pixels; x++)
2210 q=PopShortPixel(quantum_info->endian,(unsigned short)
2211 GetPixelIndex(image,p),q);
2212 p+=GetPixelChannels(image);
2213 q+=quantum_info->pad;
2219 if (quantum_info->format == FloatingPointQuantumFormat)
2221 for (x=0; x < (ssize_t) number_pixels; x++)
2223 q=PopFloatPixel(quantum_info,(float) GetPixelIndex(image,p),q);
2224 p+=GetPixelChannels(image);
2225 q+=quantum_info->pad;
2229 for (x=0; x < (ssize_t) number_pixels; x++)
2231 q=PopLongPixel(quantum_info->endian,(unsigned int)
2232 GetPixelIndex(image,p),q);
2233 p+=GetPixelChannels(image);
2234 q+=quantum_info->pad;
2240 if (quantum_info->format == FloatingPointQuantumFormat)
2242 for (x=0; x < (ssize_t) number_pixels; x++)
2244 q=PopDoublePixel(quantum_info,(double) GetPixelIndex(image,p),q);
2245 p+=GetPixelChannels(image);
2246 q+=quantum_info->pad;
2253 for (x=0; x < (ssize_t) number_pixels; x++)
2255 q=PopQuantumPixel(quantum_info,GetPixelIndex(image,p),q);
2256 p+=GetPixelChannels(image);
2257 q+=quantum_info->pad;
2264 static void ExportIndexAlphaQuantum(const Image *image,
2265 QuantumInfo *quantum_info,const MagickSizeType number_pixels,
2266 const Quantum *restrict p,unsigned char *restrict q,ExceptionInfo *exception)
2274 if (image->storage_class != PseudoClass)
2276 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2277 "ColormappedImageRequired","`%s'",image->filename);
2280 switch (quantum_info->depth)
2284 register unsigned char
2287 for (x=((ssize_t) number_pixels-3); x > 0; x-=4)
2289 pixel=(unsigned char) GetPixelIndex(image,p);
2290 *q=((pixel & 0x01) << 7);
2291 pixel=(unsigned char) (GetPixelAlpha(image,p) == (Quantum)
2292 TransparentAlpha ? 1 : 0);
2293 *q|=((pixel & 0x01) << 6);
2294 p+=GetPixelChannels(image);
2295 pixel=(unsigned char) GetPixelIndex(image,p);
2296 *q|=((pixel & 0x01) << 5);
2297 pixel=(unsigned char) (GetPixelAlpha(image,p) == (Quantum)
2298 TransparentAlpha ? 1 : 0);
2299 *q|=((pixel & 0x01) << 4);
2300 p+=GetPixelChannels(image);
2301 pixel=(unsigned char) GetPixelIndex(image,p);
2302 *q|=((pixel & 0x01) << 3);
2303 pixel=(unsigned char) (GetPixelAlpha(image,p) == (Quantum)
2304 TransparentAlpha ? 1 : 0);
2305 *q|=((pixel & 0x01) << 2);
2306 p+=GetPixelChannels(image);
2307 pixel=(unsigned char) GetPixelIndex(image,p);
2308 *q|=((pixel & 0x01) << 1);
2309 pixel=(unsigned char) (GetPixelAlpha(image,p) == (Quantum)
2310 TransparentAlpha ? 1 : 0);
2311 *q|=((pixel & 0x01) << 0);
2312 p+=GetPixelChannels(image);
2315 if ((number_pixels % 4) != 0)
2318 for (bit=3; bit >= (ssize_t) (4-(number_pixels % 4)); bit-=2)
2320 pixel=(unsigned char) GetPixelIndex(image,p);
2321 *q|=((pixel & 0x01) << (unsigned char) (bit+4));
2322 pixel=(unsigned char) (GetPixelAlpha(image,p) == (Quantum)
2323 TransparentAlpha ? 1 : 0);
2324 *q|=((pixel & 0x01) << (unsigned char) (bit+4-1));
2325 p+=GetPixelChannels(image);
2333 register unsigned char
2336 for (x=0; x < (ssize_t) number_pixels ; x++)
2338 pixel=(unsigned char) GetPixelIndex(image,p);
2339 *q=((pixel & 0xf) << 4);
2340 pixel=(unsigned char) (16*QuantumScale*GetPixelAlpha(image,p)+0.5);
2341 *q|=((pixel & 0xf) << 0);
2342 p+=GetPixelChannels(image);
2349 register unsigned char
2352 for (x=0; x < (ssize_t) number_pixels; x++)
2354 q=PopCharPixel((unsigned char) GetPixelIndex(image,p),q);
2355 pixel=ScaleQuantumToChar(GetPixelAlpha(image,p));
2356 q=PopCharPixel(pixel,q);
2357 p+=GetPixelChannels(image);
2358 q+=quantum_info->pad;
2364 register unsigned short
2367 if (quantum_info->format == FloatingPointQuantumFormat)
2369 for (x=0; x < (ssize_t) number_pixels; x++)
2371 q=PopShortPixel(quantum_info->endian,(unsigned short)
2372 GetPixelIndex(image,p),q);
2373 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelAlpha(image,p));
2374 q=PopShortPixel(quantum_info->endian,pixel,q);
2375 p+=GetPixelChannels(image);
2376 q+=quantum_info->pad;
2380 for (x=0; x < (ssize_t) number_pixels; x++)
2382 q=PopShortPixel(quantum_info->endian,(unsigned short)
2383 GetPixelIndex(image,p),q);
2384 pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
2385 q=PopShortPixel(quantum_info->endian,pixel,q);
2386 p+=GetPixelChannels(image);
2387 q+=quantum_info->pad;
2393 register unsigned int
2396 if (quantum_info->format == FloatingPointQuantumFormat)
2398 for (x=0; x < (ssize_t) number_pixels; x++)
2403 q=PopFloatPixel(quantum_info,(float) GetPixelIndex(image,p),q);
2404 pixel=(float) GetPixelAlpha(image,p);
2405 q=PopFloatPixel(quantum_info,pixel,q);
2406 p+=GetPixelChannels(image);
2407 q+=quantum_info->pad;
2411 for (x=0; x < (ssize_t) number_pixels; x++)
2413 q=PopLongPixel(quantum_info->endian,(unsigned int)
2414 GetPixelIndex(image,p),q);
2415 pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
2416 q=PopLongPixel(quantum_info->endian,pixel,q);
2417 p+=GetPixelChannels(image);
2418 q+=quantum_info->pad;
2424 if (quantum_info->format == FloatingPointQuantumFormat)
2426 for (x=0; x < (ssize_t) number_pixels; x++)
2431 q=PopDoublePixel(quantum_info,(double) GetPixelIndex(image,p),q);
2432 pixel=(double) GetPixelAlpha(image,p);
2433 q=PopDoublePixel(quantum_info,pixel,q);
2434 p+=GetPixelChannels(image);
2435 q+=quantum_info->pad;
2445 range=GetQuantumRange(quantum_info->depth);
2446 for (x=0; x < (ssize_t) number_pixels; x++)
2448 q=PopQuantumPixel(quantum_info,GetPixelIndex(image,p),q);
2449 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
2451 p+=GetPixelChannels(image);
2452 q+=quantum_info->pad;
2459 static void ExportOpacityQuantum(const Image *image,QuantumInfo *quantum_info,
2460 const MagickSizeType number_pixels,const Quantum *restrict p,
2461 unsigned char *restrict q,ExceptionInfo *exception)
2469 assert(exception != (ExceptionInfo *) NULL);
2470 assert(exception->signature == MagickSignature);
2471 switch (quantum_info->depth)
2475 register unsigned char
2478 for (x=0; x < (ssize_t) number_pixels; x++)
2480 pixel=ScaleQuantumToChar(GetPixelOpacity(image,p));
2481 q=PopCharPixel(pixel,q);
2482 p+=GetPixelChannels(image);
2483 q+=quantum_info->pad;
2489 register unsigned short
2492 if (quantum_info->format == FloatingPointQuantumFormat)
2494 for (x=0; x < (ssize_t) number_pixels; x++)
2496 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelOpacity(image,p));
2497 q=PopShortPixel(quantum_info->endian,pixel,q);
2498 p+=GetPixelChannels(image);
2499 q+=quantum_info->pad;
2503 for (x=0; x < (ssize_t) number_pixels; x++)
2505 pixel=ScaleQuantumToShort(GetPixelOpacity(image,p));
2506 q=PopShortPixel(quantum_info->endian,pixel,q);
2507 p+=GetPixelChannels(image);
2508 q+=quantum_info->pad;
2514 register unsigned int
2517 if (quantum_info->format == FloatingPointQuantumFormat)
2519 for (x=0; x < (ssize_t) number_pixels; x++)
2521 q=PopFloatPixel(quantum_info,(float) GetPixelOpacity(image,p),q);
2522 p+=GetPixelChannels(image);
2523 q+=quantum_info->pad;
2527 for (x=0; x < (ssize_t) number_pixels; x++)
2529 pixel=ScaleQuantumToLong(GetPixelOpacity(image,p));
2530 q=PopLongPixel(quantum_info->endian,pixel,q);
2531 p+=GetPixelChannels(image);
2532 q+=quantum_info->pad;
2538 if (quantum_info->format == FloatingPointQuantumFormat)
2540 for (x=0; x < (ssize_t) number_pixels; x++)
2542 q=PopDoublePixel(quantum_info,(double) GetPixelOpacity(image,p),q);
2543 p+=GetPixelChannels(image);
2544 q+=quantum_info->pad;
2551 range=GetQuantumRange(quantum_info->depth);
2552 for (x=0; x < (ssize_t) number_pixels; x++)
2554 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(
2555 GetPixelOpacity(image,p),range),q);
2556 p+=GetPixelChannels(image);
2557 q+=quantum_info->pad;
2564 static void ExportRedQuantum(const Image *image,QuantumInfo *quantum_info,
2565 const MagickSizeType number_pixels,const Quantum *restrict p,
2566 unsigned char *restrict q,ExceptionInfo *exception)
2574 assert(exception != (ExceptionInfo *) NULL);
2575 assert(exception->signature == MagickSignature);
2576 switch (quantum_info->depth)
2580 register unsigned char
2583 for (x=0; x < (ssize_t) number_pixels; x++)
2585 pixel=ScaleQuantumToChar(GetPixelRed(image,p));
2586 q=PopCharPixel(pixel,q);
2587 p+=GetPixelChannels(image);
2588 q+=quantum_info->pad;
2594 register unsigned short
2597 if (quantum_info->format == FloatingPointQuantumFormat)
2599 for (x=0; x < (ssize_t) number_pixels; x++)
2601 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelRed(image,p));
2602 q=PopShortPixel(quantum_info->endian,pixel,q);
2603 p+=GetPixelChannels(image);
2604 q+=quantum_info->pad;
2608 for (x=0; x < (ssize_t) number_pixels; x++)
2610 pixel=ScaleQuantumToShort(GetPixelRed(image,p));
2611 q=PopShortPixel(quantum_info->endian,pixel,q);
2612 p+=GetPixelChannels(image);
2613 q+=quantum_info->pad;
2619 register unsigned int
2622 if (quantum_info->format == FloatingPointQuantumFormat)
2624 for (x=0; x < (ssize_t) number_pixels; x++)
2626 q=PopFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
2627 p+=GetPixelChannels(image);
2628 q+=quantum_info->pad;
2632 for (x=0; x < (ssize_t) number_pixels; x++)
2634 pixel=ScaleQuantumToLong(GetPixelRed(image,p));
2635 q=PopLongPixel(quantum_info->endian,pixel,q);
2636 p+=GetPixelChannels(image);
2637 q+=quantum_info->pad;
2643 if (quantum_info->format == FloatingPointQuantumFormat)
2645 for (x=0; x < (ssize_t) number_pixels; x++)
2647 q=PopDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
2648 p+=GetPixelChannels(image);
2649 q+=quantum_info->pad;
2656 range=GetQuantumRange(quantum_info->depth);
2657 for (x=0; x < (ssize_t) number_pixels; x++)
2659 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
2661 p+=GetPixelChannels(image);
2662 q+=quantum_info->pad;
2669 static void ExportRGBQuantum(const Image *image,QuantumInfo *quantum_info,
2670 const MagickSizeType number_pixels,const Quantum *restrict p,
2671 unsigned char *restrict q,ExceptionInfo *exception)
2682 assert(exception != (ExceptionInfo *) NULL);
2683 assert(exception->signature == MagickSignature);
2684 switch (quantum_info->depth)
2688 for (x=0; x < (ssize_t) number_pixels; x++)
2690 q=PopCharPixel(ScaleQuantumToChar(GetPixelRed(image,p)),q);
2691 q=PopCharPixel(ScaleQuantumToChar(GetPixelGreen(image,p)),q);
2692 q=PopCharPixel(ScaleQuantumToChar(GetPixelBlue(image,p)),q);
2693 p+=GetPixelChannels(image);
2694 q+=quantum_info->pad;
2700 register unsigned int
2703 range=GetQuantumRange(quantum_info->depth);
2704 if (quantum_info->pack == MagickFalse)
2706 for (x=0; x < (ssize_t) number_pixels; x++)
2708 pixel=(unsigned int) (
2709 ScaleQuantumToAny(GetPixelRed(image,p),range) << 22 |
2710 ScaleQuantumToAny(GetPixelGreen(image,p),range) << 12 |
2711 ScaleQuantumToAny(GetPixelBlue(image,p),range) << 2);
2712 q=PopLongPixel(quantum_info->endian,pixel,q);
2713 p+=GetPixelChannels(image);
2714 q+=quantum_info->pad;
2718 if (quantum_info->quantum == 32UL)
2720 for (x=0; x < (ssize_t) number_pixels; x++)
2722 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
2723 q=PopQuantumLongPixel(quantum_info,pixel,q);
2724 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
2726 q=PopQuantumLongPixel(quantum_info,pixel,q);
2727 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
2728 q=PopQuantumLongPixel(quantum_info,pixel,q);
2729 p+=GetPixelChannels(image);
2730 q+=quantum_info->pad;
2734 for (x=0; x < (ssize_t) number_pixels; x++)
2736 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
2737 q=PopQuantumPixel(quantum_info,pixel,q);
2738 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
2739 q=PopQuantumPixel(quantum_info,pixel,q);
2740 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
2741 q=PopQuantumPixel(quantum_info,pixel,q);
2742 p+=GetPixelChannels(image);
2743 q+=quantum_info->pad;
2749 register unsigned int
2752 range=GetQuantumRange(quantum_info->depth);
2753 if (quantum_info->pack == MagickFalse)
2755 for (x=0; x < (ssize_t) (3*number_pixels-1); x+=2)
2762 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),
2768 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
2774 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),
2776 p+=GetPixelChannels(image);
2780 q=PopShortPixel(quantum_info->endian,(unsigned short) (pixel << 4),
2787 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),
2793 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
2799 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),
2801 p+=GetPixelChannels(image);
2805 q=PopShortPixel(quantum_info->endian,(unsigned short) (pixel << 4),
2807 q+=quantum_info->pad;
2809 for (bit=0; bit < (ssize_t) (3*number_pixels % 2); bit++)
2811 switch ((x+bit) % 3)
2816 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),
2822 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
2828 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),
2830 p+=GetPixelChannels(image);
2834 q=PopShortPixel(quantum_info->endian,(unsigned short) (pixel << 4),
2836 q+=quantum_info->pad;
2839 p+=GetPixelChannels(image);
2842 if (quantum_info->quantum == 32UL)
2844 for (x=0; x < (ssize_t) number_pixels; x++)
2846 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
2847 q=PopQuantumLongPixel(quantum_info,pixel,q);
2848 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
2850 q=PopQuantumLongPixel(quantum_info,pixel,q);
2851 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
2852 q=PopQuantumLongPixel(quantum_info,pixel,q);
2853 p+=GetPixelChannels(image);
2854 q+=quantum_info->pad;
2858 for (x=0; x < (ssize_t) number_pixels; x++)
2860 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
2861 q=PopQuantumPixel(quantum_info,pixel,q);
2862 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
2863 q=PopQuantumPixel(quantum_info,pixel,q);
2864 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
2865 q=PopQuantumPixel(quantum_info,pixel,q);
2866 p+=GetPixelChannels(image);
2867 q+=quantum_info->pad;
2873 register unsigned short
2876 if (quantum_info->format == FloatingPointQuantumFormat)
2878 for (x=0; x < (ssize_t) number_pixels; x++)
2880 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelRed(image,p));
2881 q=PopShortPixel(quantum_info->endian,pixel,q);
2882 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelGreen(image,p));
2883 q=PopShortPixel(quantum_info->endian,pixel,q);
2884 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlue(image,p));
2885 q=PopShortPixel(quantum_info->endian,pixel,q);
2886 p+=GetPixelChannels(image);
2887 q+=quantum_info->pad;
2891 for (x=0; x < (ssize_t) number_pixels; x++)
2893 pixel=ScaleQuantumToShort(GetPixelRed(image,p));
2894 q=PopShortPixel(quantum_info->endian,pixel,q);
2895 pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
2896 q=PopShortPixel(quantum_info->endian,pixel,q);
2897 pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
2898 q=PopShortPixel(quantum_info->endian,pixel,q);
2899 p+=GetPixelChannels(image);
2900 q+=quantum_info->pad;
2906 register unsigned int
2909 if (quantum_info->format == FloatingPointQuantumFormat)
2911 for (x=0; x < (ssize_t) number_pixels; x++)
2913 q=PopFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
2914 q=PopFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
2915 q=PopFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
2916 p+=GetPixelChannels(image);
2917 q+=quantum_info->pad;
2921 for (x=0; x < (ssize_t) number_pixels; x++)
2923 pixel=ScaleQuantumToLong(GetPixelRed(image,p));
2924 q=PopLongPixel(quantum_info->endian,pixel,q);
2925 pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
2926 q=PopLongPixel(quantum_info->endian,pixel,q);
2927 pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
2928 q=PopLongPixel(quantum_info->endian,pixel,q);
2929 p+=GetPixelChannels(image);
2930 q+=quantum_info->pad;
2936 if (quantum_info->format == FloatingPointQuantumFormat)
2938 for (x=0; x < (ssize_t) number_pixels; x++)
2940 q=PopDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
2941 q=PopDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
2942 q=PopDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
2943 p+=GetPixelChannels(image);
2944 q+=quantum_info->pad;
2951 range=GetQuantumRange(quantum_info->depth);
2952 for (x=0; x < (ssize_t) number_pixels; x++)
2954 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
2956 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
2958 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
2960 p+=GetPixelChannels(image);
2961 q+=quantum_info->pad;
2968 static void ExportRGBAQuantum(const Image *image,QuantumInfo *quantum_info,
2969 const MagickSizeType number_pixels,const Quantum *restrict p,
2970 unsigned char *restrict q,ExceptionInfo *exception)
2978 assert(exception != (ExceptionInfo *) NULL);
2979 assert(exception->signature == MagickSignature);
2980 switch (quantum_info->depth)
2984 register unsigned char
2987 for (x=0; x < (ssize_t) number_pixels; x++)
2989 pixel=ScaleQuantumToChar(GetPixelRed(image,p));
2990 q=PopCharPixel(pixel,q);
2991 pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
2992 q=PopCharPixel(pixel,q);
2993 pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
2994 q=PopCharPixel(pixel,q);
2995 pixel=ScaleQuantumToChar(GetPixelAlpha(image,p));
2996 q=PopCharPixel(pixel,q);
2997 p+=GetPixelChannels(image);
2998 q+=quantum_info->pad;
3004 register unsigned int
3007 range=GetQuantumRange(quantum_info->depth);
3008 if (quantum_info->pack == MagickFalse)
3022 for (x=0; x < (ssize_t) number_pixels; x++)
3024 for (i=0; i < 4; i++)
3028 case 0: quantum=GetPixelRed(image,p); break;
3029 case 1: quantum=GetPixelGreen(image,p); break;
3030 case 2: quantum=GetPixelBlue(image,p); break;
3031 case 3: quantum=GetPixelAlpha(image,p); break;
3037 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
3043 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
3049 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
3051 q=PopLongPixel(quantum_info->endian,pixel,q);
3058 p+=GetPixelChannels(image);
3059 q+=quantum_info->pad;
3063 if (quantum_info->quantum == 32UL)
3065 for (x=0; x < (ssize_t) number_pixels; x++)
3067 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
3068 q=PopQuantumLongPixel(quantum_info,pixel,q);
3069 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
3071 q=PopQuantumLongPixel(quantum_info,pixel,q);
3072 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
3073 q=PopQuantumLongPixel(quantum_info,pixel,q);
3074 pixel=(unsigned int) ScaleQuantumToAny(GetPixelAlpha(image,p),
3076 q=PopQuantumLongPixel(quantum_info,pixel,q);
3077 p+=GetPixelChannels(image);
3078 q+=quantum_info->pad;
3082 for (x=0; x < (ssize_t) number_pixels; x++)
3084 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
3085 q=PopQuantumPixel(quantum_info,pixel,q);
3086 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
3087 q=PopQuantumPixel(quantum_info,pixel,q);
3088 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
3089 q=PopQuantumPixel(quantum_info,pixel,q);
3090 pixel=(unsigned int) ScaleQuantumToAny(GetPixelAlpha(image,p),range);
3091 q=PopQuantumPixel(quantum_info,pixel,q);
3092 p+=GetPixelChannels(image);
3093 q+=quantum_info->pad;
3099 register unsigned short
3102 if (quantum_info->format == FloatingPointQuantumFormat)
3104 for (x=0; x < (ssize_t) number_pixels; x++)
3106 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelRed(image,p));
3107 q=PopShortPixel(quantum_info->endian,pixel,q);
3108 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelGreen(image,p));
3109 q=PopShortPixel(quantum_info->endian,pixel,q);
3110 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlue(image,p));
3111 q=PopShortPixel(quantum_info->endian,pixel,q);
3112 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelAlpha(image,p));
3113 q=PopShortPixel(quantum_info->endian,pixel,q);
3114 p+=GetPixelChannels(image);
3115 q+=quantum_info->pad;
3119 for (x=0; x < (ssize_t) number_pixels; x++)
3121 pixel=ScaleQuantumToShort(GetPixelRed(image,p));
3122 q=PopShortPixel(quantum_info->endian,pixel,q);
3123 pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
3124 q=PopShortPixel(quantum_info->endian,pixel,q);
3125 pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
3126 q=PopShortPixel(quantum_info->endian,pixel,q);
3127 pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
3128 q=PopShortPixel(quantum_info->endian,pixel,q);
3129 p+=GetPixelChannels(image);
3130 q+=quantum_info->pad;
3136 register unsigned int
3139 if (quantum_info->format == FloatingPointQuantumFormat)
3141 for (x=0; x < (ssize_t) number_pixels; x++)
3146 q=PopFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
3147 q=PopFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
3148 q=PopFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
3149 pixel=(float) GetPixelAlpha(image,p);
3150 q=PopFloatPixel(quantum_info,pixel,q);
3151 p+=GetPixelChannels(image);
3152 q+=quantum_info->pad;
3156 for (x=0; x < (ssize_t) number_pixels; x++)
3158 pixel=ScaleQuantumToLong(GetPixelRed(image,p));
3159 q=PopLongPixel(quantum_info->endian,pixel,q);
3160 pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
3161 q=PopLongPixel(quantum_info->endian,pixel,q);
3162 pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
3163 q=PopLongPixel(quantum_info->endian,pixel,q);
3164 pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
3165 q=PopLongPixel(quantum_info->endian,pixel,q);
3166 p+=GetPixelChannels(image);
3167 q+=quantum_info->pad;
3173 if (quantum_info->format == FloatingPointQuantumFormat)
3178 for (x=0; x < (ssize_t) number_pixels; x++)
3180 q=PopDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
3181 q=PopDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
3182 q=PopDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
3183 pixel=(double) GetPixelAlpha(image,p);
3184 q=PopDoublePixel(quantum_info,pixel,q);
3185 p+=GetPixelChannels(image);
3186 q+=quantum_info->pad;
3193 range=GetQuantumRange(quantum_info->depth);
3194 for (x=0; x < (ssize_t) number_pixels; x++)
3196 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
3198 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
3200 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
3202 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
3204 p+=GetPixelChannels(image);
3205 q+=quantum_info->pad;
3212 MagickExport size_t ExportQuantumPixels(const Image *image,
3213 CacheView *image_view,QuantumInfo *quantum_info,
3214 const QuantumType quantum_type,unsigned char *restrict pixels,
3215 ExceptionInfo *exception)
3220 register const Quantum
3226 register unsigned char
3232 assert(image != (Image *) NULL);
3233 assert(image->signature == MagickSignature);
3234 if (image->debug != MagickFalse)
3235 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
3236 assert(quantum_info != (QuantumInfo *) NULL);
3237 assert(quantum_info->signature == MagickSignature);
3238 if (pixels == (unsigned char *) NULL)
3239 pixels=GetQuantumPixels(quantum_info);
3240 if (image_view == (CacheView *) NULL)
3242 number_pixels=GetImageExtent(image);
3243 p=GetVirtualPixelQueue(image);
3247 number_pixels=GetCacheViewExtent(image_view);
3248 p=GetCacheViewVirtualPixelQueue(image_view);
3250 if (quantum_info->alpha_type == AssociatedQuantumAlpha)
3261 q=GetAuthenticPixelQueue(image);
3262 if (image_view != (CacheView *) NULL)
3263 q=GetCacheViewAuthenticPixelQueue(image_view);
3264 for (x=0; x < (ssize_t) image->columns; x++)
3269 if (GetPixelReadMask(image,q) == 0)
3271 q+=GetPixelChannels(image);
3274 Sa=QuantumScale*GetPixelAlpha(image,q);
3275 for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
3277 PixelChannel channel=GetPixelChannelChannel(image,i);
3278 PixelTrait traits=GetPixelChannelTraits(image,channel);
3279 if ((traits & UpdatePixelTrait) == 0)
3281 q[i]=ClampToQuantum(Sa*q[i]);
3283 q+=GetPixelChannels(image);
3286 if ((quantum_type == RGBOQuantum) || (quantum_type == CMYKOQuantum) ||
3287 (quantum_type == BGROQuantum))
3292 q=GetAuthenticPixelQueue(image);
3293 if (image_view != (CacheView *) NULL)
3294 q=GetCacheViewAuthenticPixelQueue(image_view);
3295 for (x=0; x < (ssize_t) number_pixels; x++)
3297 SetPixelAlpha(image,GetPixelAlpha(image,q),q);
3298 q+=GetPixelChannels(image);
3301 if ((quantum_type == CbYCrQuantum) || (quantum_type == CbYCrAQuantum))
3309 q=GetAuthenticPixelQueue(image);
3310 if (image_view != (CacheView *) NULL)
3311 q=GetAuthenticPixelQueue(image);
3312 for (x=0; x < (ssize_t) number_pixels; x++)
3314 quantum=GetPixelRed(image,q);
3315 SetPixelRed(image,GetPixelGreen(image,q),q);
3316 SetPixelGreen(image,quantum,q);
3317 q+=GetPixelChannels(image);
3322 ResetQuantumState(quantum_info);
3323 extent=GetQuantumExtent(image,quantum_info,quantum_type);
3324 switch (quantum_type)
3328 ExportAlphaQuantum(image,quantum_info,number_pixels,p,q,exception);
3333 ExportBGRQuantum(image,quantum_info,number_pixels,p,q,exception);
3339 ExportBGRAQuantum(image,quantum_info,number_pixels,p,q,exception);
3344 ExportBlackQuantum(image,quantum_info,number_pixels,p,q,exception);
3350 ExportBlueQuantum(image,quantum_info,number_pixels,p,q,exception);
3355 ExportCMYKQuantum(image,quantum_info,number_pixels,p,q,exception);
3361 ExportCMYKAQuantum(image,quantum_info,number_pixels,p,q,exception);
3366 ExportCbYCrYQuantum(image,quantum_info,number_pixels,p,q,exception);
3371 ExportGrayQuantum(image,quantum_info,number_pixels,p,q,exception);
3374 case GrayAlphaQuantum:
3376 ExportGrayAlphaQuantum(image,quantum_info,number_pixels,p,q,exception);
3380 case MagentaQuantum:
3382 ExportGreenQuantum(image,quantum_info,number_pixels,p,q,exception);
3387 ExportIndexQuantum(image,quantum_info,number_pixels,p,q,exception);
3390 case IndexAlphaQuantum:
3392 ExportIndexAlphaQuantum(image,quantum_info,number_pixels,p,q,exception);
3398 ExportRedQuantum(image,quantum_info,number_pixels,p,q,exception);
3401 case OpacityQuantum:
3403 ExportOpacityQuantum(image,quantum_info,number_pixels,p,q,exception);
3409 ExportRGBQuantum(image,quantum_info,number_pixels,p,q,exception);
3416 ExportRGBAQuantum(image,quantum_info,number_pixels,p,q,exception);
3422 if ((quantum_type == CbYCrQuantum) || (quantum_type == CbYCrAQuantum))
3430 q=GetAuthenticPixelQueue(image);
3431 if (image_view != (CacheView *) NULL)
3432 q=GetCacheViewAuthenticPixelQueue(image_view);
3433 for (x=0; x < (ssize_t) number_pixels; x++)
3435 quantum=GetPixelRed(image,q);
3436 SetPixelRed(image,GetPixelGreen(image,q),q);
3437 SetPixelGreen(image,quantum,q);
3438 q+=GetPixelChannels(image);
3441 if ((quantum_type == RGBOQuantum) || (quantum_type == CMYKOQuantum) ||
3442 (quantum_type == BGROQuantum))
3447 q=GetAuthenticPixelQueue(image);
3448 if (image_view != (CacheView *) NULL)
3449 q=GetCacheViewAuthenticPixelQueue(image_view);
3450 for (x=0; x < (ssize_t) number_pixels; x++)
3452 SetPixelAlpha(image,GetPixelAlpha(image,q),q);
3453 q+=GetPixelChannels(image);