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-2008 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[7];
127 *pixels++=quantum[6];
128 *pixels++=quantum[5];
129 *pixels++=quantum[4];
130 *pixels++=quantum[3];
131 *pixels++=quantum[2];
132 *pixels++=quantum[1];
133 *pixels++=quantum[0];
136 *pixels++=quantum[0];
137 *pixels++=quantum[1];
138 *pixels++=quantum[2];
139 *pixels++=quantum[3];
140 *pixels++=quantum[4];
141 *pixels++=quantum[5];
142 *pixels++=quantum[6];
143 *pixels++=quantum[7];
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[3];
162 *pixels++=quantum[2];
163 *pixels++=quantum[1];
164 *pixels++=quantum[0];
167 *pixels++=quantum[0];
168 *pixels++=quantum[1];
169 *pixels++=quantum[2];
170 *pixels++=quantum[3];
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=(Quantum) (QuantumRange/2);
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(GetPixelIntensity(image,p));
1587 *q=(((pixel >> 4) & 0xf) << 4);
1588 p+=GetPixelChannels(image);
1589 pixel=ScaleQuantumToChar(GetPixelIntensity(image,p));
1591 p+=GetPixelChannels(image);
1594 if ((number_pixels % 2) != 0)
1596 pixel=ScaleQuantumToChar(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(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(GetPixelIntensity(image,
1628 p+2*GetPixelChannels(image)),range) << 22 | ScaleQuantumToAny(
1629 GetPixelIntensity(image,p+GetPixelChannels(image)),range) << 12 |
1630 ScaleQuantumToAny(GetPixelIntensity(image,p),range) << 2);
1631 q=PopLongPixel(quantum_info->endian,pixel,q);
1632 p+=3*GetPixelChannels(image);
1633 q+=quantum_info->pad;
1635 if (x < (ssize_t) number_pixels)
1638 if (x++ < (ssize_t) (number_pixels-1))
1639 pixel|=ScaleQuantumToAny(GetPixelIntensity(image,p+
1640 GetPixelChannels(image)),range) << 12;
1641 if (x++ < (ssize_t) number_pixels)
1642 pixel|=ScaleQuantumToAny(GetPixelIntensity(image,p),range) << 2;
1643 q=PopLongPixel(quantum_info->endian,pixel,q);
1647 for (x=0; x < (ssize_t) number_pixels; x++)
1649 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(
1650 GetPixelIntensity(image,p),range),q);
1651 p+=GetPixelChannels(image);
1652 q+=quantum_info->pad;
1658 register unsigned short
1661 range=GetQuantumRange(quantum_info->depth);
1662 if (quantum_info->pack == MagickFalse)
1664 for (x=0; x < (ssize_t) number_pixels; x++)
1666 pixel=ScaleQuantumToShort(GetPixelIntensity(image,p));
1667 q=PopShortPixel(quantum_info->endian,(unsigned short) (pixel >> 4),
1669 p+=GetPixelChannels(image);
1670 q+=quantum_info->pad;
1674 for (x=0; x < (ssize_t) number_pixels; x++)
1676 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(
1677 GetPixelIntensity(image,p),range),q);
1678 p+=GetPixelChannels(image);
1679 q+=quantum_info->pad;
1685 register unsigned short
1688 if (quantum_info->format == FloatingPointQuantumFormat)
1690 for (x=0; x < (ssize_t) number_pixels; x++)
1692 pixel=SinglePrecisionToHalf(QuantumScale*
1693 GetPixelIntensity(image,p));
1694 q=PopShortPixel(quantum_info->endian,pixel,q);
1695 p+=GetPixelChannels(image);
1696 q+=quantum_info->pad;
1700 for (x=0; x < (ssize_t) number_pixels; x++)
1702 pixel=ScaleQuantumToShort(GetPixelIntensity(image,p));
1703 q=PopShortPixel(quantum_info->endian,pixel,q);
1704 p+=GetPixelChannels(image);
1705 q+=quantum_info->pad;
1711 register unsigned int
1714 if (quantum_info->format == FloatingPointQuantumFormat)
1716 for (x=0; x < (ssize_t) number_pixels; x++)
1721 pixel=(float) GetPixelIntensity(image,p);
1722 q=PopFloatPixel(quantum_info,pixel,q);
1723 p+=GetPixelChannels(image);
1724 q+=quantum_info->pad;
1728 for (x=0; x < (ssize_t) number_pixels; x++)
1730 pixel=ScaleQuantumToLong(GetPixelIntensity(image,p));
1731 q=PopLongPixel(quantum_info->endian,pixel,q);
1732 p+=GetPixelChannels(image);
1733 q+=quantum_info->pad;
1739 if (quantum_info->format == FloatingPointQuantumFormat)
1741 for (x=0; x < (ssize_t) number_pixels; x++)
1746 pixel=(double) GetPixelIntensity(image,p);
1747 q=PopDoublePixel(quantum_info,pixel,q);
1748 p+=GetPixelChannels(image);
1749 q+=quantum_info->pad;
1756 range=GetQuantumRange(quantum_info->depth);
1757 for (x=0; x < (ssize_t) number_pixels; x++)
1759 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(
1760 GetPixelIntensity(image,p),range),q);
1761 p+=GetPixelChannels(image);
1762 q+=quantum_info->pad;
1769 static void ExportGrayAlphaQuantum(const Image *image,QuantumInfo *quantum_info,
1770 const MagickSizeType number_pixels,const Quantum *restrict p,
1771 unsigned char *restrict q,ExceptionInfo *exception)
1779 switch (quantum_info->depth)
1786 register unsigned char
1796 if (quantum_info->min_is_white == MagickFalse)
1801 threshold=(Quantum) (QuantumRange/2);
1802 for (x=((ssize_t) number_pixels-3); x > 0; x-=4)
1805 *q|=(GetPixelIntensity(image,p) > threshold ? black : white) << 7;
1806 pixel=(unsigned char) (GetPixelAlpha(image,p) == OpaqueAlpha ?
1808 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 6);
1809 p+=GetPixelChannels(image);
1810 *q|=(GetPixelIntensity(image,p) > threshold ? black : white) << 5;
1811 pixel=(unsigned char) (GetPixelAlpha(image,p) == OpaqueAlpha ?
1813 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 4);
1814 p+=GetPixelChannels(image);
1815 *q|=(GetPixelIntensity(image,p) > threshold ? black : white) << 3;
1816 pixel=(unsigned char) (GetPixelAlpha(image,p) == OpaqueAlpha ?
1818 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 2);
1819 p+=GetPixelChannels(image);
1820 *q|=(GetPixelIntensity(image,p) > threshold ? black : white) << 1;
1821 pixel=(unsigned char) (GetPixelAlpha(image,p) == OpaqueAlpha ?
1823 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 0);
1824 p+=GetPixelChannels(image);
1827 if ((number_pixels % 4) != 0)
1830 for (bit=0; bit <= (ssize_t) (number_pixels % 4); bit+=2)
1832 *q|=(GetPixelIntensity(image,p) > threshold ? black : white) <<
1834 pixel=(unsigned char) (GetPixelAlpha(image,p) == OpaqueAlpha ?
1836 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << (unsigned char)
1838 p+=GetPixelChannels(image);
1846 register unsigned char
1849 for (x=0; x < (ssize_t) number_pixels ; x++)
1851 pixel=ScaleQuantumToChar(GetPixelIntensity(image,p));
1852 *q=(((pixel >> 4) & 0xf) << 4);
1853 pixel=(unsigned char) (16*QuantumScale*GetPixelAlpha(image,p)+0.5);
1855 p+=GetPixelChannels(image);
1862 register unsigned char
1865 for (x=0; x < (ssize_t) number_pixels; x++)
1867 pixel=ScaleQuantumToChar(GetPixelIntensity(image,p));
1868 q=PopCharPixel(pixel,q);
1869 pixel=ScaleQuantumToChar(GetPixelAlpha(image,p));
1870 q=PopCharPixel(pixel,q);
1871 p+=GetPixelChannels(image);
1872 q+=quantum_info->pad;
1878 register unsigned short
1881 if (quantum_info->format == FloatingPointQuantumFormat)
1883 for (x=0; x < (ssize_t) number_pixels; x++)
1885 pixel=SinglePrecisionToHalf(QuantumScale*
1886 GetPixelIntensity(image,p));
1887 q=PopShortPixel(quantum_info->endian,pixel,q);
1888 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelAlpha(image,p));
1889 q=PopShortPixel(quantum_info->endian,pixel,q);
1890 p+=GetPixelChannels(image);
1891 q+=quantum_info->pad;
1895 for (x=0; x < (ssize_t) number_pixels; x++)
1897 pixel=ScaleQuantumToShort(GetPixelIntensity(image,p));
1898 q=PopShortPixel(quantum_info->endian,pixel,q);
1899 pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
1900 q=PopShortPixel(quantum_info->endian,pixel,q);
1901 p+=GetPixelChannels(image);
1902 q+=quantum_info->pad;
1908 register unsigned int
1911 if (quantum_info->format == FloatingPointQuantumFormat)
1913 for (x=0; x < (ssize_t) number_pixels; x++)
1918 pixel=(float) GetPixelIntensity(image,p);
1919 q=PopFloatPixel(quantum_info,pixel,q);
1920 pixel=(float) (GetPixelAlpha(image,p));
1921 q=PopFloatPixel(quantum_info,pixel,q);
1922 p+=GetPixelChannels(image);
1923 q+=quantum_info->pad;
1927 for (x=0; x < (ssize_t) number_pixels; x++)
1929 pixel=ScaleQuantumToLong(GetPixelIntensity(image,p));
1930 q=PopLongPixel(quantum_info->endian,pixel,q);
1931 pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
1932 q=PopLongPixel(quantum_info->endian,pixel,q);
1933 p+=GetPixelChannels(image);
1934 q+=quantum_info->pad;
1940 if (quantum_info->format == FloatingPointQuantumFormat)
1942 for (x=0; x < (ssize_t) number_pixels; x++)
1947 pixel=(double) GetPixelIntensity(image,p);
1948 q=PopDoublePixel(quantum_info,pixel,q);
1949 pixel=(double) (GetPixelAlpha(image,p));
1950 q=PopDoublePixel(quantum_info,pixel,q);
1951 p+=GetPixelChannels(image);
1952 q+=quantum_info->pad;
1959 range=GetQuantumRange(quantum_info->depth);
1960 for (x=0; x < (ssize_t) number_pixels; x++)
1962 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(
1963 GetPixelIntensity(image,p),range),q);
1964 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
1966 p+=GetPixelChannels(image);
1967 q+=quantum_info->pad;
1974 static void ExportGreenQuantum(const Image *image,QuantumInfo *quantum_info,
1975 const MagickSizeType number_pixels,const Quantum *restrict p,
1976 unsigned char *restrict q,ExceptionInfo *exception)
1984 switch (quantum_info->depth)
1988 register unsigned char
1991 for (x=0; x < (ssize_t) number_pixels; x++)
1993 pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
1994 q=PopCharPixel(pixel,q);
1995 p+=GetPixelChannels(image);
1996 q+=quantum_info->pad;
2002 register unsigned short
2005 if (quantum_info->format == FloatingPointQuantumFormat)
2007 for (x=0; x < (ssize_t) number_pixels; x++)
2009 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelGreen(image,p));
2010 q=PopShortPixel(quantum_info->endian,pixel,q);
2011 p+=GetPixelChannels(image);
2012 q+=quantum_info->pad;
2016 for (x=0; x < (ssize_t) number_pixels; x++)
2018 pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
2019 q=PopShortPixel(quantum_info->endian,pixel,q);
2020 p+=GetPixelChannels(image);
2021 q+=quantum_info->pad;
2027 register unsigned int
2030 if (quantum_info->format == FloatingPointQuantumFormat)
2032 for (x=0; x < (ssize_t) number_pixels; x++)
2034 q=PopFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
2035 p+=GetPixelChannels(image);
2036 q+=quantum_info->pad;
2040 for (x=0; x < (ssize_t) number_pixels; x++)
2042 pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
2043 q=PopLongPixel(quantum_info->endian,pixel,q);
2044 p+=GetPixelChannels(image);
2045 q+=quantum_info->pad;
2051 if (quantum_info->format == FloatingPointQuantumFormat)
2053 for (x=0; x < (ssize_t) number_pixels; x++)
2055 q=PopDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
2056 p+=GetPixelChannels(image);
2057 q+=quantum_info->pad;
2064 range=GetQuantumRange(quantum_info->depth);
2065 for (x=0; x < (ssize_t) number_pixels; x++)
2067 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
2069 p+=GetPixelChannels(image);
2070 q+=quantum_info->pad;
2077 static void ExportIndexQuantum(const Image *image,QuantumInfo *quantum_info,
2078 const MagickSizeType number_pixels,const Quantum *restrict p,
2079 unsigned char *restrict q,ExceptionInfo *exception)
2087 if (image->storage_class != PseudoClass)
2089 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2090 "ColormappedImageRequired","`%s'",image->filename);
2093 switch (quantum_info->depth)
2097 register unsigned char
2100 for (x=((ssize_t) number_pixels-7); x > 0; x-=8)
2102 pixel=(unsigned char) GetPixelIndex(image,p);
2103 *q=((pixel & 0x01) << 7);
2104 p+=GetPixelChannels(image);
2105 pixel=(unsigned char) GetPixelIndex(image,p);
2106 *q|=((pixel & 0x01) << 6);
2107 p+=GetPixelChannels(image);
2108 pixel=(unsigned char) GetPixelIndex(image,p);
2109 *q|=((pixel & 0x01) << 5);
2110 p+=GetPixelChannels(image);
2111 pixel=(unsigned char) GetPixelIndex(image,p);
2112 *q|=((pixel & 0x01) << 4);
2113 p+=GetPixelChannels(image);
2114 pixel=(unsigned char) GetPixelIndex(image,p);
2115 *q|=((pixel & 0x01) << 3);
2116 p+=GetPixelChannels(image);
2117 pixel=(unsigned char) GetPixelIndex(image,p);
2118 *q|=((pixel & 0x01) << 2);
2119 p+=GetPixelChannels(image);
2120 pixel=(unsigned char) GetPixelIndex(image,p);
2121 *q|=((pixel & 0x01) << 1);
2122 p+=GetPixelChannels(image);
2123 pixel=(unsigned char) GetPixelIndex(image,p);
2124 *q|=((pixel & 0x01) << 0);
2125 p+=GetPixelChannels(image);
2128 if ((number_pixels % 8) != 0)
2131 for (bit=7; bit >= (ssize_t) (8-(number_pixels % 8)); bit--)
2133 pixel=(unsigned char) GetPixelIndex(image,p);
2134 *q|=((pixel & 0x01) << (unsigned char) bit);
2135 p+=GetPixelChannels(image);
2143 register unsigned char
2146 for (x=0; x < (ssize_t) (number_pixels-1) ; x+=2)
2148 pixel=(unsigned char) GetPixelIndex(image,p);
2149 *q=((pixel & 0xf) << 4);
2150 p+=GetPixelChannels(image);
2151 pixel=(unsigned char) GetPixelIndex(image,p);
2152 *q|=((pixel & 0xf) << 0);
2153 p+=GetPixelChannels(image);
2156 if ((number_pixels % 2) != 0)
2158 pixel=(unsigned char) GetPixelIndex(image,p);
2159 *q=((pixel & 0xf) << 4);
2160 p+=GetPixelChannels(image);
2167 for (x=0; x < (ssize_t) number_pixels; x++)
2169 q=PopCharPixel((unsigned char) GetPixelIndex(image,p),q);
2170 p+=GetPixelChannels(image);
2171 q+=quantum_info->pad;
2177 if (quantum_info->format == FloatingPointQuantumFormat)
2179 for (x=0; x < (ssize_t) number_pixels; x++)
2181 q=PopShortPixel(quantum_info->endian,SinglePrecisionToHalf(
2182 QuantumScale*GetPixelIndex(image,p)),q);
2183 p+=GetPixelChannels(image);
2184 q+=quantum_info->pad;
2188 for (x=0; x < (ssize_t) number_pixels; x++)
2190 q=PopShortPixel(quantum_info->endian,(unsigned short)
2191 GetPixelIndex(image,p),q);
2192 p+=GetPixelChannels(image);
2193 q+=quantum_info->pad;
2199 if (quantum_info->format == FloatingPointQuantumFormat)
2201 for (x=0; x < (ssize_t) number_pixels; x++)
2203 q=PopFloatPixel(quantum_info,(float) GetPixelIndex(image,p),q);
2204 p+=GetPixelChannels(image);
2205 q+=quantum_info->pad;
2209 for (x=0; x < (ssize_t) number_pixels; x++)
2211 q=PopLongPixel(quantum_info->endian,(unsigned int)
2212 GetPixelIndex(image,p),q);
2213 p+=GetPixelChannels(image);
2214 q+=quantum_info->pad;
2220 if (quantum_info->format == FloatingPointQuantumFormat)
2222 for (x=0; x < (ssize_t) number_pixels; x++)
2224 q=PopDoublePixel(quantum_info,(double) GetPixelIndex(image,p),q);
2225 p+=GetPixelChannels(image);
2226 q+=quantum_info->pad;
2233 for (x=0; x < (ssize_t) number_pixels; x++)
2235 q=PopQuantumPixel(quantum_info,GetPixelIndex(image,p),q);
2236 p+=GetPixelChannels(image);
2237 q+=quantum_info->pad;
2244 static void ExportIndexAlphaQuantum(const Image *image,
2245 QuantumInfo *quantum_info,const MagickSizeType number_pixels,
2246 const Quantum *restrict p,unsigned char *restrict q,ExceptionInfo *exception)
2254 if (image->storage_class != PseudoClass)
2256 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2257 "ColormappedImageRequired","`%s'",image->filename);
2260 switch (quantum_info->depth)
2264 register unsigned char
2267 for (x=((ssize_t) number_pixels-3); x > 0; x-=4)
2269 pixel=(unsigned char) GetPixelIndex(image,p);
2270 *q=((pixel & 0x01) << 7);
2271 pixel=(unsigned char) (GetPixelAlpha(image,p) == (Quantum)
2272 TransparentAlpha ? 1 : 0);
2273 *q|=((pixel & 0x01) << 6);
2274 p+=GetPixelChannels(image);
2275 pixel=(unsigned char) GetPixelIndex(image,p);
2276 *q|=((pixel & 0x01) << 5);
2277 pixel=(unsigned char) (GetPixelAlpha(image,p) == (Quantum)
2278 TransparentAlpha ? 1 : 0);
2279 *q|=((pixel & 0x01) << 4);
2280 p+=GetPixelChannels(image);
2281 pixel=(unsigned char) GetPixelIndex(image,p);
2282 *q|=((pixel & 0x01) << 3);
2283 pixel=(unsigned char) (GetPixelAlpha(image,p) == (Quantum)
2284 TransparentAlpha ? 1 : 0);
2285 *q|=((pixel & 0x01) << 2);
2286 p+=GetPixelChannels(image);
2287 pixel=(unsigned char) GetPixelIndex(image,p);
2288 *q|=((pixel & 0x01) << 1);
2289 pixel=(unsigned char) (GetPixelAlpha(image,p) == (Quantum)
2290 TransparentAlpha ? 1 : 0);
2291 *q|=((pixel & 0x01) << 0);
2292 p+=GetPixelChannels(image);
2295 if ((number_pixels % 4) != 0)
2298 for (bit=3; bit >= (ssize_t) (4-(number_pixels % 4)); bit-=2)
2300 pixel=(unsigned char) GetPixelIndex(image,p);
2301 *q|=((pixel & 0x01) << (unsigned char) (bit+4));
2302 pixel=(unsigned char) (GetPixelAlpha(image,p) == (Quantum)
2303 TransparentAlpha ? 1 : 0);
2304 *q|=((pixel & 0x01) << (unsigned char) (bit+4-1));
2305 p+=GetPixelChannels(image);
2313 register unsigned char
2316 for (x=0; x < (ssize_t) number_pixels ; x++)
2318 pixel=(unsigned char) GetPixelIndex(image,p);
2319 *q=((pixel & 0xf) << 4);
2320 pixel=(unsigned char) (16*QuantumScale*GetPixelAlpha(image,p)+0.5);
2321 *q|=((pixel & 0xf) << 0);
2322 p+=GetPixelChannels(image);
2329 register unsigned char
2332 for (x=0; x < (ssize_t) number_pixels; x++)
2334 q=PopCharPixel((unsigned char) GetPixelIndex(image,p),q);
2335 pixel=ScaleQuantumToChar(GetPixelAlpha(image,p));
2336 q=PopCharPixel(pixel,q);
2337 p+=GetPixelChannels(image);
2338 q+=quantum_info->pad;
2344 register unsigned short
2347 if (quantum_info->format == FloatingPointQuantumFormat)
2349 for (x=0; x < (ssize_t) number_pixels; x++)
2351 q=PopShortPixel(quantum_info->endian,(unsigned short)
2352 GetPixelIndex(image,p),q);
2353 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelAlpha(image,p));
2354 q=PopShortPixel(quantum_info->endian,pixel,q);
2355 p+=GetPixelChannels(image);
2356 q+=quantum_info->pad;
2360 for (x=0; x < (ssize_t) number_pixels; x++)
2362 q=PopShortPixel(quantum_info->endian,(unsigned short)
2363 GetPixelIndex(image,p),q);
2364 pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
2365 q=PopShortPixel(quantum_info->endian,pixel,q);
2366 p+=GetPixelChannels(image);
2367 q+=quantum_info->pad;
2373 register unsigned int
2376 if (quantum_info->format == FloatingPointQuantumFormat)
2378 for (x=0; x < (ssize_t) number_pixels; x++)
2383 q=PopFloatPixel(quantum_info,(float) GetPixelIndex(image,p),q);
2384 pixel=(float) GetPixelAlpha(image,p);
2385 q=PopFloatPixel(quantum_info,pixel,q);
2386 p+=GetPixelChannels(image);
2387 q+=quantum_info->pad;
2391 for (x=0; x < (ssize_t) number_pixels; x++)
2393 q=PopLongPixel(quantum_info->endian,(unsigned int)
2394 GetPixelIndex(image,p),q);
2395 pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
2396 q=PopLongPixel(quantum_info->endian,pixel,q);
2397 p+=GetPixelChannels(image);
2398 q+=quantum_info->pad;
2404 if (quantum_info->format == FloatingPointQuantumFormat)
2406 for (x=0; x < (ssize_t) number_pixels; x++)
2411 q=PopDoublePixel(quantum_info,(double) GetPixelIndex(image,p),q);
2412 pixel=(double) GetPixelAlpha(image,p);
2413 q=PopDoublePixel(quantum_info,pixel,q);
2414 p+=GetPixelChannels(image);
2415 q+=quantum_info->pad;
2425 range=GetQuantumRange(quantum_info->depth);
2426 for (x=0; x < (ssize_t) number_pixels; x++)
2428 q=PopQuantumPixel(quantum_info,GetPixelIndex(image,p),q);
2429 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
2431 p+=GetPixelChannels(image);
2432 q+=quantum_info->pad;
2439 static void ExportOpacityQuantum(const Image *image,QuantumInfo *quantum_info,
2440 const MagickSizeType number_pixels,const Quantum *restrict p,
2441 unsigned char *restrict q,ExceptionInfo *exception)
2449 switch (quantum_info->depth)
2453 register unsigned char
2456 for (x=0; x < (ssize_t) number_pixels; x++)
2458 pixel=ScaleQuantumToChar(GetPixelOpacity(image,p));
2459 q=PopCharPixel(pixel,q);
2460 p+=GetPixelChannels(image);
2461 q+=quantum_info->pad;
2467 register unsigned short
2470 if (quantum_info->format == FloatingPointQuantumFormat)
2472 for (x=0; x < (ssize_t) number_pixels; x++)
2474 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelOpacity(image,p));
2475 q=PopShortPixel(quantum_info->endian,pixel,q);
2476 p+=GetPixelChannels(image);
2477 q+=quantum_info->pad;
2481 for (x=0; x < (ssize_t) number_pixels; x++)
2483 pixel=ScaleQuantumToShort(GetPixelOpacity(image,p));
2484 q=PopShortPixel(quantum_info->endian,pixel,q);
2485 p+=GetPixelChannels(image);
2486 q+=quantum_info->pad;
2492 register unsigned int
2495 if (quantum_info->format == FloatingPointQuantumFormat)
2497 for (x=0; x < (ssize_t) number_pixels; x++)
2499 q=PopFloatPixel(quantum_info,(float) GetPixelOpacity(image,p),q);
2500 p+=GetPixelChannels(image);
2501 q+=quantum_info->pad;
2505 for (x=0; x < (ssize_t) number_pixels; x++)
2507 pixel=ScaleQuantumToLong(GetPixelOpacity(image,p));
2508 q=PopLongPixel(quantum_info->endian,pixel,q);
2509 p+=GetPixelChannels(image);
2510 q+=quantum_info->pad;
2516 if (quantum_info->format == FloatingPointQuantumFormat)
2518 for (x=0; x < (ssize_t) number_pixels; x++)
2520 q=PopDoublePixel(quantum_info,(double) GetPixelOpacity(image,p),q);
2521 p+=GetPixelChannels(image);
2522 q+=quantum_info->pad;
2529 range=GetQuantumRange(quantum_info->depth);
2530 for (x=0; x < (ssize_t) number_pixels; x++)
2532 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(
2533 GetPixelOpacity(image,p),range),q);
2534 p+=GetPixelChannels(image);
2535 q+=quantum_info->pad;
2542 static void ExportRedQuantum(const Image *image,QuantumInfo *quantum_info,
2543 const MagickSizeType number_pixels,const Quantum *restrict p,
2544 unsigned char *restrict q,ExceptionInfo *exception)
2552 switch (quantum_info->depth)
2556 register unsigned char
2559 for (x=0; x < (ssize_t) number_pixels; x++)
2561 pixel=ScaleQuantumToChar(GetPixelRed(image,p));
2562 q=PopCharPixel(pixel,q);
2563 p+=GetPixelChannels(image);
2564 q+=quantum_info->pad;
2570 register unsigned short
2573 if (quantum_info->format == FloatingPointQuantumFormat)
2575 for (x=0; x < (ssize_t) number_pixels; x++)
2577 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelRed(image,p));
2578 q=PopShortPixel(quantum_info->endian,pixel,q);
2579 p+=GetPixelChannels(image);
2580 q+=quantum_info->pad;
2584 for (x=0; x < (ssize_t) number_pixels; x++)
2586 pixel=ScaleQuantumToShort(GetPixelRed(image,p));
2587 q=PopShortPixel(quantum_info->endian,pixel,q);
2588 p+=GetPixelChannels(image);
2589 q+=quantum_info->pad;
2595 register unsigned int
2598 if (quantum_info->format == FloatingPointQuantumFormat)
2600 for (x=0; x < (ssize_t) number_pixels; x++)
2602 q=PopFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
2603 p+=GetPixelChannels(image);
2604 q+=quantum_info->pad;
2608 for (x=0; x < (ssize_t) number_pixels; x++)
2610 pixel=ScaleQuantumToLong(GetPixelRed(image,p));
2611 q=PopLongPixel(quantum_info->endian,pixel,q);
2612 p+=GetPixelChannels(image);
2613 q+=quantum_info->pad;
2619 if (quantum_info->format == FloatingPointQuantumFormat)
2621 for (x=0; x < (ssize_t) number_pixels; x++)
2623 q=PopDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
2624 p+=GetPixelChannels(image);
2625 q+=quantum_info->pad;
2632 range=GetQuantumRange(quantum_info->depth);
2633 for (x=0; x < (ssize_t) number_pixels; x++)
2635 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
2637 p+=GetPixelChannels(image);
2638 q+=quantum_info->pad;
2645 static void ExportRGBQuantum(const Image *image,QuantumInfo *quantum_info,
2646 const MagickSizeType number_pixels,const Quantum *restrict p,
2647 unsigned char *restrict q,ExceptionInfo *exception)
2658 switch (quantum_info->depth)
2662 for (x=0; x < (ssize_t) number_pixels; x++)
2664 q=PopCharPixel(ScaleQuantumToChar(GetPixelRed(image,p)),q);
2665 q=PopCharPixel(ScaleQuantumToChar(GetPixelGreen(image,p)),q);
2666 q=PopCharPixel(ScaleQuantumToChar(GetPixelBlue(image,p)),q);
2667 p+=GetPixelChannels(image);
2668 q+=quantum_info->pad;
2674 register unsigned int
2677 range=GetQuantumRange(quantum_info->depth);
2678 if (quantum_info->pack == MagickFalse)
2680 for (x=0; x < (ssize_t) number_pixels; x++)
2682 pixel=(unsigned int) (
2683 ScaleQuantumToAny(GetPixelRed(image,p),range) << 22 |
2684 ScaleQuantumToAny(GetPixelGreen(image,p),range) << 12 |
2685 ScaleQuantumToAny(GetPixelBlue(image,p),range) << 2);
2686 q=PopLongPixel(quantum_info->endian,pixel,q);
2687 p+=GetPixelChannels(image);
2688 q+=quantum_info->pad;
2692 if (quantum_info->quantum == 32UL)
2694 for (x=0; x < (ssize_t) number_pixels; x++)
2696 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
2697 q=PopQuantumLongPixel(quantum_info,pixel,q);
2698 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
2700 q=PopQuantumLongPixel(quantum_info,pixel,q);
2701 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
2702 q=PopQuantumLongPixel(quantum_info,pixel,q);
2703 p+=GetPixelChannels(image);
2704 q+=quantum_info->pad;
2708 for (x=0; x < (ssize_t) number_pixels; x++)
2710 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
2711 q=PopQuantumPixel(quantum_info,pixel,q);
2712 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
2713 q=PopQuantumPixel(quantum_info,pixel,q);
2714 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
2715 q=PopQuantumPixel(quantum_info,pixel,q);
2716 p+=GetPixelChannels(image);
2717 q+=quantum_info->pad;
2723 register unsigned int
2726 range=GetQuantumRange(quantum_info->depth);
2727 if (quantum_info->pack == MagickFalse)
2729 for (x=0; x < (ssize_t) (3*number_pixels-1); x+=2)
2736 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),
2742 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
2748 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),
2750 p+=GetPixelChannels(image);
2754 q=PopShortPixel(quantum_info->endian,(unsigned short) (pixel << 4),
2761 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),
2767 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
2773 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),
2775 p+=GetPixelChannels(image);
2779 q=PopShortPixel(quantum_info->endian,(unsigned short) (pixel << 4),
2781 q+=quantum_info->pad;
2783 for (bit=0; bit < (ssize_t) (3*number_pixels % 2); bit++)
2785 switch ((x+bit) % 3)
2790 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),
2796 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
2802 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),
2804 p+=GetPixelChannels(image);
2808 q=PopShortPixel(quantum_info->endian,(unsigned short) (pixel << 4),
2810 q+=quantum_info->pad;
2813 p+=GetPixelChannels(image);
2816 if (quantum_info->quantum == 32UL)
2818 for (x=0; x < (ssize_t) number_pixels; x++)
2820 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
2821 q=PopQuantumLongPixel(quantum_info,pixel,q);
2822 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
2824 q=PopQuantumLongPixel(quantum_info,pixel,q);
2825 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
2826 q=PopQuantumLongPixel(quantum_info,pixel,q);
2827 p+=GetPixelChannels(image);
2828 q+=quantum_info->pad;
2832 for (x=0; x < (ssize_t) number_pixels; x++)
2834 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
2835 q=PopQuantumPixel(quantum_info,pixel,q);
2836 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
2837 q=PopQuantumPixel(quantum_info,pixel,q);
2838 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
2839 q=PopQuantumPixel(quantum_info,pixel,q);
2840 p+=GetPixelChannels(image);
2841 q+=quantum_info->pad;
2847 register unsigned short
2850 if (quantum_info->format == FloatingPointQuantumFormat)
2852 for (x=0; x < (ssize_t) number_pixels; x++)
2854 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelRed(image,p));
2855 q=PopShortPixel(quantum_info->endian,pixel,q);
2856 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelGreen(image,p));
2857 q=PopShortPixel(quantum_info->endian,pixel,q);
2858 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlue(image,p));
2859 q=PopShortPixel(quantum_info->endian,pixel,q);
2860 p+=GetPixelChannels(image);
2861 q+=quantum_info->pad;
2865 for (x=0; x < (ssize_t) number_pixels; x++)
2867 pixel=ScaleQuantumToShort(GetPixelRed(image,p));
2868 q=PopShortPixel(quantum_info->endian,pixel,q);
2869 pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
2870 q=PopShortPixel(quantum_info->endian,pixel,q);
2871 pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
2872 q=PopShortPixel(quantum_info->endian,pixel,q);
2873 p+=GetPixelChannels(image);
2874 q+=quantum_info->pad;
2880 register unsigned int
2883 if (quantum_info->format == FloatingPointQuantumFormat)
2885 for (x=0; x < (ssize_t) number_pixels; x++)
2887 q=PopFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
2888 q=PopFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
2889 q=PopFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
2890 p+=GetPixelChannels(image);
2891 q+=quantum_info->pad;
2895 for (x=0; x < (ssize_t) number_pixels; x++)
2897 pixel=ScaleQuantumToLong(GetPixelRed(image,p));
2898 q=PopLongPixel(quantum_info->endian,pixel,q);
2899 pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
2900 q=PopLongPixel(quantum_info->endian,pixel,q);
2901 pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
2902 q=PopLongPixel(quantum_info->endian,pixel,q);
2903 p+=GetPixelChannels(image);
2904 q+=quantum_info->pad;
2910 if (quantum_info->format == FloatingPointQuantumFormat)
2912 for (x=0; x < (ssize_t) number_pixels; x++)
2914 q=PopDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
2915 q=PopDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
2916 q=PopDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
2917 p+=GetPixelChannels(image);
2918 q+=quantum_info->pad;
2925 range=GetQuantumRange(quantum_info->depth);
2926 for (x=0; x < (ssize_t) number_pixels; x++)
2928 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
2930 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
2932 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
2934 p+=GetPixelChannels(image);
2935 q+=quantum_info->pad;
2942 static void ExportRGBAQuantum(const Image *image,QuantumInfo *quantum_info,
2943 const MagickSizeType number_pixels,const Quantum *restrict p,
2944 unsigned char *restrict q,ExceptionInfo *exception)
2952 switch (quantum_info->depth)
2956 register unsigned char
2959 for (x=0; x < (ssize_t) number_pixels; x++)
2961 pixel=ScaleQuantumToChar(GetPixelRed(image,p));
2962 q=PopCharPixel(pixel,q);
2963 pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
2964 q=PopCharPixel(pixel,q);
2965 pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
2966 q=PopCharPixel(pixel,q);
2967 pixel=ScaleQuantumToChar(GetPixelAlpha(image,p));
2968 q=PopCharPixel(pixel,q);
2969 p+=GetPixelChannels(image);
2970 q+=quantum_info->pad;
2976 register unsigned int
2979 range=GetQuantumRange(quantum_info->depth);
2980 if (quantum_info->pack == MagickFalse)
2994 for (x=0; x < (ssize_t) number_pixels; x++)
2996 for (i=0; i < 4; i++)
3000 case 0: quantum=GetPixelRed(image,p); break;
3001 case 1: quantum=GetPixelGreen(image,p); break;
3002 case 2: quantum=GetPixelBlue(image,p); break;
3003 case 3: quantum=GetPixelAlpha(image,p); break;
3009 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
3015 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
3021 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
3023 q=PopLongPixel(quantum_info->endian,pixel,q);
3030 p+=GetPixelChannels(image);
3031 q+=quantum_info->pad;
3035 if (quantum_info->quantum == 32UL)
3037 for (x=0; x < (ssize_t) number_pixels; x++)
3039 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
3040 q=PopQuantumLongPixel(quantum_info,pixel,q);
3041 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
3043 q=PopQuantumLongPixel(quantum_info,pixel,q);
3044 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
3045 q=PopQuantumLongPixel(quantum_info,pixel,q);
3046 pixel=(unsigned int) ScaleQuantumToAny(GetPixelAlpha(image,p),
3048 q=PopQuantumLongPixel(quantum_info,pixel,q);
3049 p+=GetPixelChannels(image);
3050 q+=quantum_info->pad;
3054 for (x=0; x < (ssize_t) number_pixels; x++)
3056 pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
3057 q=PopQuantumPixel(quantum_info,pixel,q);
3058 pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
3059 q=PopQuantumPixel(quantum_info,pixel,q);
3060 pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
3061 q=PopQuantumPixel(quantum_info,pixel,q);
3062 pixel=(unsigned int) ScaleQuantumToAny(GetPixelAlpha(image,p),range);
3063 q=PopQuantumPixel(quantum_info,pixel,q);
3064 p+=GetPixelChannels(image);
3065 q+=quantum_info->pad;
3071 register unsigned short
3074 if (quantum_info->format == FloatingPointQuantumFormat)
3076 for (x=0; x < (ssize_t) number_pixels; x++)
3078 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelRed(image,p));
3079 q=PopShortPixel(quantum_info->endian,pixel,q);
3080 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelGreen(image,p));
3081 q=PopShortPixel(quantum_info->endian,pixel,q);
3082 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlue(image,p));
3083 q=PopShortPixel(quantum_info->endian,pixel,q);
3084 pixel=SinglePrecisionToHalf(QuantumScale*GetPixelAlpha(image,p));
3085 q=PopShortPixel(quantum_info->endian,pixel,q);
3086 p+=GetPixelChannels(image);
3087 q+=quantum_info->pad;
3091 for (x=0; x < (ssize_t) number_pixels; x++)
3093 pixel=ScaleQuantumToShort(GetPixelRed(image,p));
3094 q=PopShortPixel(quantum_info->endian,pixel,q);
3095 pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
3096 q=PopShortPixel(quantum_info->endian,pixel,q);
3097 pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
3098 q=PopShortPixel(quantum_info->endian,pixel,q);
3099 pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
3100 q=PopShortPixel(quantum_info->endian,pixel,q);
3101 p+=GetPixelChannels(image);
3102 q+=quantum_info->pad;
3108 register unsigned int
3111 if (quantum_info->format == FloatingPointQuantumFormat)
3113 for (x=0; x < (ssize_t) number_pixels; x++)
3118 q=PopFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
3119 q=PopFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
3120 q=PopFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
3121 pixel=(float) GetPixelAlpha(image,p);
3122 q=PopFloatPixel(quantum_info,pixel,q);
3123 p+=GetPixelChannels(image);
3124 q+=quantum_info->pad;
3128 for (x=0; x < (ssize_t) number_pixels; x++)
3130 pixel=ScaleQuantumToLong(GetPixelRed(image,p));
3131 q=PopLongPixel(quantum_info->endian,pixel,q);
3132 pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
3133 q=PopLongPixel(quantum_info->endian,pixel,q);
3134 pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
3135 q=PopLongPixel(quantum_info->endian,pixel,q);
3136 pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
3137 q=PopLongPixel(quantum_info->endian,pixel,q);
3138 p+=GetPixelChannels(image);
3139 q+=quantum_info->pad;
3145 if (quantum_info->format == FloatingPointQuantumFormat)
3150 for (x=0; x < (ssize_t) number_pixels; x++)
3152 q=PopDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
3153 q=PopDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
3154 q=PopDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
3155 pixel=(double) GetPixelAlpha(image,p);
3156 q=PopDoublePixel(quantum_info,pixel,q);
3157 p+=GetPixelChannels(image);
3158 q+=quantum_info->pad;
3165 range=GetQuantumRange(quantum_info->depth);
3166 for (x=0; x < (ssize_t) number_pixels; x++)
3168 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
3170 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
3172 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
3174 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
3176 p+=GetPixelChannels(image);
3177 q+=quantum_info->pad;
3184 MagickExport size_t ExportQuantumPixels(const Image *image,
3185 CacheView *image_view,QuantumInfo *quantum_info,
3186 const QuantumType quantum_type,unsigned char *pixels,ExceptionInfo *exception)
3191 register const Quantum
3197 register unsigned char
3203 assert(image != (Image *) NULL);
3204 assert(image->signature == MagickSignature);
3205 if (image->debug != MagickFalse)
3206 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
3207 assert(quantum_info != (QuantumInfo *) NULL);
3208 assert(quantum_info->signature == MagickSignature);
3209 if (pixels == (unsigned char *) NULL)
3210 pixels=GetQuantumPixels(quantum_info);
3211 if (image_view == (CacheView *) NULL)
3213 number_pixels=GetImageExtent(image);
3214 p=GetVirtualPixelQueue(image);
3218 number_pixels=GetCacheViewExtent(image_view);
3219 p=GetCacheViewVirtualPixelQueue(image_view);
3221 if (quantum_info->alpha_type == AssociatedQuantumAlpha)
3232 q=GetAuthenticPixelQueue(image);
3233 if (image_view != (CacheView *) NULL)
3234 q=GetCacheViewAuthenticPixelQueue(image_view);
3235 for (x=0; x < (ssize_t) image->columns; x++)
3240 if (GetPixelMask(image,q) != 0)
3242 q+=GetPixelChannels(image);
3245 Sa=QuantumScale*GetPixelAlpha(image,q);
3246 for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
3254 channel=GetPixelChannelMapChannel(image,i);
3255 traits=GetPixelChannelMapTraits(image,channel);
3256 if ((traits & UpdatePixelTrait) == 0)
3258 q[i]=ClampToQuantum(Sa*q[i]);
3260 q+=GetPixelChannels(image);
3263 if ((quantum_type == RGBOQuantum) || (quantum_type == CMYKOQuantum) ||
3264 (quantum_type == BGROQuantum))
3269 q=GetAuthenticPixelQueue(image);
3270 if (image_view != (CacheView *) NULL)
3271 q=GetCacheViewAuthenticPixelQueue(image_view);
3272 for (x=0; x < (ssize_t) number_pixels; x++)
3274 SetPixelAlpha(image,GetPixelAlpha(image,q),q);
3275 q+=GetPixelChannels(image);
3278 if ((quantum_type == CbYCrQuantum) || (quantum_type == CbYCrAQuantum))
3286 q=GetAuthenticPixelQueue(image);
3287 if (image_view != (CacheView *) NULL)
3288 q=GetAuthenticPixelQueue(image);
3289 for (x=0; x < (ssize_t) number_pixels; x++)
3291 quantum=GetPixelRed(image,q);
3292 SetPixelRed(image,GetPixelGreen(image,q),q);
3293 SetPixelGreen(image,quantum,q);
3294 q+=GetPixelChannels(image);
3299 ResetQuantumState(quantum_info);
3300 extent=GetQuantumExtent(image,quantum_info,quantum_type);
3301 switch (quantum_type)
3305 ExportAlphaQuantum(image,quantum_info,number_pixels,p,q,exception);
3310 ExportBGRQuantum(image,quantum_info,number_pixels,p,q,exception);
3316 ExportBGRAQuantum(image,quantum_info,number_pixels,p,q,exception);
3321 ExportBlackQuantum(image,quantum_info,number_pixels,p,q,exception);
3327 ExportBlueQuantum(image,quantum_info,number_pixels,p,q,exception);
3332 ExportCMYKQuantum(image,quantum_info,number_pixels,p,q,exception);
3338 ExportCMYKAQuantum(image,quantum_info,number_pixels,p,q,exception);
3343 ExportCbYCrYQuantum(image,quantum_info,number_pixels,p,q,exception);
3348 ExportGrayQuantum(image,quantum_info,number_pixels,p,q,exception);
3351 case GrayAlphaQuantum:
3353 ExportGrayAlphaQuantum(image,quantum_info,number_pixels,p,q,exception);
3357 case MagentaQuantum:
3359 ExportGreenQuantum(image,quantum_info,number_pixels,p,q,exception);
3364 ExportIndexQuantum(image,quantum_info,number_pixels,p,q,exception);
3367 case IndexAlphaQuantum:
3369 ExportIndexAlphaQuantum(image,quantum_info,number_pixels,p,q,exception);
3375 ExportRedQuantum(image,quantum_info,number_pixels,p,q,exception);
3378 case OpacityQuantum:
3380 ExportOpacityQuantum(image,quantum_info,number_pixels,p,q,exception);
3386 ExportRGBQuantum(image,quantum_info,number_pixels,p,q,exception);
3393 ExportRGBAQuantum(image,quantum_info,number_pixels,p,q,exception);
3399 if ((quantum_type == CbYCrQuantum) || (quantum_type == CbYCrAQuantum))
3407 q=GetAuthenticPixelQueue(image);
3408 if (image_view != (CacheView *) NULL)
3409 q=GetCacheViewAuthenticPixelQueue(image_view);
3410 for (x=0; x < (ssize_t) number_pixels; x++)
3412 quantum=GetPixelRed(image,q);
3413 SetPixelRed(image,GetPixelGreen(image,q),q);
3414 SetPixelGreen(image,quantum,q);
3415 q+=GetPixelChannels(image);
3418 if ((quantum_type == RGBOQuantum) || (quantum_type == CMYKOQuantum) ||
3419 (quantum_type == BGROQuantum))
3424 q=GetAuthenticPixelQueue(image);
3425 if (image_view != (CacheView *) NULL)
3426 q=GetCacheViewAuthenticPixelQueue(image_view);
3427 for (x=0; x < (ssize_t) number_pixels; x++)
3429 SetPixelAlpha(image,GetPixelAlpha(image,q),q);
3430 q+=GetPixelChannels(image);