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-2013 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 *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 *pixels)
122 p=(double *) quantum;
123 *p=(double) (pixel*quantum_info->state.inverse_scale+quantum_info->minimum);
124 if (quantum_info->endian == LSBEndian)
126 *pixels++=quantum[0];
127 *pixels++=quantum[1];
128 *pixels++=quantum[2];
129 *pixels++=quantum[3];
130 *pixels++=quantum[4];
131 *pixels++=quantum[5];
132 *pixels++=quantum[6];
133 *pixels++=quantum[7];
136 *pixels++=quantum[7];
137 *pixels++=quantum[6];
138 *pixels++=quantum[5];
139 *pixels++=quantum[4];
140 *pixels++=quantum[3];
141 *pixels++=quantum[2];
142 *pixels++=quantum[1];
143 *pixels++=quantum[0];
147 static inline unsigned char *PopFloatPixel(QuantumInfo *quantum_info,
148 const float pixel,unsigned char *pixels)
157 *p=(float) ((double) pixel*quantum_info->state.inverse_scale+
158 quantum_info->minimum);
159 if (quantum_info->endian == LSBEndian)
161 *pixels++=quantum[0];
162 *pixels++=quantum[1];
163 *pixels++=quantum[2];
164 *pixels++=quantum[3];
167 *pixels++=quantum[3];
168 *pixels++=quantum[2];
169 *pixels++=quantum[1];
170 *pixels++=quantum[0];
174 static inline unsigned char *PopQuantumPixel(QuantumInfo *quantum_info,
175 const QuantumAny pixel,unsigned char *pixels)
183 if (quantum_info->state.bits == 0UL)
184 quantum_info->state.bits=8U;
185 for (i=(ssize_t) quantum_info->depth; i > 0L; )
187 quantum_bits=(size_t) i;
188 if (quantum_bits > quantum_info->state.bits)
189 quantum_bits=quantum_info->state.bits;
190 i-=(ssize_t) quantum_bits;
191 if (quantum_info->state.bits == 8UL)
193 quantum_info->state.bits-=quantum_bits;
194 *pixels|=(((pixel >> i) &~ ((~0UL) << quantum_bits)) <<
195 quantum_info->state.bits);
196 if (quantum_info->state.bits == 0UL)
199 quantum_info->state.bits=8UL;
205 static inline unsigned char *PopQuantumLongPixel(QuantumInfo *quantum_info,
206 const size_t pixel,unsigned char *pixels)
214 if (quantum_info->state.bits == 0U)
215 quantum_info->state.bits=32UL;
216 for (i=(ssize_t) quantum_info->depth; i > 0; )
218 quantum_bits=(size_t) i;
219 if (quantum_bits > quantum_info->state.bits)
220 quantum_bits=quantum_info->state.bits;
221 quantum_info->state.pixel|=(((pixel >> (quantum_info->depth-i)) &
222 quantum_info->state.mask[quantum_bits]) << (32U-
223 quantum_info->state.bits));
224 i-=(ssize_t) quantum_bits;
225 quantum_info->state.bits-=quantum_bits;
226 if (quantum_info->state.bits == 0U)
228 pixels=PopLongPixel(quantum_info->endian,quantum_info->state.pixel,
230 quantum_info->state.pixel=0U;
231 quantum_info->state.bits=32U;
237 static void ExportAlphaQuantum(const Image *image,QuantumInfo *quantum_info,
238 const MagickSizeType number_pixels,const Quantum *restrict p,
239 unsigned char *restrict q,ExceptionInfo *exception)
247 switch (quantum_info->depth)
251 register unsigned char
254 for (x=0; x < (ssize_t) number_pixels; x++)
256 pixel=ScaleQuantumToChar(GetPixelAlpha(image,p));
257 q=PopCharPixel(pixel,q);
258 p+=GetPixelChannels(image);
259 q+=quantum_info->pad;
265 register unsigned short
268 if (quantum_info->format == FloatingPointQuantumFormat)
270 for (x=0; x < (ssize_t) number_pixels; x++)
272 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelAlpha(image,p));
273 q=PopShortPixel(quantum_info->endian,pixel,q);
274 p+=GetPixelChannels(image);
275 q+=quantum_info->pad;
279 for (x=0; x < (ssize_t) number_pixels; x++)
281 pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
282 q=PopShortPixel(quantum_info->endian,pixel,q);
283 p+=GetPixelChannels(image);
284 q+=quantum_info->pad;
290 register unsigned int
293 if (quantum_info->format == FloatingPointQuantumFormat)
295 for (x=0; x < (ssize_t) number_pixels; x++)
297 q=PopFloatPixel(quantum_info,(float) GetPixelAlpha(image,p),q);
298 p+=GetPixelChannels(image);
299 q+=quantum_info->pad;
303 for (x=0; x < (ssize_t) number_pixels; x++)
305 pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
306 q=PopLongPixel(quantum_info->endian,pixel,q);
307 p+=GetPixelChannels(image);
308 q+=quantum_info->pad;
314 if (quantum_info->format == FloatingPointQuantumFormat)
316 for (x=0; x < (ssize_t) number_pixels; x++)
318 q=PopDoublePixel(quantum_info,(double) GetPixelAlpha(image,p),q);
319 p+=GetPixelChannels(image);
320 q+=quantum_info->pad;
327 range=GetQuantumRange(quantum_info->depth);
328 for (x=0; x < (ssize_t) number_pixels; x++)
330 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
332 p+=GetPixelChannels(image);
333 q+=quantum_info->pad;
340 static void ExportBGRQuantum(const Image *image,QuantumInfo *quantum_info,
341 const MagickSizeType number_pixels,const Quantum *restrict p,
342 unsigned char *restrict q,ExceptionInfo *exception)
353 switch (quantum_info->depth)
357 for (x=0; x < (ssize_t) number_pixels; x++)
359 q=PopCharPixel(ScaleQuantumToChar(GetPixelBlue(image,p)),q);
360 q=PopCharPixel(ScaleQuantumToChar(GetPixelGreen(image,p)),q);
361 q=PopCharPixel(ScaleQuantumToChar(GetPixelRed(image,p)),q);
362 p+=GetPixelChannels(image);
363 q+=quantum_info->pad;
369 register unsigned int
372 range=GetQuantumRange(quantum_info->depth);
373 if (quantum_info->pack == MagickFalse)
375 for (x=0; x < (ssize_t) number_pixels; x++)
377 pixel=(unsigned int) (
378 ScaleQuantumToAny(GetPixelRed(image,p),range) << 22 |
379 ScaleQuantumToAny(GetPixelGreen(image,p),range) << 12 |
380 ScaleQuantumToAny(GetPixelBlue(image,p),range) << 2);
381 q=PopLongPixel(quantum_info->endian,pixel,q);
382 p+=GetPixelChannels(image);
383 q+=quantum_info->pad;
387 if (quantum_info->quantum == 32UL)
389 for (x=0; x < (ssize_t) number_pixels; x++)
391 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
392 q=PopQuantumLongPixel(quantum_info,pixel,q);
393 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
395 q=PopQuantumLongPixel(quantum_info,pixel,q);
396 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
397 q=PopQuantumLongPixel(quantum_info,pixel,q);
398 p+=GetPixelChannels(image);
399 q+=quantum_info->pad;
403 for (x=0; x < (ssize_t) number_pixels; x++)
405 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
406 q=PopQuantumPixel(quantum_info,pixel,q);
407 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
408 q=PopQuantumPixel(quantum_info,pixel,q);
409 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
410 q=PopQuantumPixel(quantum_info,pixel,q);
411 p+=GetPixelChannels(image);
412 q+=quantum_info->pad;
418 register unsigned int
421 range=GetQuantumRange(quantum_info->depth);
422 if (quantum_info->pack == MagickFalse)
424 for (x=0; x < (ssize_t) (3*number_pixels-1); x+=2)
431 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),
437 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
443 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),
445 p+=GetPixelChannels(image);
449 q=PopShortPixel(quantum_info->endian,(unsigned short) (pixel << 4),
456 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),
462 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
468 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),
470 p+=GetPixelChannels(image);
474 q=PopShortPixel(quantum_info->endian,(unsigned short) (pixel << 4),
476 q+=quantum_info->pad;
478 for (bit=0; bit < (ssize_t) (3*number_pixels % 2); bit++)
485 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),
491 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
497 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),
499 p+=GetPixelChannels(image);
503 q=PopShortPixel(quantum_info->endian,(unsigned short) (pixel << 4),
505 q+=quantum_info->pad;
508 p+=GetPixelChannels(image);
511 if (quantum_info->quantum == 32UL)
513 for (x=0; x < (ssize_t) number_pixels; x++)
515 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
516 q=PopQuantumLongPixel(quantum_info,pixel,q);
517 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
519 q=PopQuantumLongPixel(quantum_info,pixel,q);
520 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
521 q=PopQuantumLongPixel(quantum_info,pixel,q);
522 p+=GetPixelChannels(image);
523 q+=quantum_info->pad;
527 for (x=0; x < (ssize_t) number_pixels; x++)
529 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
530 q=PopQuantumPixel(quantum_info,pixel,q);
531 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
532 q=PopQuantumPixel(quantum_info,pixel,q);
533 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
534 q=PopQuantumPixel(quantum_info,pixel,q);
535 p+=GetPixelChannels(image);
536 q+=quantum_info->pad;
542 register unsigned short
545 if (quantum_info->format == FloatingPointQuantumFormat)
547 for (x=0; x < (ssize_t) number_pixels; x++)
549 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlue(image,p));
550 q=PopShortPixel(quantum_info->endian,pixel,q);
551 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelGreen(image,p));
552 q=PopShortPixel(quantum_info->endian,pixel,q);
553 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelRed(image,p));
554 q=PopShortPixel(quantum_info->endian,pixel,q);
555 p+=GetPixelChannels(image);
556 q+=quantum_info->pad;
560 for (x=0; x < (ssize_t) number_pixels; x++)
562 pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
563 q=PopShortPixel(quantum_info->endian,pixel,q);
564 pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
565 q=PopShortPixel(quantum_info->endian,pixel,q);
566 pixel=ScaleQuantumToShort(GetPixelRed(image,p));
567 q=PopShortPixel(quantum_info->endian,pixel,q);
568 p+=GetPixelChannels(image);
569 q+=quantum_info->pad;
575 register unsigned int
578 if (quantum_info->format == FloatingPointQuantumFormat)
580 for (x=0; x < (ssize_t) number_pixels; x++)
582 q=PopFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
583 q=PopFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
584 q=PopFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
585 p+=GetPixelChannels(image);
586 q+=quantum_info->pad;
590 for (x=0; x < (ssize_t) number_pixels; x++)
592 pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
593 q=PopLongPixel(quantum_info->endian,pixel,q);
594 pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
595 q=PopLongPixel(quantum_info->endian,pixel,q);
596 pixel=ScaleQuantumToLong(GetPixelRed(image,p));
597 q=PopLongPixel(quantum_info->endian,pixel,q);
598 p+=GetPixelChannels(image);
599 q+=quantum_info->pad;
605 if (quantum_info->format == FloatingPointQuantumFormat)
607 for (x=0; x < (ssize_t) number_pixels; x++)
609 q=PopDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
610 q=PopDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
611 q=PopDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
612 p+=GetPixelChannels(image);
613 q+=quantum_info->pad;
620 range=GetQuantumRange(quantum_info->depth);
621 for (x=0; x < (ssize_t) number_pixels; x++)
623 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
625 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
627 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
629 p+=GetPixelChannels(image);
630 q+=quantum_info->pad;
637 static void ExportBGRAQuantum(const Image *image,QuantumInfo *quantum_info,
638 const MagickSizeType number_pixels,const Quantum *restrict p,
639 unsigned char *restrict q,ExceptionInfo *exception)
647 switch (quantum_info->depth)
651 register unsigned char
654 for (x=0; x < (ssize_t) number_pixels; x++)
656 pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
657 q=PopCharPixel(pixel,q);
658 pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
659 q=PopCharPixel(pixel,q);
660 pixel=ScaleQuantumToChar(GetPixelRed(image,p));
661 q=PopCharPixel(pixel,q);
662 pixel=ScaleQuantumToChar(GetPixelAlpha(image,p));
663 q=PopCharPixel(pixel,q);
664 p+=GetPixelChannels(image);
665 q+=quantum_info->pad;
671 register unsigned int
674 range=GetQuantumRange(quantum_info->depth);
675 if (quantum_info->pack == MagickFalse)
689 for (x=0; x < (ssize_t) number_pixels; x++)
691 for (i=0; i < 4; i++)
695 case 0: quantum=GetPixelRed(image,p); break;
696 case 1: quantum=GetPixelGreen(image,p); break;
697 case 2: quantum=GetPixelBlue(image,p); break;
698 case 3: quantum=GetPixelAlpha(image,p); break;
704 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
710 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
716 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
718 q=PopLongPixel(quantum_info->endian,pixel,q);
725 p+=GetPixelChannels(image);
726 q+=quantum_info->pad;
730 if (quantum_info->quantum == 32UL)
732 for (x=0; x < (ssize_t) number_pixels; x++)
734 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
735 q=PopQuantumLongPixel(quantum_info,pixel,q);
736 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
738 q=PopQuantumLongPixel(quantum_info,pixel,q);
739 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
740 q=PopQuantumLongPixel(quantum_info,pixel,q);
741 pixel=(unsigned int) ScaleQuantumToAny(GetPixelAlpha(image,p),
743 q=PopQuantumLongPixel(quantum_info,pixel,q);
744 p+=GetPixelChannels(image);
745 q+=quantum_info->pad;
749 for (x=0; x < (ssize_t) number_pixels; x++)
751 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
752 q=PopQuantumPixel(quantum_info,pixel,q);
753 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
754 q=PopQuantumPixel(quantum_info,pixel,q);
755 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
756 q=PopQuantumPixel(quantum_info,pixel,q);
757 pixel=(unsigned int) ScaleQuantumToAny(GetPixelAlpha(image,p),range);
758 q=PopQuantumPixel(quantum_info,pixel,q);
759 p+=GetPixelChannels(image);
760 q+=quantum_info->pad;
766 register unsigned short
769 if (quantum_info->format == FloatingPointQuantumFormat)
771 for (x=0; x < (ssize_t) number_pixels; x++)
773 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlue(image,p));
774 q=PopShortPixel(quantum_info->endian,pixel,q);
775 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelGreen(image,p));
776 q=PopShortPixel(quantum_info->endian,pixel,q);
777 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelRed(image,p));
778 q=PopShortPixel(quantum_info->endian,pixel,q);
779 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelAlpha(image,p));
780 q=PopShortPixel(quantum_info->endian,pixel,q);
781 p+=GetPixelChannels(image);
782 q+=quantum_info->pad;
786 for (x=0; x < (ssize_t) number_pixels; x++)
788 pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
789 q=PopShortPixel(quantum_info->endian,pixel,q);
790 pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
791 q=PopShortPixel(quantum_info->endian,pixel,q);
792 pixel=ScaleQuantumToShort(GetPixelRed(image,p));
793 q=PopShortPixel(quantum_info->endian,pixel,q);
794 pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
795 q=PopShortPixel(quantum_info->endian,pixel,q);
796 p+=GetPixelChannels(image);
797 q+=quantum_info->pad;
803 register unsigned int
806 if (quantum_info->format == FloatingPointQuantumFormat)
808 for (x=0; x < (ssize_t) number_pixels; x++)
813 q=PopFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
814 q=PopFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
815 q=PopFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
816 pixel=(float) GetPixelAlpha(image,p);
817 q=PopFloatPixel(quantum_info,pixel,q);
818 p+=GetPixelChannels(image);
819 q+=quantum_info->pad;
823 for (x=0; x < (ssize_t) number_pixels; x++)
825 pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
826 q=PopLongPixel(quantum_info->endian,pixel,q);
827 pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
828 q=PopLongPixel(quantum_info->endian,pixel,q);
829 pixel=ScaleQuantumToLong(GetPixelRed(image,p));
830 q=PopLongPixel(quantum_info->endian,pixel,q);
831 pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
832 q=PopLongPixel(quantum_info->endian,pixel,q);
833 p+=GetPixelChannels(image);
834 q+=quantum_info->pad;
840 if (quantum_info->format == FloatingPointQuantumFormat)
845 for (x=0; x < (ssize_t) number_pixels; x++)
847 q=PopDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
848 q=PopDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
849 q=PopDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
850 pixel=(double) GetPixelAlpha(image,p);
851 q=PopDoublePixel(quantum_info,pixel,q);
852 p+=GetPixelChannels(image);
853 q+=quantum_info->pad;
860 range=GetQuantumRange(quantum_info->depth);
861 for (x=0; x < (ssize_t) number_pixels; x++)
863 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
865 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
867 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
869 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
871 p+=GetPixelChannels(image);
872 q+=quantum_info->pad;
879 static void ExportBlackQuantum(const Image *image,QuantumInfo *quantum_info,
880 const MagickSizeType number_pixels,const Quantum *restrict p,
881 unsigned char *restrict q,ExceptionInfo *exception)
889 if (image->colorspace != CMYKColorspace)
891 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
892 "ColorSeparatedImageRequired","`%s'",image->filename);
895 switch (quantum_info->depth)
899 register unsigned char
902 for (x=0; x < (ssize_t) number_pixels; x++)
904 pixel=ScaleQuantumToChar(GetPixelBlack(image,p));
905 q=PopCharPixel(pixel,q);
906 p+=GetPixelChannels(image);
907 q+=quantum_info->pad;
913 register unsigned short
916 if (quantum_info->format == FloatingPointQuantumFormat)
918 for (x=0; x < (ssize_t) number_pixels; x++)
920 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlack(image,p));
921 q=PopShortPixel(quantum_info->endian,pixel,q);
922 p+=GetPixelChannels(image);
923 q+=quantum_info->pad;
927 for (x=0; x < (ssize_t) number_pixels; x++)
929 pixel=ScaleQuantumToShort(GetPixelBlack(image,p));
930 q=PopShortPixel(quantum_info->endian,pixel,q);
931 p+=GetPixelChannels(image);
932 q+=quantum_info->pad;
938 register unsigned int
941 if (quantum_info->format == FloatingPointQuantumFormat)
943 for (x=0; x < (ssize_t) number_pixels; x++)
945 q=PopFloatPixel(quantum_info,(float) GetPixelBlack(image,p),q);
946 p+=GetPixelChannels(image);
947 q+=quantum_info->pad;
951 for (x=0; x < (ssize_t) number_pixels; x++)
953 pixel=ScaleQuantumToLong(GetPixelBlack(image,p));
954 q=PopLongPixel(quantum_info->endian,pixel,q);
955 p+=GetPixelChannels(image);
956 q+=quantum_info->pad;
962 if (quantum_info->format == FloatingPointQuantumFormat)
964 for (x=0; x < (ssize_t) number_pixels; x++)
966 q=PopDoublePixel(quantum_info,(double) GetPixelBlack(image,p),q);
967 p+=GetPixelChannels(image);
968 q+=quantum_info->pad;
975 range=GetQuantumRange(quantum_info->depth);
976 for (x=0; x < (ssize_t) number_pixels; x++)
978 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlack(image,p),
980 p+=GetPixelChannels(image);
981 q+=quantum_info->pad;
988 static void ExportBlueQuantum(const Image *image,QuantumInfo *quantum_info,
989 const MagickSizeType number_pixels,const Quantum *restrict p,
990 unsigned char *restrict q,ExceptionInfo *exception)
998 switch (quantum_info->depth)
1002 register unsigned char
1005 for (x=0; x < (ssize_t) number_pixels; x++)
1007 pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
1008 q=PopCharPixel(pixel,q);
1009 p+=GetPixelChannels(image);
1010 q+=quantum_info->pad;
1016 register unsigned short
1019 if (quantum_info->format == FloatingPointQuantumFormat)
1021 for (x=0; x < (ssize_t) number_pixels; x++)
1023 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlue(image,p));
1024 q=PopShortPixel(quantum_info->endian,pixel,q);
1025 p+=GetPixelChannels(image);
1026 q+=quantum_info->pad;
1030 for (x=0; x < (ssize_t) number_pixels; x++)
1032 pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
1033 q=PopShortPixel(quantum_info->endian,pixel,q);
1034 p+=GetPixelChannels(image);
1035 q+=quantum_info->pad;
1041 register unsigned int
1044 if (quantum_info->format == FloatingPointQuantumFormat)
1046 for (x=0; x < (ssize_t) number_pixels; x++)
1048 q=PopFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
1049 p+=GetPixelChannels(image);
1050 q+=quantum_info->pad;
1054 for (x=0; x < (ssize_t) number_pixels; x++)
1056 pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
1057 q=PopLongPixel(quantum_info->endian,pixel,q);
1058 p+=GetPixelChannels(image);
1059 q+=quantum_info->pad;
1065 if (quantum_info->format == FloatingPointQuantumFormat)
1067 for (x=0; x < (ssize_t) number_pixels; x++)
1069 q=PopDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
1070 p+=GetPixelChannels(image);
1071 q+=quantum_info->pad;
1078 range=GetQuantumRange(quantum_info->depth);
1079 for (x=0; x < (ssize_t) number_pixels; x++)
1081 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
1083 p+=GetPixelChannels(image);
1084 q+=quantum_info->pad;
1091 static void ExportCbYCrYQuantum(const Image *image,QuantumInfo *quantum_info,
1092 const MagickSizeType number_pixels,const Quantum *restrict p,
1093 unsigned char *restrict q,ExceptionInfo *exception)
1102 register unsigned int
1113 switch (quantum_info->depth)
1117 if (quantum_info->pack == MagickFalse)
1119 for (x=0; x < (ssize_t) number_pixels; x+=2)
1121 for (i=0; i < 4; i++)
1127 quantum=GetPixelRed(image,p);
1132 quantum=GetPixelGreen(image,p);
1137 quantum=GetPixelBlue(image,p);
1141 cbcr[i]=(Quantum) quantum;
1144 pixel=(unsigned int) ((size_t) (cbcr[1]) << 22 | (size_t)
1145 (cbcr[0]) << 12 | (size_t) (cbcr[2]) << 2);
1146 q=PopLongPixel(quantum_info->endian,pixel,q);
1147 p+=GetPixelChannels(image);
1148 pixel=(unsigned int) ((size_t) (cbcr[3]) << 22 | (size_t)
1149 (cbcr[0]) << 12 | (size_t) (cbcr[2]) << 2);
1150 q=PopLongPixel(quantum_info->endian,pixel,q);
1151 p+=GetPixelChannels(image);
1152 q+=quantum_info->pad;
1163 for (x=0; x < (ssize_t) number_pixels; x+=2)
1165 for (i=0; i < 4; i++)
1171 quantum=GetPixelRed(image,p);
1176 quantum=GetPixelGreen(image,p);
1181 quantum=GetPixelBlue(image,p);
1185 cbcr[i]=(Quantum) quantum;
1188 range=GetQuantumRange(quantum_info->depth);
1189 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(cbcr[1],range),q);
1190 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(cbcr[0],range),q);
1191 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(cbcr[2],range),q);
1192 p+=GetPixelChannels(image);
1193 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(cbcr[3],range),q);
1194 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(cbcr[0],range),q);
1195 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(cbcr[2],range),q);
1196 p+=GetPixelChannels(image);
1197 q+=quantum_info->pad;
1204 static void ExportCMYKQuantum(const Image *image,QuantumInfo *quantum_info,
1205 const MagickSizeType number_pixels,const Quantum *restrict p,
1206 unsigned char *restrict q,ExceptionInfo *exception)
1211 if (image->colorspace != CMYKColorspace)
1213 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1214 "ColorSeparatedImageRequired","`%s'",image->filename);
1217 switch (quantum_info->depth)
1221 register unsigned char
1224 for (x=0; x < (ssize_t) number_pixels; x++)
1226 pixel=ScaleQuantumToChar(GetPixelRed(image,p));
1227 q=PopCharPixel(pixel,q);
1228 pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
1229 q=PopCharPixel(pixel,q);
1230 pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
1231 q=PopCharPixel(pixel,q);
1232 pixel=ScaleQuantumToChar(GetPixelBlack(image,p));
1233 q=PopCharPixel(pixel,q);
1234 p+=GetPixelChannels(image);
1235 q+=quantum_info->pad;
1241 register unsigned short
1244 if (quantum_info->format == FloatingPointQuantumFormat)
1246 for (x=0; x < (ssize_t) number_pixels; x++)
1248 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelRed(image,p));
1249 q=PopShortPixel(quantum_info->endian,pixel,q);
1250 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelGreen(image,p));
1251 q=PopShortPixel(quantum_info->endian,pixel,q);
1252 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlue(image,p));
1253 q=PopShortPixel(quantum_info->endian,pixel,q);
1254 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlack(image,p));
1255 q=PopShortPixel(quantum_info->endian,pixel,q);
1256 p+=GetPixelChannels(image);
1257 q+=quantum_info->pad;
1261 for (x=0; x < (ssize_t) number_pixels; x++)
1263 pixel=ScaleQuantumToShort(GetPixelRed(image,p));
1264 q=PopShortPixel(quantum_info->endian,pixel,q);
1265 pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
1266 q=PopShortPixel(quantum_info->endian,pixel,q);
1267 pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
1268 q=PopShortPixel(quantum_info->endian,pixel,q);
1269 pixel=ScaleQuantumToShort(GetPixelBlack(image,p));
1270 q=PopShortPixel(quantum_info->endian,pixel,q);
1271 p+=GetPixelChannels(image);
1272 q+=quantum_info->pad;
1278 register unsigned int
1281 if (quantum_info->format == FloatingPointQuantumFormat)
1283 for (x=0; x < (ssize_t) number_pixels; x++)
1285 q=PopFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
1286 q=PopFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
1287 q=PopFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
1288 q=PopFloatPixel(quantum_info,(float) GetPixelBlack(image,p),q);
1289 p+=GetPixelChannels(image);
1290 q+=quantum_info->pad;
1294 for (x=0; x < (ssize_t) number_pixels; x++)
1296 pixel=ScaleQuantumToLong(GetPixelRed(image,p));
1297 q=PopLongPixel(quantum_info->endian,pixel,q);
1298 pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
1299 q=PopLongPixel(quantum_info->endian,pixel,q);
1300 pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
1301 q=PopLongPixel(quantum_info->endian,pixel,q);
1302 pixel=ScaleQuantumToLong(GetPixelBlack(image,p));
1303 q=PopLongPixel(quantum_info->endian,pixel,q);
1304 p+=GetPixelChannels(image);
1305 q+=quantum_info->pad;
1311 if (quantum_info->format == FloatingPointQuantumFormat)
1313 for (x=0; x < (ssize_t) number_pixels; x++)
1315 q=PopDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
1316 q=PopDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
1317 q=PopDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
1318 q=PopDoublePixel(quantum_info,(double) GetPixelBlack(image,p),q);
1319 p+=GetPixelChannels(image);
1320 q+=quantum_info->pad;
1330 range=GetQuantumRange(quantum_info->depth);
1331 for (x=0; x < (ssize_t) number_pixels; x++)
1333 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
1335 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
1337 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
1339 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlack(image,p),
1341 p+=GetPixelChannels(image);
1342 q+=quantum_info->pad;
1349 static void ExportCMYKAQuantum(const Image *image,QuantumInfo *quantum_info,
1350 const MagickSizeType number_pixels,const Quantum *restrict p,
1351 unsigned char *restrict q,ExceptionInfo *exception)
1356 if (image->colorspace != CMYKColorspace)
1358 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1359 "ColorSeparatedImageRequired","`%s'",image->filename);
1362 switch (quantum_info->depth)
1366 register unsigned char
1369 for (x=0; x < (ssize_t) number_pixels; x++)
1371 pixel=ScaleQuantumToChar(GetPixelRed(image,p));
1372 q=PopCharPixel(pixel,q);
1373 pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
1374 q=PopCharPixel(pixel,q);
1375 pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
1376 q=PopCharPixel(pixel,q);
1377 pixel=ScaleQuantumToChar(GetPixelBlack(image,p));
1378 q=PopCharPixel(pixel,q);
1379 pixel=ScaleQuantumToChar(GetPixelAlpha(image,p));
1380 q=PopCharPixel(pixel,q);
1381 p+=GetPixelChannels(image);
1382 q+=quantum_info->pad;
1388 register unsigned short
1391 if (quantum_info->format == FloatingPointQuantumFormat)
1393 for (x=0; x < (ssize_t) number_pixels; x++)
1395 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelRed(image,p));
1396 q=PopShortPixel(quantum_info->endian,pixel,q);
1397 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelGreen(image,p));
1398 q=PopShortPixel(quantum_info->endian,pixel,q);
1399 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlue(image,p));
1400 q=PopShortPixel(quantum_info->endian,pixel,q);
1401 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlack(image,p));
1402 q=PopShortPixel(quantum_info->endian,pixel,q);
1403 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelAlpha(image,p));
1404 q=PopShortPixel(quantum_info->endian,pixel,q);
1405 p+=GetPixelChannels(image);
1406 q+=quantum_info->pad;
1410 for (x=0; x < (ssize_t) number_pixels; x++)
1412 pixel=ScaleQuantumToShort(GetPixelRed(image,p));
1413 q=PopShortPixel(quantum_info->endian,pixel,q);
1414 pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
1415 q=PopShortPixel(quantum_info->endian,pixel,q);
1416 pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
1417 q=PopShortPixel(quantum_info->endian,pixel,q);
1418 pixel=ScaleQuantumToShort(GetPixelBlack(image,p));
1419 q=PopShortPixel(quantum_info->endian,pixel,q);
1420 pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
1421 q=PopShortPixel(quantum_info->endian,pixel,q);
1422 p+=GetPixelChannels(image);
1423 q+=quantum_info->pad;
1429 register unsigned int
1432 if (quantum_info->format == FloatingPointQuantumFormat)
1434 for (x=0; x < (ssize_t) number_pixels; x++)
1439 q=PopFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
1440 q=PopFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
1441 q=PopFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
1442 q=PopFloatPixel(quantum_info,(float) GetPixelBlack(image,p),q);
1443 pixel=(float) (GetPixelAlpha(image,p));
1444 q=PopFloatPixel(quantum_info,pixel,q);
1445 p+=GetPixelChannels(image);
1446 q+=quantum_info->pad;
1450 for (x=0; x < (ssize_t) number_pixels; x++)
1452 pixel=ScaleQuantumToLong(GetPixelRed(image,p));
1453 q=PopLongPixel(quantum_info->endian,pixel,q);
1454 pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
1455 q=PopLongPixel(quantum_info->endian,pixel,q);
1456 pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
1457 q=PopLongPixel(quantum_info->endian,pixel,q);
1458 pixel=ScaleQuantumToLong(GetPixelBlack(image,p));
1459 q=PopLongPixel(quantum_info->endian,pixel,q);
1460 pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
1461 q=PopLongPixel(quantum_info->endian,pixel,q);
1462 p+=GetPixelChannels(image);
1463 q+=quantum_info->pad;
1469 if (quantum_info->format == FloatingPointQuantumFormat)
1474 for (x=0; x < (ssize_t) number_pixels; x++)
1476 q=PopDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
1477 q=PopDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
1478 q=PopDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
1479 q=PopDoublePixel(quantum_info,(double) GetPixelBlack(image,p),q);
1480 pixel=(double) (GetPixelAlpha(image,p));
1481 q=PopDoublePixel(quantum_info,pixel,q);
1482 p+=GetPixelChannels(image);
1483 q+=quantum_info->pad;
1493 range=GetQuantumRange(quantum_info->depth);
1494 for (x=0; x < (ssize_t) number_pixels; x++)
1496 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
1498 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
1500 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
1502 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlack(image,p),
1504 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
1506 p+=GetPixelChannels(image);
1507 q+=quantum_info->pad;
1514 static void ExportGrayQuantum(const Image *image,QuantumInfo *quantum_info,
1515 const MagickSizeType number_pixels,const Quantum *restrict p,
1516 unsigned char *restrict q,ExceptionInfo *exception)
1524 switch (quantum_info->depth)
1531 register unsigned char
1540 if (quantum_info->min_is_white != MagickFalse)
1545 threshold=QuantumRange/2.0;
1546 for (x=((ssize_t) number_pixels-7); x > 0; x-=8)
1549 *q|=(GetPixelIntensity(image,p) < threshold ? black : white) << 7;
1550 p+=GetPixelChannels(image);
1551 *q|=(GetPixelIntensity(image,p) < threshold ? black : white) << 6;
1552 p+=GetPixelChannels(image);
1553 *q|=(GetPixelIntensity(image,p) < threshold ? black : white) << 5;
1554 p+=GetPixelChannels(image);
1555 *q|=(GetPixelIntensity(image,p) < threshold ? black : white) << 4;
1556 p+=GetPixelChannels(image);
1557 *q|=(GetPixelIntensity(image,p) < threshold ? black : white) << 3;
1558 p+=GetPixelChannels(image);
1559 *q|=(GetPixelIntensity(image,p) < threshold ? black : white) << 2;
1560 p+=GetPixelChannels(image);
1561 *q|=(GetPixelIntensity(image,p) < threshold ? black : white) << 1;
1562 p+=GetPixelChannels(image);
1563 *q|=(GetPixelIntensity(image,p) < threshold ? black : white) << 0;
1564 p+=GetPixelChannels(image);
1567 if ((number_pixels % 8) != 0)
1570 for (bit=7; bit >= (ssize_t) (8-(number_pixels % 8)); bit--)
1572 *q|=(GetPixelIntensity(image,p) < threshold ? black : white) << bit;
1573 p+=GetPixelChannels(image);
1581 register unsigned char
1584 for (x=0; x < (ssize_t) (number_pixels-1) ; x+=2)
1586 pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelIntensity(image,p)));
1587 *q=(((pixel >> 4) & 0xf) << 4);
1588 p+=GetPixelChannels(image);
1589 pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelIntensity(image,p)));
1591 p+=GetPixelChannels(image);
1594 if ((number_pixels % 2) != 0)
1596 pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelIntensity(image,p)));
1597 *q=(((pixel >> 4) & 0xf) << 4);
1598 p+=GetPixelChannels(image);
1605 register unsigned char
1608 for (x=0; x < (ssize_t) number_pixels; x++)
1610 pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelIntensity(image,p)));
1611 q=PopCharPixel(pixel,q);
1612 p+=GetPixelChannels(image);
1613 q+=quantum_info->pad;
1619 range=GetQuantumRange(quantum_info->depth);
1620 if (quantum_info->pack == MagickFalse)
1622 register unsigned int
1625 for (x=0; x < (ssize_t) (number_pixels-2); x+=3)
1627 pixel=(unsigned int) (ScaleQuantumToAny(ClampToQuantum(
1628 GetPixelIntensity(image,p+2*GetPixelChannels(image))),range) <<
1629 22 | ScaleQuantumToAny(ClampToQuantum(GetPixelIntensity(image,
1630 p+GetPixelChannels(image))),range) << 12 | ScaleQuantumToAny(
1631 ClampToQuantum(GetPixelIntensity(image,p)),range) << 2);
1632 q=PopLongPixel(quantum_info->endian,pixel,q);
1633 p+=3*GetPixelChannels(image);
1634 q+=quantum_info->pad;
1636 if (x < (ssize_t) number_pixels)
1639 if (x++ < (ssize_t) (number_pixels-1))
1640 pixel|=ScaleQuantumToAny(ClampToQuantum(GetPixelIntensity(image,
1641 p+GetPixelChannels(image))),range) << 12;
1642 if (x++ < (ssize_t) number_pixels)
1643 pixel|=ScaleQuantumToAny(ClampToQuantum(GetPixelIntensity(image,
1645 q=PopLongPixel(quantum_info->endian,pixel,q);
1649 for (x=0; x < (ssize_t) number_pixels; x++)
1651 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(ClampToQuantum(
1652 GetPixelIntensity(image,p)),range),q);
1653 p+=GetPixelChannels(image);
1654 q+=quantum_info->pad;
1660 register unsigned short
1663 range=GetQuantumRange(quantum_info->depth);
1664 if (quantum_info->pack == MagickFalse)
1666 for (x=0; x < (ssize_t) number_pixels; x++)
1668 pixel=ScaleQuantumToShort(ClampToQuantum(
1669 GetPixelIntensity(image,p)));
1670 q=PopShortPixel(quantum_info->endian,(unsigned short) (pixel >> 4),
1672 p+=GetPixelChannels(image);
1673 q+=quantum_info->pad;
1677 for (x=0; x < (ssize_t) number_pixels; x++)
1679 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(ClampToQuantum(
1680 GetPixelIntensity(image,p)),range),q);
1681 p+=GetPixelChannels(image);
1682 q+=quantum_info->pad;
1688 register unsigned short
1691 if (quantum_info->format == FloatingPointQuantumFormat)
1693 for (x=0; x < (ssize_t) number_pixels; x++)
1695 pixel=SinglePrecisionToHalf(QuantumScale*
1696 GetPixelIntensity(image,p));
1697 q=PopShortPixel(quantum_info->endian,pixel,q);
1698 p+=GetPixelChannels(image);
1699 q+=quantum_info->pad;
1703 for (x=0; x < (ssize_t) number_pixels; x++)
1705 pixel=ScaleQuantumToShort(ClampToQuantum(GetPixelIntensity(image,p)));
1706 q=PopShortPixel(quantum_info->endian,pixel,q);
1707 p+=GetPixelChannels(image);
1708 q+=quantum_info->pad;
1714 register unsigned int
1717 if (quantum_info->format == FloatingPointQuantumFormat)
1719 for (x=0; x < (ssize_t) number_pixels; x++)
1724 pixel=(float) GetPixelIntensity(image,p);
1725 q=PopFloatPixel(quantum_info,pixel,q);
1726 p+=GetPixelChannels(image);
1727 q+=quantum_info->pad;
1731 for (x=0; x < (ssize_t) number_pixels; x++)
1733 pixel=ScaleQuantumToLong(ClampToQuantum(GetPixelIntensity(image,p)));
1734 q=PopLongPixel(quantum_info->endian,pixel,q);
1735 p+=GetPixelChannels(image);
1736 q+=quantum_info->pad;
1742 if (quantum_info->format == FloatingPointQuantumFormat)
1744 for (x=0; x < (ssize_t) number_pixels; x++)
1749 pixel=GetPixelIntensity(image,p);
1750 q=PopDoublePixel(quantum_info,pixel,q);
1751 p+=GetPixelChannels(image);
1752 q+=quantum_info->pad;
1759 range=GetQuantumRange(quantum_info->depth);
1760 for (x=0; x < (ssize_t) number_pixels; x++)
1762 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(ClampToQuantum(
1763 GetPixelIntensity(image,p)),range),q);
1764 p+=GetPixelChannels(image);
1765 q+=quantum_info->pad;
1772 static void ExportGrayAlphaQuantum(const Image *image,QuantumInfo *quantum_info,
1773 const MagickSizeType number_pixels,const Quantum *restrict p,
1774 unsigned char *restrict q,ExceptionInfo *exception)
1782 switch (quantum_info->depth)
1789 register unsigned char
1799 if (quantum_info->min_is_white == MagickFalse)
1804 threshold=QuantumRange/2.0;
1805 for (x=((ssize_t) number_pixels-3); x > 0; x-=4)
1808 *q|=(GetPixelIntensity(image,p) > threshold ? black : white) << 7;
1809 pixel=(unsigned char) (GetPixelAlpha(image,p) == OpaqueAlpha ?
1811 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 6);
1812 p+=GetPixelChannels(image);
1813 *q|=(GetPixelIntensity(image,p) > threshold ? black : white) << 5;
1814 pixel=(unsigned char) (GetPixelAlpha(image,p) == OpaqueAlpha ?
1816 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 4);
1817 p+=GetPixelChannels(image);
1818 *q|=(GetPixelIntensity(image,p) > threshold ? black : white) << 3;
1819 pixel=(unsigned char) (GetPixelAlpha(image,p) == OpaqueAlpha ?
1821 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 2);
1822 p+=GetPixelChannels(image);
1823 *q|=(GetPixelIntensity(image,p) > threshold ? black : white) << 1;
1824 pixel=(unsigned char) (GetPixelAlpha(image,p) == OpaqueAlpha ?
1826 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 0);
1827 p+=GetPixelChannels(image);
1830 if ((number_pixels % 4) != 0)
1833 for (bit=0; bit <= (ssize_t) (number_pixels % 4); bit+=2)
1835 *q|=(GetPixelIntensity(image,p) > threshold ? black : white) <<
1837 pixel=(unsigned char) (GetPixelAlpha(image,p) == OpaqueAlpha ?
1839 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << (unsigned char)
1841 p+=GetPixelChannels(image);
1849 register unsigned char
1852 for (x=0; x < (ssize_t) number_pixels ; x++)
1854 pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelIntensity(image,p)));
1855 *q=(((pixel >> 4) & 0xf) << 4);
1856 pixel=(unsigned char) (16*QuantumScale*GetPixelAlpha(image,p)+0.5);
1858 p+=GetPixelChannels(image);
1865 register unsigned char
1868 for (x=0; x < (ssize_t) number_pixels; x++)
1870 pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelIntensity(image,p)));
1871 q=PopCharPixel(pixel,q);
1872 pixel=ScaleQuantumToChar(GetPixelAlpha(image,p));
1873 q=PopCharPixel(pixel,q);
1874 p+=GetPixelChannels(image);
1875 q+=quantum_info->pad;
1881 register unsigned short
1884 if (quantum_info->format == FloatingPointQuantumFormat)
1886 for (x=0; x < (ssize_t) number_pixels; x++)
1888 pixel=SinglePrecisionToHalf(QuantumScale*
1889 GetPixelIntensity(image,p));
1890 q=PopShortPixel(quantum_info->endian,pixel,q);
1891 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelAlpha(image,p));
1892 q=PopShortPixel(quantum_info->endian,pixel,q);
1893 p+=GetPixelChannels(image);
1894 q+=quantum_info->pad;
1898 for (x=0; x < (ssize_t) number_pixels; x++)
1900 pixel=ScaleQuantumToShort(ClampToQuantum(GetPixelIntensity(image,p)));
1901 q=PopShortPixel(quantum_info->endian,pixel,q);
1902 pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
1903 q=PopShortPixel(quantum_info->endian,pixel,q);
1904 p+=GetPixelChannels(image);
1905 q+=quantum_info->pad;
1911 register unsigned int
1914 if (quantum_info->format == FloatingPointQuantumFormat)
1916 for (x=0; x < (ssize_t) number_pixels; x++)
1921 pixel=(float) GetPixelIntensity(image,p);
1922 q=PopFloatPixel(quantum_info,pixel,q);
1923 pixel=(float) (GetPixelAlpha(image,p));
1924 q=PopFloatPixel(quantum_info,pixel,q);
1925 p+=GetPixelChannels(image);
1926 q+=quantum_info->pad;
1930 for (x=0; x < (ssize_t) number_pixels; x++)
1932 pixel=ScaleQuantumToLong(ClampToQuantum(GetPixelIntensity(image,p)));
1933 q=PopLongPixel(quantum_info->endian,pixel,q);
1934 pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
1935 q=PopLongPixel(quantum_info->endian,pixel,q);
1936 p+=GetPixelChannels(image);
1937 q+=quantum_info->pad;
1943 if (quantum_info->format == FloatingPointQuantumFormat)
1945 for (x=0; x < (ssize_t) number_pixels; x++)
1950 pixel=GetPixelIntensity(image,p);
1951 q=PopDoublePixel(quantum_info,pixel,q);
1952 pixel=(double) (GetPixelAlpha(image,p));
1953 q=PopDoublePixel(quantum_info,pixel,q);
1954 p+=GetPixelChannels(image);
1955 q+=quantum_info->pad;
1962 range=GetQuantumRange(quantum_info->depth);
1963 for (x=0; x < (ssize_t) number_pixels; x++)
1965 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(ClampToQuantum(
1966 GetPixelIntensity(image,p)),range),q);
1967 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
1969 p+=GetPixelChannels(image);
1970 q+=quantum_info->pad;
1977 static void ExportGreenQuantum(const Image *image,QuantumInfo *quantum_info,
1978 const MagickSizeType number_pixels,const Quantum *restrict p,
1979 unsigned char *restrict q,ExceptionInfo *exception)
1987 switch (quantum_info->depth)
1991 register unsigned char
1994 for (x=0; x < (ssize_t) number_pixels; x++)
1996 pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
1997 q=PopCharPixel(pixel,q);
1998 p+=GetPixelChannels(image);
1999 q+=quantum_info->pad;
2005 register unsigned short
2008 if (quantum_info->format == FloatingPointQuantumFormat)
2010 for (x=0; x < (ssize_t) number_pixels; x++)
2012 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelGreen(image,p));
2013 q=PopShortPixel(quantum_info->endian,pixel,q);
2014 p+=GetPixelChannels(image);
2015 q+=quantum_info->pad;
2019 for (x=0; x < (ssize_t) number_pixels; x++)
2021 pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
2022 q=PopShortPixel(quantum_info->endian,pixel,q);
2023 p+=GetPixelChannels(image);
2024 q+=quantum_info->pad;
2030 register unsigned int
2033 if (quantum_info->format == FloatingPointQuantumFormat)
2035 for (x=0; x < (ssize_t) number_pixels; x++)
2037 q=PopFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
2038 p+=GetPixelChannels(image);
2039 q+=quantum_info->pad;
2043 for (x=0; x < (ssize_t) number_pixels; x++)
2045 pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
2046 q=PopLongPixel(quantum_info->endian,pixel,q);
2047 p+=GetPixelChannels(image);
2048 q+=quantum_info->pad;
2054 if (quantum_info->format == FloatingPointQuantumFormat)
2056 for (x=0; x < (ssize_t) number_pixels; x++)
2058 q=PopDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
2059 p+=GetPixelChannels(image);
2060 q+=quantum_info->pad;
2067 range=GetQuantumRange(quantum_info->depth);
2068 for (x=0; x < (ssize_t) number_pixels; x++)
2070 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
2072 p+=GetPixelChannels(image);
2073 q+=quantum_info->pad;
2080 static void ExportIndexQuantum(const Image *image,QuantumInfo *quantum_info,
2081 const MagickSizeType number_pixels,const Quantum *restrict p,
2082 unsigned char *restrict q,ExceptionInfo *exception)
2090 if (image->storage_class != PseudoClass)
2092 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2093 "ColormappedImageRequired","`%s'",image->filename);
2096 switch (quantum_info->depth)
2100 register unsigned char
2103 for (x=((ssize_t) number_pixels-7); x > 0; x-=8)
2105 pixel=(unsigned char) GetPixelIndex(image,p);
2106 *q=((pixel & 0x01) << 7);
2107 p+=GetPixelChannels(image);
2108 pixel=(unsigned char) GetPixelIndex(image,p);
2109 *q|=((pixel & 0x01) << 6);
2110 p+=GetPixelChannels(image);
2111 pixel=(unsigned char) GetPixelIndex(image,p);
2112 *q|=((pixel & 0x01) << 5);
2113 p+=GetPixelChannels(image);
2114 pixel=(unsigned char) GetPixelIndex(image,p);
2115 *q|=((pixel & 0x01) << 4);
2116 p+=GetPixelChannels(image);
2117 pixel=(unsigned char) GetPixelIndex(image,p);
2118 *q|=((pixel & 0x01) << 3);
2119 p+=GetPixelChannels(image);
2120 pixel=(unsigned char) GetPixelIndex(image,p);
2121 *q|=((pixel & 0x01) << 2);
2122 p+=GetPixelChannels(image);
2123 pixel=(unsigned char) GetPixelIndex(image,p);
2124 *q|=((pixel & 0x01) << 1);
2125 p+=GetPixelChannels(image);
2126 pixel=(unsigned char) GetPixelIndex(image,p);
2127 *q|=((pixel & 0x01) << 0);
2128 p+=GetPixelChannels(image);
2131 if ((number_pixels % 8) != 0)
2134 for (bit=7; bit >= (ssize_t) (8-(number_pixels % 8)); bit--)
2136 pixel=(unsigned char) GetPixelIndex(image,p);
2137 *q|=((pixel & 0x01) << (unsigned char) bit);
2138 p+=GetPixelChannels(image);
2146 register unsigned char
2149 for (x=0; x < (ssize_t) (number_pixels-1) ; x+=2)
2151 pixel=(unsigned char) GetPixelIndex(image,p);
2152 *q=((pixel & 0xf) << 4);
2153 p+=GetPixelChannels(image);
2154 pixel=(unsigned char) GetPixelIndex(image,p);
2155 *q|=((pixel & 0xf) << 0);
2156 p+=GetPixelChannels(image);
2159 if ((number_pixels % 2) != 0)
2161 pixel=(unsigned char) GetPixelIndex(image,p);
2162 *q=((pixel & 0xf) << 4);
2163 p+=GetPixelChannels(image);
2170 for (x=0; x < (ssize_t) number_pixels; x++)
2172 q=PopCharPixel((unsigned char) GetPixelIndex(image,p),q);
2173 p+=GetPixelChannels(image);
2174 q+=quantum_info->pad;
2180 if (quantum_info->format == FloatingPointQuantumFormat)
2182 for (x=0; x < (ssize_t) number_pixels; x++)
2184 q=PopShortPixel(quantum_info->endian,SinglePrecisionToHalf(
2185 QuantumScale*GetPixelIndex(image,p)),q);
2186 p+=GetPixelChannels(image);
2187 q+=quantum_info->pad;
2191 for (x=0; x < (ssize_t) number_pixels; x++)
2193 q=PopShortPixel(quantum_info->endian,(unsigned short)
2194 GetPixelIndex(image,p),q);
2195 p+=GetPixelChannels(image);
2196 q+=quantum_info->pad;
2202 if (quantum_info->format == FloatingPointQuantumFormat)
2204 for (x=0; x < (ssize_t) number_pixels; x++)
2206 q=PopFloatPixel(quantum_info,(float) GetPixelIndex(image,p),q);
2207 p+=GetPixelChannels(image);
2208 q+=quantum_info->pad;
2212 for (x=0; x < (ssize_t) number_pixels; x++)
2214 q=PopLongPixel(quantum_info->endian,(unsigned int)
2215 GetPixelIndex(image,p),q);
2216 p+=GetPixelChannels(image);
2217 q+=quantum_info->pad;
2223 if (quantum_info->format == FloatingPointQuantumFormat)
2225 for (x=0; x < (ssize_t) number_pixels; x++)
2227 q=PopDoublePixel(quantum_info,(double) GetPixelIndex(image,p),q);
2228 p+=GetPixelChannels(image);
2229 q+=quantum_info->pad;
2236 for (x=0; x < (ssize_t) number_pixels; x++)
2238 q=PopQuantumPixel(quantum_info,GetPixelIndex(image,p),q);
2239 p+=GetPixelChannels(image);
2240 q+=quantum_info->pad;
2247 static void ExportIndexAlphaQuantum(const Image *image,
2248 QuantumInfo *quantum_info,const MagickSizeType number_pixels,
2249 const Quantum *restrict p,unsigned char *restrict q,ExceptionInfo *exception)
2257 if (image->storage_class != PseudoClass)
2259 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2260 "ColormappedImageRequired","`%s'",image->filename);
2263 switch (quantum_info->depth)
2267 register unsigned char
2270 for (x=((ssize_t) number_pixels-3); x > 0; x-=4)
2272 pixel=(unsigned char) GetPixelIndex(image,p);
2273 *q=((pixel & 0x01) << 7);
2274 pixel=(unsigned char) (GetPixelAlpha(image,p) == (Quantum)
2275 TransparentAlpha ? 1 : 0);
2276 *q|=((pixel & 0x01) << 6);
2277 p+=GetPixelChannels(image);
2278 pixel=(unsigned char) GetPixelIndex(image,p);
2279 *q|=((pixel & 0x01) << 5);
2280 pixel=(unsigned char) (GetPixelAlpha(image,p) == (Quantum)
2281 TransparentAlpha ? 1 : 0);
2282 *q|=((pixel & 0x01) << 4);
2283 p+=GetPixelChannels(image);
2284 pixel=(unsigned char) GetPixelIndex(image,p);
2285 *q|=((pixel & 0x01) << 3);
2286 pixel=(unsigned char) (GetPixelAlpha(image,p) == (Quantum)
2287 TransparentAlpha ? 1 : 0);
2288 *q|=((pixel & 0x01) << 2);
2289 p+=GetPixelChannels(image);
2290 pixel=(unsigned char) GetPixelIndex(image,p);
2291 *q|=((pixel & 0x01) << 1);
2292 pixel=(unsigned char) (GetPixelAlpha(image,p) == (Quantum)
2293 TransparentAlpha ? 1 : 0);
2294 *q|=((pixel & 0x01) << 0);
2295 p+=GetPixelChannels(image);
2298 if ((number_pixels % 4) != 0)
2301 for (bit=3; bit >= (ssize_t) (4-(number_pixels % 4)); bit-=2)
2303 pixel=(unsigned char) GetPixelIndex(image,p);
2304 *q|=((pixel & 0x01) << (unsigned char) (bit+4));
2305 pixel=(unsigned char) (GetPixelAlpha(image,p) == (Quantum)
2306 TransparentAlpha ? 1 : 0);
2307 *q|=((pixel & 0x01) << (unsigned char) (bit+4-1));
2308 p+=GetPixelChannels(image);
2316 register unsigned char
2319 for (x=0; x < (ssize_t) number_pixels ; x++)
2321 pixel=(unsigned char) GetPixelIndex(image,p);
2322 *q=((pixel & 0xf) << 4);
2323 pixel=(unsigned char) (16*QuantumScale*GetPixelAlpha(image,p)+0.5);
2324 *q|=((pixel & 0xf) << 0);
2325 p+=GetPixelChannels(image);
2332 register unsigned char
2335 for (x=0; x < (ssize_t) number_pixels; x++)
2337 q=PopCharPixel((unsigned char) GetPixelIndex(image,p),q);
2338 pixel=ScaleQuantumToChar(GetPixelAlpha(image,p));
2339 q=PopCharPixel(pixel,q);
2340 p+=GetPixelChannels(image);
2341 q+=quantum_info->pad;
2347 register unsigned short
2350 if (quantum_info->format == FloatingPointQuantumFormat)
2352 for (x=0; x < (ssize_t) number_pixels; x++)
2354 q=PopShortPixel(quantum_info->endian,(unsigned short)
2355 GetPixelIndex(image,p),q);
2356 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelAlpha(image,p));
2357 q=PopShortPixel(quantum_info->endian,pixel,q);
2358 p+=GetPixelChannels(image);
2359 q+=quantum_info->pad;
2363 for (x=0; x < (ssize_t) number_pixels; x++)
2365 q=PopShortPixel(quantum_info->endian,(unsigned short)
2366 GetPixelIndex(image,p),q);
2367 pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
2368 q=PopShortPixel(quantum_info->endian,pixel,q);
2369 p+=GetPixelChannels(image);
2370 q+=quantum_info->pad;
2376 register unsigned int
2379 if (quantum_info->format == FloatingPointQuantumFormat)
2381 for (x=0; x < (ssize_t) number_pixels; x++)
2386 q=PopFloatPixel(quantum_info,(float) GetPixelIndex(image,p),q);
2387 pixel=(float) GetPixelAlpha(image,p);
2388 q=PopFloatPixel(quantum_info,pixel,q);
2389 p+=GetPixelChannels(image);
2390 q+=quantum_info->pad;
2394 for (x=0; x < (ssize_t) number_pixels; x++)
2396 q=PopLongPixel(quantum_info->endian,(unsigned int)
2397 GetPixelIndex(image,p),q);
2398 pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
2399 q=PopLongPixel(quantum_info->endian,pixel,q);
2400 p+=GetPixelChannels(image);
2401 q+=quantum_info->pad;
2407 if (quantum_info->format == FloatingPointQuantumFormat)
2409 for (x=0; x < (ssize_t) number_pixels; x++)
2414 q=PopDoublePixel(quantum_info,(double) GetPixelIndex(image,p),q);
2415 pixel=(double) GetPixelAlpha(image,p);
2416 q=PopDoublePixel(quantum_info,pixel,q);
2417 p+=GetPixelChannels(image);
2418 q+=quantum_info->pad;
2428 range=GetQuantumRange(quantum_info->depth);
2429 for (x=0; x < (ssize_t) number_pixels; x++)
2431 q=PopQuantumPixel(quantum_info,GetPixelIndex(image,p),q);
2432 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
2434 p+=GetPixelChannels(image);
2435 q+=quantum_info->pad;
2442 static void ExportOpacityQuantum(const Image *image,QuantumInfo *quantum_info,
2443 const MagickSizeType number_pixels,const Quantum *restrict p,
2444 unsigned char *restrict q,ExceptionInfo *exception)
2452 switch (quantum_info->depth)
2456 register unsigned char
2459 for (x=0; x < (ssize_t) number_pixels; x++)
2461 pixel=ScaleQuantumToChar(GetPixelOpacity(image,p));
2462 q=PopCharPixel(pixel,q);
2463 p+=GetPixelChannels(image);
2464 q+=quantum_info->pad;
2470 register unsigned short
2473 if (quantum_info->format == FloatingPointQuantumFormat)
2475 for (x=0; x < (ssize_t) number_pixels; x++)
2477 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelOpacity(image,p));
2478 q=PopShortPixel(quantum_info->endian,pixel,q);
2479 p+=GetPixelChannels(image);
2480 q+=quantum_info->pad;
2484 for (x=0; x < (ssize_t) number_pixels; x++)
2486 pixel=ScaleQuantumToShort(GetPixelOpacity(image,p));
2487 q=PopShortPixel(quantum_info->endian,pixel,q);
2488 p+=GetPixelChannels(image);
2489 q+=quantum_info->pad;
2495 register unsigned int
2498 if (quantum_info->format == FloatingPointQuantumFormat)
2500 for (x=0; x < (ssize_t) number_pixels; x++)
2502 q=PopFloatPixel(quantum_info,(float) GetPixelOpacity(image,p),q);
2503 p+=GetPixelChannels(image);
2504 q+=quantum_info->pad;
2508 for (x=0; x < (ssize_t) number_pixels; x++)
2510 pixel=ScaleQuantumToLong(GetPixelOpacity(image,p));
2511 q=PopLongPixel(quantum_info->endian,pixel,q);
2512 p+=GetPixelChannels(image);
2513 q+=quantum_info->pad;
2519 if (quantum_info->format == FloatingPointQuantumFormat)
2521 for (x=0; x < (ssize_t) number_pixels; x++)
2523 q=PopDoublePixel(quantum_info,(double) GetPixelOpacity(image,p),q);
2524 p+=GetPixelChannels(image);
2525 q+=quantum_info->pad;
2532 range=GetQuantumRange(quantum_info->depth);
2533 for (x=0; x < (ssize_t) number_pixels; x++)
2535 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(
2536 GetPixelOpacity(image,p),range),q);
2537 p+=GetPixelChannels(image);
2538 q+=quantum_info->pad;
2545 static void ExportRedQuantum(const Image *image,QuantumInfo *quantum_info,
2546 const MagickSizeType number_pixels,const Quantum *restrict p,
2547 unsigned char *restrict q,ExceptionInfo *exception)
2555 switch (quantum_info->depth)
2559 register unsigned char
2562 for (x=0; x < (ssize_t) number_pixels; x++)
2564 pixel=ScaleQuantumToChar(GetPixelRed(image,p));
2565 q=PopCharPixel(pixel,q);
2566 p+=GetPixelChannels(image);
2567 q+=quantum_info->pad;
2573 register unsigned short
2576 if (quantum_info->format == FloatingPointQuantumFormat)
2578 for (x=0; x < (ssize_t) number_pixels; x++)
2580 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelRed(image,p));
2581 q=PopShortPixel(quantum_info->endian,pixel,q);
2582 p+=GetPixelChannels(image);
2583 q+=quantum_info->pad;
2587 for (x=0; x < (ssize_t) number_pixels; x++)
2589 pixel=ScaleQuantumToShort(GetPixelRed(image,p));
2590 q=PopShortPixel(quantum_info->endian,pixel,q);
2591 p+=GetPixelChannels(image);
2592 q+=quantum_info->pad;
2598 register unsigned int
2601 if (quantum_info->format == FloatingPointQuantumFormat)
2603 for (x=0; x < (ssize_t) number_pixels; x++)
2605 q=PopFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
2606 p+=GetPixelChannels(image);
2607 q+=quantum_info->pad;
2611 for (x=0; x < (ssize_t) number_pixels; x++)
2613 pixel=ScaleQuantumToLong(GetPixelRed(image,p));
2614 q=PopLongPixel(quantum_info->endian,pixel,q);
2615 p+=GetPixelChannels(image);
2616 q+=quantum_info->pad;
2622 if (quantum_info->format == FloatingPointQuantumFormat)
2624 for (x=0; x < (ssize_t) number_pixels; x++)
2626 q=PopDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
2627 p+=GetPixelChannels(image);
2628 q+=quantum_info->pad;
2635 range=GetQuantumRange(quantum_info->depth);
2636 for (x=0; x < (ssize_t) number_pixels; x++)
2638 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
2640 p+=GetPixelChannels(image);
2641 q+=quantum_info->pad;
2648 static void ExportRGBQuantum(const Image *image,QuantumInfo *quantum_info,
2649 const MagickSizeType number_pixels,const Quantum *restrict p,
2650 unsigned char *restrict q,ExceptionInfo *exception)
2661 switch (quantum_info->depth)
2665 for (x=0; x < (ssize_t) number_pixels; x++)
2667 q=PopCharPixel(ScaleQuantumToChar(GetPixelRed(image,p)),q);
2668 q=PopCharPixel(ScaleQuantumToChar(GetPixelGreen(image,p)),q);
2669 q=PopCharPixel(ScaleQuantumToChar(GetPixelBlue(image,p)),q);
2670 p+=GetPixelChannels(image);
2671 q+=quantum_info->pad;
2677 register unsigned int
2680 range=GetQuantumRange(quantum_info->depth);
2681 if (quantum_info->pack == MagickFalse)
2683 for (x=0; x < (ssize_t) number_pixels; x++)
2685 pixel=(unsigned int) (
2686 ScaleQuantumToAny(GetPixelRed(image,p),range) << 22 |
2687 ScaleQuantumToAny(GetPixelGreen(image,p),range) << 12 |
2688 ScaleQuantumToAny(GetPixelBlue(image,p),range) << 2);
2689 q=PopLongPixel(quantum_info->endian,pixel,q);
2690 p+=GetPixelChannels(image);
2691 q+=quantum_info->pad;
2695 if (quantum_info->quantum == 32UL)
2697 for (x=0; x < (ssize_t) number_pixels; x++)
2699 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
2700 q=PopQuantumLongPixel(quantum_info,pixel,q);
2701 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
2703 q=PopQuantumLongPixel(quantum_info,pixel,q);
2704 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
2705 q=PopQuantumLongPixel(quantum_info,pixel,q);
2706 p+=GetPixelChannels(image);
2707 q+=quantum_info->pad;
2711 for (x=0; x < (ssize_t) number_pixels; x++)
2713 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
2714 q=PopQuantumPixel(quantum_info,pixel,q);
2715 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
2716 q=PopQuantumPixel(quantum_info,pixel,q);
2717 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
2718 q=PopQuantumPixel(quantum_info,pixel,q);
2719 p+=GetPixelChannels(image);
2720 q+=quantum_info->pad;
2726 register unsigned int
2729 range=GetQuantumRange(quantum_info->depth);
2730 if (quantum_info->pack == MagickFalse)
2732 for (x=0; x < (ssize_t) (3*number_pixels-1); x+=2)
2739 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),
2745 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
2751 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),
2753 p+=GetPixelChannels(image);
2757 q=PopShortPixel(quantum_info->endian,(unsigned short) (pixel << 4),
2764 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),
2770 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
2776 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),
2778 p+=GetPixelChannels(image);
2782 q=PopShortPixel(quantum_info->endian,(unsigned short) (pixel << 4),
2784 q+=quantum_info->pad;
2786 for (bit=0; bit < (ssize_t) (3*number_pixels % 2); bit++)
2788 switch ((x+bit) % 3)
2793 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),
2799 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
2805 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),
2807 p+=GetPixelChannels(image);
2811 q=PopShortPixel(quantum_info->endian,(unsigned short) (pixel << 4),
2813 q+=quantum_info->pad;
2816 p+=GetPixelChannels(image);
2819 if (quantum_info->quantum == 32UL)
2821 for (x=0; x < (ssize_t) number_pixels; x++)
2823 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
2824 q=PopQuantumLongPixel(quantum_info,pixel,q);
2825 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
2827 q=PopQuantumLongPixel(quantum_info,pixel,q);
2828 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
2829 q=PopQuantumLongPixel(quantum_info,pixel,q);
2830 p+=GetPixelChannels(image);
2831 q+=quantum_info->pad;
2835 for (x=0; x < (ssize_t) number_pixels; x++)
2837 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
2838 q=PopQuantumPixel(quantum_info,pixel,q);
2839 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
2840 q=PopQuantumPixel(quantum_info,pixel,q);
2841 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
2842 q=PopQuantumPixel(quantum_info,pixel,q);
2843 p+=GetPixelChannels(image);
2844 q+=quantum_info->pad;
2850 register unsigned short
2853 if (quantum_info->format == FloatingPointQuantumFormat)
2855 for (x=0; x < (ssize_t) number_pixels; x++)
2857 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelRed(image,p));
2858 q=PopShortPixel(quantum_info->endian,pixel,q);
2859 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelGreen(image,p));
2860 q=PopShortPixel(quantum_info->endian,pixel,q);
2861 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlue(image,p));
2862 q=PopShortPixel(quantum_info->endian,pixel,q);
2863 p+=GetPixelChannels(image);
2864 q+=quantum_info->pad;
2868 for (x=0; x < (ssize_t) number_pixels; x++)
2870 pixel=ScaleQuantumToShort(GetPixelRed(image,p));
2871 q=PopShortPixel(quantum_info->endian,pixel,q);
2872 pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
2873 q=PopShortPixel(quantum_info->endian,pixel,q);
2874 pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
2875 q=PopShortPixel(quantum_info->endian,pixel,q);
2876 p+=GetPixelChannels(image);
2877 q+=quantum_info->pad;
2883 register unsigned int
2886 if (quantum_info->format == FloatingPointQuantumFormat)
2888 for (x=0; x < (ssize_t) number_pixels; x++)
2890 q=PopFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
2891 q=PopFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
2892 q=PopFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
2893 p+=GetPixelChannels(image);
2894 q+=quantum_info->pad;
2898 for (x=0; x < (ssize_t) number_pixels; x++)
2900 pixel=ScaleQuantumToLong(GetPixelRed(image,p));
2901 q=PopLongPixel(quantum_info->endian,pixel,q);
2902 pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
2903 q=PopLongPixel(quantum_info->endian,pixel,q);
2904 pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
2905 q=PopLongPixel(quantum_info->endian,pixel,q);
2906 p+=GetPixelChannels(image);
2907 q+=quantum_info->pad;
2913 if (quantum_info->format == FloatingPointQuantumFormat)
2915 for (x=0; x < (ssize_t) number_pixels; x++)
2917 q=PopDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
2918 q=PopDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
2919 q=PopDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
2920 p+=GetPixelChannels(image);
2921 q+=quantum_info->pad;
2928 range=GetQuantumRange(quantum_info->depth);
2929 for (x=0; x < (ssize_t) number_pixels; x++)
2931 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
2933 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
2935 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
2937 p+=GetPixelChannels(image);
2938 q+=quantum_info->pad;
2945 static void ExportRGBAQuantum(const Image *image,QuantumInfo *quantum_info,
2946 const MagickSizeType number_pixels,const Quantum *restrict p,
2947 unsigned char *restrict q,ExceptionInfo *exception)
2955 switch (quantum_info->depth)
2959 register unsigned char
2962 for (x=0; x < (ssize_t) number_pixels; x++)
2964 pixel=ScaleQuantumToChar(GetPixelRed(image,p));
2965 q=PopCharPixel(pixel,q);
2966 pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
2967 q=PopCharPixel(pixel,q);
2968 pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
2969 q=PopCharPixel(pixel,q);
2970 pixel=ScaleQuantumToChar(GetPixelAlpha(image,p));
2971 q=PopCharPixel(pixel,q);
2972 p+=GetPixelChannels(image);
2973 q+=quantum_info->pad;
2979 register unsigned int
2982 range=GetQuantumRange(quantum_info->depth);
2983 if (quantum_info->pack == MagickFalse)
2997 for (x=0; x < (ssize_t) number_pixels; x++)
2999 for (i=0; i < 4; i++)
3003 case 0: quantum=GetPixelRed(image,p); break;
3004 case 1: quantum=GetPixelGreen(image,p); break;
3005 case 2: quantum=GetPixelBlue(image,p); break;
3006 case 3: quantum=GetPixelAlpha(image,p); break;
3012 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
3018 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
3024 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
3026 q=PopLongPixel(quantum_info->endian,pixel,q);
3033 p+=GetPixelChannels(image);
3034 q+=quantum_info->pad;
3038 if (quantum_info->quantum == 32UL)
3040 for (x=0; x < (ssize_t) number_pixels; x++)
3042 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
3043 q=PopQuantumLongPixel(quantum_info,pixel,q);
3044 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
3046 q=PopQuantumLongPixel(quantum_info,pixel,q);
3047 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
3048 q=PopQuantumLongPixel(quantum_info,pixel,q);
3049 pixel=(unsigned int) ScaleQuantumToAny(GetPixelAlpha(image,p),
3051 q=PopQuantumLongPixel(quantum_info,pixel,q);
3052 p+=GetPixelChannels(image);
3053 q+=quantum_info->pad;
3057 for (x=0; x < (ssize_t) number_pixels; x++)
3059 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
3060 q=PopQuantumPixel(quantum_info,pixel,q);
3061 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
3062 q=PopQuantumPixel(quantum_info,pixel,q);
3063 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
3064 q=PopQuantumPixel(quantum_info,pixel,q);
3065 pixel=(unsigned int) ScaleQuantumToAny(GetPixelAlpha(image,p),range);
3066 q=PopQuantumPixel(quantum_info,pixel,q);
3067 p+=GetPixelChannels(image);
3068 q+=quantum_info->pad;
3074 register unsigned short
3077 if (quantum_info->format == FloatingPointQuantumFormat)
3079 for (x=0; x < (ssize_t) number_pixels; x++)
3081 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelRed(image,p));
3082 q=PopShortPixel(quantum_info->endian,pixel,q);
3083 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelGreen(image,p));
3084 q=PopShortPixel(quantum_info->endian,pixel,q);
3085 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlue(image,p));
3086 q=PopShortPixel(quantum_info->endian,pixel,q);
3087 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelAlpha(image,p));
3088 q=PopShortPixel(quantum_info->endian,pixel,q);
3089 p+=GetPixelChannels(image);
3090 q+=quantum_info->pad;
3094 for (x=0; x < (ssize_t) number_pixels; x++)
3096 pixel=ScaleQuantumToShort(GetPixelRed(image,p));
3097 q=PopShortPixel(quantum_info->endian,pixel,q);
3098 pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
3099 q=PopShortPixel(quantum_info->endian,pixel,q);
3100 pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
3101 q=PopShortPixel(quantum_info->endian,pixel,q);
3102 pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
3103 q=PopShortPixel(quantum_info->endian,pixel,q);
3104 p+=GetPixelChannels(image);
3105 q+=quantum_info->pad;
3111 register unsigned int
3114 if (quantum_info->format == FloatingPointQuantumFormat)
3116 for (x=0; x < (ssize_t) number_pixels; x++)
3121 q=PopFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
3122 q=PopFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
3123 q=PopFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
3124 pixel=(float) GetPixelAlpha(image,p);
3125 q=PopFloatPixel(quantum_info,pixel,q);
3126 p+=GetPixelChannels(image);
3127 q+=quantum_info->pad;
3131 for (x=0; x < (ssize_t) number_pixels; x++)
3133 pixel=ScaleQuantumToLong(GetPixelRed(image,p));
3134 q=PopLongPixel(quantum_info->endian,pixel,q);
3135 pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
3136 q=PopLongPixel(quantum_info->endian,pixel,q);
3137 pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
3138 q=PopLongPixel(quantum_info->endian,pixel,q);
3139 pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
3140 q=PopLongPixel(quantum_info->endian,pixel,q);
3141 p+=GetPixelChannels(image);
3142 q+=quantum_info->pad;
3148 if (quantum_info->format == FloatingPointQuantumFormat)
3153 for (x=0; x < (ssize_t) number_pixels; x++)
3155 q=PopDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
3156 q=PopDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
3157 q=PopDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
3158 pixel=(double) GetPixelAlpha(image,p);
3159 q=PopDoublePixel(quantum_info,pixel,q);
3160 p+=GetPixelChannels(image);
3161 q+=quantum_info->pad;
3168 range=GetQuantumRange(quantum_info->depth);
3169 for (x=0; x < (ssize_t) number_pixels; x++)
3171 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
3173 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
3175 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
3177 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
3179 p+=GetPixelChannels(image);
3180 q+=quantum_info->pad;
3187 MagickExport size_t ExportQuantumPixels(const Image *image,
3188 CacheView *image_view,QuantumInfo *quantum_info,
3189 const QuantumType quantum_type,unsigned char *pixels,ExceptionInfo *exception)
3194 register const Quantum
3200 register unsigned char
3206 assert(image != (Image *) NULL);
3207 assert(image->signature == MagickSignature);
3208 if (image->debug != MagickFalse)
3209 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
3210 assert(quantum_info != (QuantumInfo *) NULL);
3211 assert(quantum_info->signature == MagickSignature);
3212 if (pixels == (unsigned char *) NULL)
3213 pixels=GetQuantumPixels(quantum_info);
3214 if (image_view == (CacheView *) NULL)
3216 number_pixels=GetImageExtent(image);
3217 p=GetVirtualPixelQueue(image);
3221 number_pixels=GetCacheViewExtent(image_view);
3222 p=GetCacheViewVirtualPixelQueue(image_view);
3224 if (quantum_info->alpha_type == AssociatedQuantumAlpha)
3235 q=GetAuthenticPixelQueue(image);
3236 if (image_view != (CacheView *) NULL)
3237 q=GetCacheViewAuthenticPixelQueue(image_view);
3238 for (x=0; x < (ssize_t) image->columns; x++)
3243 if (GetPixelMask(image,q) != 0)
3245 q+=GetPixelChannels(image);
3248 Sa=QuantumScale*GetPixelAlpha(image,q);
3249 for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
3251 PixelChannel channel=GetPixelChannelChannel(image,i);
3252 PixelTrait traits=GetPixelChannelTraits(image,channel);
3253 if ((traits & UpdatePixelTrait) == 0)
3255 q[i]=ClampToQuantum(Sa*q[i]);
3257 q+=GetPixelChannels(image);
3260 if ((quantum_type == RGBOQuantum) || (quantum_type == CMYKOQuantum) ||
3261 (quantum_type == BGROQuantum))
3266 q=GetAuthenticPixelQueue(image);
3267 if (image_view != (CacheView *) NULL)
3268 q=GetCacheViewAuthenticPixelQueue(image_view);
3269 for (x=0; x < (ssize_t) number_pixels; x++)
3271 SetPixelAlpha(image,GetPixelAlpha(image,q),q);
3272 q+=GetPixelChannels(image);
3275 if ((quantum_type == CbYCrQuantum) || (quantum_type == CbYCrAQuantum))
3283 q=GetAuthenticPixelQueue(image);
3284 if (image_view != (CacheView *) NULL)
3285 q=GetAuthenticPixelQueue(image);
3286 for (x=0; x < (ssize_t) number_pixels; x++)
3288 quantum=GetPixelRed(image,q);
3289 SetPixelRed(image,GetPixelGreen(image,q),q);
3290 SetPixelGreen(image,quantum,q);
3291 q+=GetPixelChannels(image);
3296 ResetQuantumState(quantum_info);
3297 extent=GetQuantumExtent(image,quantum_info,quantum_type);
3298 switch (quantum_type)
3302 ExportAlphaQuantum(image,quantum_info,number_pixels,p,q,exception);
3307 ExportBGRQuantum(image,quantum_info,number_pixels,p,q,exception);
3313 ExportBGRAQuantum(image,quantum_info,number_pixels,p,q,exception);
3318 ExportBlackQuantum(image,quantum_info,number_pixels,p,q,exception);
3324 ExportBlueQuantum(image,quantum_info,number_pixels,p,q,exception);
3329 ExportCMYKQuantum(image,quantum_info,number_pixels,p,q,exception);
3335 ExportCMYKAQuantum(image,quantum_info,number_pixels,p,q,exception);
3340 ExportCbYCrYQuantum(image,quantum_info,number_pixels,p,q,exception);
3345 ExportGrayQuantum(image,quantum_info,number_pixels,p,q,exception);
3348 case GrayAlphaQuantum:
3350 ExportGrayAlphaQuantum(image,quantum_info,number_pixels,p,q,exception);
3354 case MagentaQuantum:
3356 ExportGreenQuantum(image,quantum_info,number_pixels,p,q,exception);
3361 ExportIndexQuantum(image,quantum_info,number_pixels,p,q,exception);
3364 case IndexAlphaQuantum:
3366 ExportIndexAlphaQuantum(image,quantum_info,number_pixels,p,q,exception);
3372 ExportRedQuantum(image,quantum_info,number_pixels,p,q,exception);
3375 case OpacityQuantum:
3377 ExportOpacityQuantum(image,quantum_info,number_pixels,p,q,exception);
3383 ExportRGBQuantum(image,quantum_info,number_pixels,p,q,exception);
3390 ExportRGBAQuantum(image,quantum_info,number_pixels,p,q,exception);
3396 if ((quantum_type == CbYCrQuantum) || (quantum_type == CbYCrAQuantum))
3404 q=GetAuthenticPixelQueue(image);
3405 if (image_view != (CacheView *) NULL)
3406 q=GetCacheViewAuthenticPixelQueue(image_view);
3407 for (x=0; x < (ssize_t) number_pixels; x++)
3409 quantum=GetPixelRed(image,q);
3410 SetPixelRed(image,GetPixelGreen(image,q),q);
3411 SetPixelGreen(image,quantum,q);
3412 q+=GetPixelChannels(image);
3415 if ((quantum_type == RGBOQuantum) || (quantum_type == CMYKOQuantum) ||
3416 (quantum_type == BGROQuantum))
3421 q=GetAuthenticPixelQueue(image);
3422 if (image_view != (CacheView *) NULL)
3423 q=GetCacheViewAuthenticPixelQueue(image_view);
3424 for (x=0; x < (ssize_t) number_pixels; x++)
3426 SetPixelAlpha(image,GetPixelAlpha(image,q),q);
3427 q+=GetPixelChannels(image);