47#include "magick/studio.h"
48#include "magick/property.h"
49#include "magick/blob.h"
50#include "magick/blob-private.h"
51#include "magick/color-private.h"
52#include "magick/exception.h"
53#include "magick/exception-private.h"
54#include "magick/cache.h"
55#include "magick/constitute.h"
56#include "magick/delegate.h"
57#include "magick/geometry.h"
58#include "magick/list.h"
59#include "magick/magick.h"
60#include "magick/memory_.h"
61#include "magick/monitor.h"
62#include "magick/option.h"
63#include "magick/pixel.h"
64#include "magick/pixel-private.h"
65#include "magick/quantum.h"
66#include "magick/quantum-private.h"
67#include "magick/resource_.h"
68#include "magick/semaphore.h"
69#include "magick/statistic.h"
70#include "magick/stream.h"
71#include "magick/string_.h"
72#include "magick/utility.h"
113static inline unsigned char *PopQuantumDoublePixel(
QuantumInfo *quantum_info,
114 const double pixel,
unsigned char *magick_restrict pixels)
122 (void) memset(quantum,0,
sizeof(quantum));
123 p=(
double *) quantum;
124 *p=(double) (pixel*quantum_info->state.inverse_scale+quantum_info->minimum);
125 if (quantum_info->endian == LSBEndian)
127 *pixels++=quantum[0];
128 *pixels++=quantum[1];
129 *pixels++=quantum[2];
130 *pixels++=quantum[3];
131 *pixels++=quantum[4];
132 *pixels++=quantum[5];
133 *pixels++=quantum[6];
134 *pixels++=quantum[7];
137 *pixels++=quantum[7];
138 *pixels++=quantum[6];
139 *pixels++=quantum[5];
140 *pixels++=quantum[4];
141 *pixels++=quantum[3];
142 *pixels++=quantum[2];
143 *pixels++=quantum[1];
144 *pixels++=quantum[0];
148static inline unsigned char *PopQuantumFloatPixel(
QuantumInfo *quantum_info,
149 const float pixel,
unsigned char *magick_restrict pixels)
157 (void) memset(quantum,0,
sizeof(quantum));
159 *p=(float) ((
double) pixel*quantum_info->state.inverse_scale+
160 quantum_info->minimum);
161 if (quantum_info->endian == LSBEndian)
163 *pixels++=quantum[0];
164 *pixels++=quantum[1];
165 *pixels++=quantum[2];
166 *pixels++=quantum[3];
169 *pixels++=quantum[3];
170 *pixels++=quantum[2];
171 *pixels++=quantum[1];
172 *pixels++=quantum[0];
176static inline unsigned char *PopQuantumPixel(
QuantumInfo *quantum_info,
177 const QuantumAny pixel,
unsigned char *magick_restrict pixels)
185 if (quantum_info->state.bits == 0UL)
186 quantum_info->state.bits=8U;
187 for (i=(ssize_t) quantum_info->depth; i > 0L; )
189 quantum_bits=(size_t) i;
190 if (quantum_bits > quantum_info->state.bits)
191 quantum_bits=quantum_info->state.bits;
192 i-=(ssize_t) quantum_bits;
195 if (quantum_info->state.bits == 8UL)
197 quantum_info->state.bits-=quantum_bits;
198 *pixels|=(((pixel >> i) &~ ((~0UL) << quantum_bits)) <<
199 quantum_info->state.bits);
200 if (quantum_info->state.bits == 0UL)
203 quantum_info->state.bits=8UL;
209static inline unsigned char *PopQuantumLongPixel(
QuantumInfo *quantum_info,
210 const size_t pixel,
unsigned char *magick_restrict pixels)
218 if (quantum_info->state.bits == 0U)
219 quantum_info->state.bits=32UL;
220 for (i=(ssize_t) quantum_info->depth; i > 0; )
222 quantum_bits=(size_t) i;
223 if (quantum_bits > quantum_info->state.bits)
224 quantum_bits=quantum_info->state.bits;
225 quantum_info->state.pixel|=(((pixel >> (quantum_info->depth-i)) &
226 quantum_info->state.mask[quantum_bits]) <<
227 (32U-quantum_info->state.bits));
228 i-=(ssize_t) quantum_bits;
229 quantum_info->state.bits-=quantum_bits;
230 if (quantum_info->state.bits == 0U)
232 pixels=PopLongPixel(quantum_info->endian,quantum_info->state.pixel,
234 quantum_info->state.pixel=0U;
235 quantum_info->state.bits=32U;
241static void ExportAlphaQuantum(
QuantumInfo *quantum_info,
242 const MagickSizeType number_pixels,
const PixelPacket *magick_restrict p,
243 unsigned char *magick_restrict q)
251 switch (quantum_info->depth)
258 for (x=0; x < (ssize_t) number_pixels; x++)
260 pixel=ScaleQuantumToChar((Quantum) (QuantumRange-GetPixelOpacity(p)));
261 q=PopCharPixel(pixel,q);
263 q+=(ptrdiff_t) quantum_info->pad;
272 if (quantum_info->format == FloatingPointQuantumFormat)
274 for (x=0; x < (ssize_t) number_pixels; x++)
276 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelAlpha(p));
277 q=PopShortPixel(quantum_info->endian,pixel,q);
279 q+=(ptrdiff_t) quantum_info->pad;
283 for (x=0; x < (ssize_t) number_pixels; x++)
285 pixel=ScaleQuantumToShort((Quantum) (QuantumRange-GetPixelOpacity(p)));
286 q=PopShortPixel(quantum_info->endian,pixel,q);
288 q+=(ptrdiff_t) quantum_info->pad;
297 if (quantum_info->format == FloatingPointQuantumFormat)
299 for (x=0; x < (ssize_t) number_pixels; x++)
304 pixel=(float) (GetPixelAlpha(p));
305 q=PopQuantumFloatPixel(quantum_info,pixel,q);
307 q+=(ptrdiff_t) quantum_info->pad;
311 for (x=0; x < (ssize_t) number_pixels; x++)
313 pixel=ScaleQuantumToLong((Quantum) (QuantumRange-GetPixelOpacity(p)));
314 q=PopLongPixel(quantum_info->endian,pixel,q);
316 q+=(ptrdiff_t) quantum_info->pad;
322 if (quantum_info->format == FloatingPointQuantumFormat)
324 for (x=0; x < (ssize_t) number_pixels; x++)
329 pixel=(double) (GetPixelAlpha(p));
330 q=PopQuantumDoublePixel(quantum_info,pixel,q);
332 q+=(ptrdiff_t) quantum_info->pad;
340 range=GetQuantumRange(quantum_info->depth);
341 for (x=0; x < (ssize_t) number_pixels; x++)
343 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny((Quantum)
344 (GetPixelAlpha(p)),range),q);
346 q+=(ptrdiff_t) quantum_info->pad;
353static void ExportBGRQuantum(
QuantumInfo *quantum_info,
354 const MagickSizeType number_pixels,
const PixelPacket *magick_restrict p,
355 unsigned char *magick_restrict q)
366 switch (quantum_info->depth)
370 for (x=0; x < (ssize_t) number_pixels; x++)
372 q=PopCharPixel(ScaleQuantumToChar(GetPixelBlue(p)),q);
373 q=PopCharPixel(ScaleQuantumToChar(GetPixelGreen(p)),q);
374 q=PopCharPixel(ScaleQuantumToChar(GetPixelRed(p)),q);
376 q+=(ptrdiff_t) quantum_info->pad;
385 range=GetQuantumRange(quantum_info->depth);
386 if (quantum_info->pack == MagickFalse)
388 for (x=0; x < (ssize_t) number_pixels; x++)
390 pixel=(
unsigned int) (
391 ScaleQuantumToAny(GetPixelRed(p),range) << 22 |
392 ScaleQuantumToAny(GetPixelGreen(p),range) << 12 |
393 ScaleQuantumToAny(GetPixelBlue(p),range) << 2);
394 q=PopLongPixel(quantum_info->endian,pixel,q);
396 q+=(ptrdiff_t) quantum_info->pad;
400 if (quantum_info->quantum == 32UL)
402 for (x=0; x < (ssize_t) number_pixels; x++)
404 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(p),range);
405 q=PopQuantumLongPixel(quantum_info,pixel,q);
406 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(p),range);
407 q=PopQuantumLongPixel(quantum_info,pixel,q);
408 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(p),range);
409 q=PopQuantumLongPixel(quantum_info,pixel,q);
411 q+=(ptrdiff_t) quantum_info->pad;
415 for (x=0; x < (ssize_t) number_pixels; x++)
417 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(p),range);
418 q=PopQuantumPixel(quantum_info,pixel,q);
419 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(p),range);
420 q=PopQuantumPixel(quantum_info,pixel,q);
421 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(p),range);
422 q=PopQuantumPixel(quantum_info,pixel,q);
424 q+=(ptrdiff_t) quantum_info->pad;
433 range=GetQuantumRange(quantum_info->depth);
434 if (quantum_info->pack == MagickFalse)
436 for (x=0; x < (ssize_t) (3*number_pixels-1); x+=2)
443 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(p),range);
448 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(p),range);
453 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(p),range);
458 q=PopShortPixel(quantum_info->endian,(
unsigned short) (pixel << 4),q);
464 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(p),range);
469 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(p),range);
474 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(p),range);
479 q=PopShortPixel(quantum_info->endian,(
unsigned short) (pixel << 4),q);
480 q+=(ptrdiff_t) quantum_info->pad;
482 for (bit=0; bit < (ssize_t) (3*number_pixels % 2); bit++)
489 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(p),range);
494 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(p),range);
499 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(p),range);
504 q=PopShortPixel(quantum_info->endian,(
unsigned short) (pixel << 4),q);
505 q+=(ptrdiff_t) quantum_info->pad;
511 if (quantum_info->quantum == 32UL)
513 for (x=0; x < (ssize_t) number_pixels; x++)
515 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(p),range);
516 q=PopQuantumLongPixel(quantum_info,pixel,q);
517 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(p),range);
518 q=PopQuantumLongPixel(quantum_info,pixel,q);
519 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(p),range);
520 q=PopQuantumLongPixel(quantum_info,pixel,q);
522 q+=(ptrdiff_t) quantum_info->pad;
526 for (x=0; x < (ssize_t) number_pixels; x++)
528 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(p),range);
529 q=PopQuantumPixel(quantum_info,pixel,q);
530 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(p),range);
531 q=PopQuantumPixel(quantum_info,pixel,q);
532 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(p),range);
533 q=PopQuantumPixel(quantum_info,pixel,q);
535 q+=(ptrdiff_t) quantum_info->pad;
544 if (quantum_info->format == FloatingPointQuantumFormat)
546 for (x=0; x < (ssize_t) number_pixels; x++)
548 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelBlue(p));
549 q=PopShortPixel(quantum_info->endian,pixel,q);
550 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelGreen(p));
551 q=PopShortPixel(quantum_info->endian,pixel,q);
552 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelRed(p));
553 q=PopShortPixel(quantum_info->endian,pixel,q);
555 q+=(ptrdiff_t) quantum_info->pad;
559 for (x=0; x < (ssize_t) number_pixels; x++)
561 pixel=ScaleQuantumToShort(GetPixelBlue(p));
562 q=PopShortPixel(quantum_info->endian,pixel,q);
563 pixel=ScaleQuantumToShort(GetPixelGreen(p));
564 q=PopShortPixel(quantum_info->endian,pixel,q);
565 pixel=ScaleQuantumToShort(GetPixelRed(p));
566 q=PopShortPixel(quantum_info->endian,pixel,q);
568 q+=(ptrdiff_t) quantum_info->pad;
577 if (quantum_info->format == FloatingPointQuantumFormat)
579 for (x=0; x < (ssize_t) number_pixels; x++)
581 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelRed(p),q);
582 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelGreen(p),q);
583 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelBlue(p),q);
585 q+=(ptrdiff_t) quantum_info->pad;
589 for (x=0; x < (ssize_t) number_pixels; x++)
591 pixel=ScaleQuantumToLong(GetPixelBlue(p));
592 q=PopLongPixel(quantum_info->endian,pixel,q);
593 pixel=ScaleQuantumToLong(GetPixelGreen(p));
594 q=PopLongPixel(quantum_info->endian,pixel,q);
595 pixel=ScaleQuantumToLong(GetPixelRed(p));
596 q=PopLongPixel(quantum_info->endian,pixel,q);
598 q+=(ptrdiff_t) quantum_info->pad;
604 if (quantum_info->format == FloatingPointQuantumFormat)
606 for (x=0; x < (ssize_t) number_pixels; x++)
608 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelRed(p),q);
609 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelGreen(p),q);
610 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelBlue(p),q);
612 q+=(ptrdiff_t) quantum_info->pad;
620 range=GetQuantumRange(quantum_info->depth);
621 for (x=0; x < (ssize_t) number_pixels; x++)
623 q=PopQuantumPixel(quantum_info,
624 ScaleQuantumToAny(GetPixelRed(p),range),q);
625 q=PopQuantumPixel(quantum_info,
626 ScaleQuantumToAny(GetPixelGreen(p),range),q);
627 q=PopQuantumPixel(quantum_info,
628 ScaleQuantumToAny(GetPixelBlue(p),range),q);
630 q+=(ptrdiff_t) quantum_info->pad;
637static void ExportBGRAQuantum(
QuantumInfo *quantum_info,
638 const MagickSizeType number_pixels,
const PixelPacket *magick_restrict p,
639 unsigned char *magick_restrict q)
647 switch (quantum_info->depth)
654 for (x=0; x < (ssize_t) number_pixels; x++)
656 pixel=ScaleQuantumToChar(GetPixelBlue(p));
657 q=PopCharPixel(pixel,q);
658 pixel=ScaleQuantumToChar(GetPixelGreen(p));
659 q=PopCharPixel(pixel,q);
660 pixel=ScaleQuantumToChar(GetPixelRed(p));
661 q=PopCharPixel(pixel,q);
662 pixel=ScaleQuantumToChar((Quantum) GetPixelAlpha(p));
663 q=PopCharPixel(pixel,q);
665 q+=(ptrdiff_t) quantum_info->pad;
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=(size_t) GetPixelRed(p);
break;
696 case 1: quantum=(size_t) GetPixelGreen(p);
break;
697 case 2: quantum=(size_t) GetPixelBlue(p);
break;
698 case 3: quantum=(size_t) GetPixelAlpha(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);
726 q+=(ptrdiff_t) 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(p),range);
735 q=PopQuantumLongPixel(quantum_info,pixel,q);
736 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(p),range);
737 q=PopQuantumLongPixel(quantum_info,pixel,q);
738 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(p),range);
739 q=PopQuantumLongPixel(quantum_info,pixel,q);
740 pixel=(
unsigned int) ScaleQuantumToAny((Quantum) GetPixelAlpha(p),
742 q=PopQuantumLongPixel(quantum_info,pixel,q);
744 q+=(ptrdiff_t) quantum_info->pad;
748 for (x=0; x < (ssize_t) number_pixels; x++)
750 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(p),range);
751 q=PopQuantumPixel(quantum_info,pixel,q);
752 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(p),range);
753 q=PopQuantumPixel(quantum_info,pixel,q);
754 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(p),range);
755 q=PopQuantumPixel(quantum_info,pixel,q);
756 pixel=(
unsigned int) ScaleQuantumToAny((Quantum) GetPixelAlpha(p),
758 q=PopQuantumPixel(quantum_info,pixel,q);
760 q+=(ptrdiff_t) quantum_info->pad;
769 if (quantum_info->format == FloatingPointQuantumFormat)
771 for (x=0; x < (ssize_t) number_pixels; x++)
773 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelBlue(p));
774 q=PopShortPixel(quantum_info->endian,pixel,q);
775 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelGreen(p));
776 q=PopShortPixel(quantum_info->endian,pixel,q);
777 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelRed(p));
778 q=PopShortPixel(quantum_info->endian,pixel,q);
779 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelAlpha(p));
780 q=PopShortPixel(quantum_info->endian,pixel,q);
782 q+=(ptrdiff_t) quantum_info->pad;
786 for (x=0; x < (ssize_t) number_pixels; x++)
788 pixel=ScaleQuantumToShort(GetPixelBlue(p));
789 q=PopShortPixel(quantum_info->endian,pixel,q);
790 pixel=ScaleQuantumToShort(GetPixelGreen(p));
791 q=PopShortPixel(quantum_info->endian,pixel,q);
792 pixel=ScaleQuantumToShort(GetPixelRed(p));
793 q=PopShortPixel(quantum_info->endian,pixel,q);
794 pixel=ScaleQuantumToShort((Quantum) GetPixelAlpha(p));
795 q=PopShortPixel(quantum_info->endian,pixel,q);
797 q+=(ptrdiff_t) quantum_info->pad;
806 if (quantum_info->format == FloatingPointQuantumFormat)
808 for (x=0; x < (ssize_t) number_pixels; x++)
813 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelRed(p),q);
814 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelGreen(p),q);
815 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelBlue(p),q);
816 pixel=(float) GetPixelAlpha(p);
817 q=PopQuantumFloatPixel(quantum_info,pixel,q);
819 q+=(ptrdiff_t) quantum_info->pad;
823 for (x=0; x < (ssize_t) number_pixels; x++)
825 pixel=ScaleQuantumToLong(GetPixelBlue(p));
826 q=PopLongPixel(quantum_info->endian,pixel,q);
827 pixel=ScaleQuantumToLong(GetPixelGreen(p));
828 q=PopLongPixel(quantum_info->endian,pixel,q);
829 pixel=ScaleQuantumToLong(GetPixelRed(p));
830 q=PopLongPixel(quantum_info->endian,pixel,q);
831 pixel=ScaleQuantumToLong((Quantum) GetPixelAlpha(p));
832 q=PopLongPixel(quantum_info->endian,pixel,q);
834 q+=(ptrdiff_t) quantum_info->pad;
840 if (quantum_info->format == FloatingPointQuantumFormat)
845 for (x=0; x < (ssize_t) number_pixels; x++)
847 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelRed(p),q);
848 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelGreen(p),q);
849 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelBlue(p),q);
850 pixel=(double) GetPixelAlpha(p);
851 q=PopQuantumDoublePixel(quantum_info,pixel,q);
853 q+=(ptrdiff_t) quantum_info->pad;
861 range=GetQuantumRange(quantum_info->depth);
862 for (x=0; x < (ssize_t) number_pixels; x++)
864 q=PopQuantumPixel(quantum_info,
865 ScaleQuantumToAny(GetPixelBlue(p),range),q);
866 q=PopQuantumPixel(quantum_info,
867 ScaleQuantumToAny(GetPixelGreen(p),range),q);
868 q=PopQuantumPixel(quantum_info,
869 ScaleQuantumToAny(GetPixelRed(p),range),q);
870 q=PopQuantumPixel(quantum_info,
871 ScaleQuantumToAny((Quantum) GetPixelAlpha(p),range),q);
873 q+=(ptrdiff_t) quantum_info->pad;
880static void ExportBGROQuantum(
QuantumInfo *quantum_info,
881 const MagickSizeType number_pixels,
const PixelPacket *magick_restrict p,
882 unsigned char *magick_restrict q)
890 switch (quantum_info->depth)
897 for (x=0; x < (ssize_t) number_pixels; x++)
899 pixel=ScaleQuantumToChar(GetPixelBlue(p));
900 q=PopCharPixel(pixel,q);
901 pixel=ScaleQuantumToChar(GetPixelGreen(p));
902 q=PopCharPixel(pixel,q);
903 pixel=ScaleQuantumToChar(GetPixelRed(p));
904 q=PopCharPixel(pixel,q);
905 pixel=ScaleQuantumToChar(GetPixelOpacity(p));
906 q=PopCharPixel(pixel,q);
908 q+=(ptrdiff_t) quantum_info->pad;
917 range=GetQuantumRange(quantum_info->depth);
918 if (quantum_info->pack == MagickFalse)
932 for (x=0; x < (ssize_t) number_pixels; x++)
934 for (i=0; i < 4; i++)
938 case 0: quantum=(size_t) GetPixelRed(p);
break;
939 case 1: quantum=(size_t) GetPixelGreen(p);
break;
940 case 2: quantum=(size_t) GetPixelBlue(p);
break;
941 case 3: quantum=(size_t) GetPixelOpacity(p);
break;
947 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
953 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
959 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
961 q=PopLongPixel(quantum_info->endian,pixel,q);
969 q+=(ptrdiff_t) quantum_info->pad;
973 if (quantum_info->quantum == 32UL)
975 for (x=0; x < (ssize_t) number_pixels; x++)
977 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(p),range);
978 q=PopQuantumLongPixel(quantum_info,pixel,q);
979 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(p),range);
980 q=PopQuantumLongPixel(quantum_info,pixel,q);
981 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(p),range);
982 q=PopQuantumLongPixel(quantum_info,pixel,q);
983 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelOpacity(p),range);
984 q=PopQuantumLongPixel(quantum_info,pixel,q);
986 q+=(ptrdiff_t) quantum_info->pad;
990 for (x=0; x < (ssize_t) number_pixels; x++)
992 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(p),range);
993 q=PopQuantumPixel(quantum_info,pixel,q);
994 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(p),range);
995 q=PopQuantumPixel(quantum_info,pixel,q);
996 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(p),range);
997 q=PopQuantumPixel(quantum_info,pixel,q);
998 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelOpacity(p),range);
999 q=PopQuantumPixel(quantum_info,pixel,q);
1001 q+=(ptrdiff_t) quantum_info->pad;
1010 if (quantum_info->format == FloatingPointQuantumFormat)
1012 for (x=0; x < (ssize_t) number_pixels; x++)
1014 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelBlue(p));
1015 q=PopShortPixel(quantum_info->endian,pixel,q);
1016 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelGreen(p));
1017 q=PopShortPixel(quantum_info->endian,pixel,q);
1018 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelRed(p));
1019 q=PopShortPixel(quantum_info->endian,pixel,q);
1020 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelOpacity(p));
1021 q=PopShortPixel(quantum_info->endian,pixel,q);
1023 q+=(ptrdiff_t) quantum_info->pad;
1027 for (x=0; x < (ssize_t) number_pixels; x++)
1029 pixel=ScaleQuantumToShort(GetPixelBlue(p));
1030 q=PopShortPixel(quantum_info->endian,pixel,q);
1031 pixel=ScaleQuantumToShort(GetPixelGreen(p));
1032 q=PopShortPixel(quantum_info->endian,pixel,q);
1033 pixel=ScaleQuantumToShort(GetPixelRed(p));
1034 q=PopShortPixel(quantum_info->endian,pixel,q);
1035 pixel=ScaleQuantumToShort(GetPixelOpacity(p));
1036 q=PopShortPixel(quantum_info->endian,pixel,q);
1038 q+=(ptrdiff_t) quantum_info->pad;
1047 if (quantum_info->format == FloatingPointQuantumFormat)
1049 for (x=0; x < (ssize_t) number_pixels; x++)
1054 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelRed(p),q);
1055 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelGreen(p),q);
1056 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelBlue(p),q);
1057 pixel=(float) GetPixelOpacity(p);
1058 q=PopQuantumFloatPixel(quantum_info,pixel,q);
1060 q+=(ptrdiff_t) quantum_info->pad;
1064 for (x=0; x < (ssize_t) number_pixels; x++)
1066 pixel=ScaleQuantumToLong(GetPixelBlue(p));
1067 q=PopLongPixel(quantum_info->endian,pixel,q);
1068 pixel=ScaleQuantumToLong(GetPixelGreen(p));
1069 q=PopLongPixel(quantum_info->endian,pixel,q);
1070 pixel=ScaleQuantumToLong(GetPixelRed(p));
1071 q=PopLongPixel(quantum_info->endian,pixel,q);
1072 pixel=ScaleQuantumToLong(GetPixelOpacity(p));
1073 q=PopLongPixel(quantum_info->endian,pixel,q);
1075 q+=(ptrdiff_t) quantum_info->pad;
1081 if (quantum_info->format == FloatingPointQuantumFormat)
1086 for (x=0; x < (ssize_t) number_pixels; x++)
1088 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelRed(p),q);
1089 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelGreen(p),q);
1090 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelBlue(p),q);
1091 pixel=(double) GetPixelOpacity(p);
1092 q=PopQuantumDoublePixel(quantum_info,pixel,q);
1094 q+=(ptrdiff_t) quantum_info->pad;
1102 range=GetQuantumRange(quantum_info->depth);
1103 for (x=0; x < (ssize_t) number_pixels; x++)
1105 q=PopQuantumPixel(quantum_info,
1106 ScaleQuantumToAny(GetPixelBlue(p),range),q);
1107 q=PopQuantumPixel(quantum_info,
1108 ScaleQuantumToAny(GetPixelGreen(p),range),q);
1109 q=PopQuantumPixel(quantum_info,
1110 ScaleQuantumToAny(GetPixelRed(p),range),q);
1111 q=PopQuantumPixel(quantum_info,
1112 ScaleQuantumToAny(GetPixelOpacity(p),range),q);
1114 q+=(ptrdiff_t) quantum_info->pad;
1121static void ExportBlackQuantum(
const Image *image,
QuantumInfo *quantum_info,
1122 const MagickSizeType number_pixels,
const PixelPacket *magick_restrict p,
1123 const IndexPacket *magick_restrict indexes,
unsigned char *magick_restrict q,
1129 if (image->colorspace != CMYKColorspace)
1131 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1132 "ColorSeparatedImageRequired",
"`%s'",image->filename);
1135 switch (quantum_info->depth)
1142 for (x=0; x < (ssize_t) number_pixels; x++)
1144 pixel=ScaleQuantumToChar(GetPixelIndex(indexes+x));
1145 q=PopCharPixel(pixel,q);
1147 q+=(ptrdiff_t) quantum_info->pad;
1156 if (quantum_info->format == FloatingPointQuantumFormat)
1158 for (x=0; x < (ssize_t) number_pixels; x++)
1160 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelIndex(indexes+x));
1161 q=PopShortPixel(quantum_info->endian,pixel,q);
1163 q+=(ptrdiff_t) quantum_info->pad;
1167 for (x=0; x < (ssize_t) number_pixels; x++)
1169 pixel=ScaleQuantumToShort(GetPixelIndex(indexes+x));
1170 q=PopShortPixel(quantum_info->endian,pixel,q);
1172 q+=(ptrdiff_t) quantum_info->pad;
1181 if (quantum_info->format == FloatingPointQuantumFormat)
1183 for (x=0; x < (ssize_t) number_pixels; x++)
1185 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelIndex(indexes+x),q);
1187 q+=(ptrdiff_t) quantum_info->pad;
1191 for (x=0; x < (ssize_t) number_pixels; x++)
1193 pixel=ScaleQuantumToLong(GetPixelIndex(indexes+x));
1194 q=PopLongPixel(quantum_info->endian,pixel,q);
1196 q+=(ptrdiff_t) quantum_info->pad;
1202 if (quantum_info->format == FloatingPointQuantumFormat)
1204 for (x=0; x < (ssize_t) number_pixels; x++)
1206 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelIndex(indexes+x),
1209 q+=(ptrdiff_t) quantum_info->pad;
1220 range=GetQuantumRange(quantum_info->depth);
1221 for (x=0; x < (ssize_t) number_pixels; x++)
1223 q=PopQuantumPixel(quantum_info,
1224 ScaleQuantumToAny((Quantum) GetPixelIndex(indexes+x),range),q);
1226 q+=(ptrdiff_t) quantum_info->pad;
1233static void ExportBlueQuantum(
QuantumInfo *quantum_info,
1234 const MagickSizeType number_pixels,
const PixelPacket *magick_restrict p,
1235 unsigned char *magick_restrict q)
1243 switch (quantum_info->depth)
1250 for (x=0; x < (ssize_t) number_pixels; x++)
1252 pixel=ScaleQuantumToChar(GetPixelBlue(p));
1253 q=PopCharPixel(pixel,q);
1255 q+=(ptrdiff_t) quantum_info->pad;
1264 if (quantum_info->format == FloatingPointQuantumFormat)
1266 for (x=0; x < (ssize_t) number_pixels; x++)
1268 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelBlue(p));
1269 q=PopShortPixel(quantum_info->endian,pixel,q);
1271 q+=(ptrdiff_t) quantum_info->pad;
1275 for (x=0; x < (ssize_t) number_pixels; x++)
1277 pixel=ScaleQuantumToShort(GetPixelBlue(p));
1278 q=PopShortPixel(quantum_info->endian,pixel,q);
1280 q+=(ptrdiff_t) quantum_info->pad;
1289 if (quantum_info->format == FloatingPointQuantumFormat)
1291 for (x=0; x < (ssize_t) number_pixels; x++)
1293 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelBlue(p),q);
1295 q+=(ptrdiff_t) quantum_info->pad;
1299 for (x=0; x < (ssize_t) number_pixels; x++)
1301 pixel=ScaleQuantumToLong(GetPixelBlue(p));
1302 q=PopLongPixel(quantum_info->endian,pixel,q);
1304 q+=(ptrdiff_t) quantum_info->pad;
1310 if (quantum_info->format == FloatingPointQuantumFormat)
1312 for (x=0; x < (ssize_t) number_pixels; x++)
1314 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelBlue(p),q);
1316 q+=(ptrdiff_t) quantum_info->pad;
1324 range=GetQuantumRange(quantum_info->depth);
1325 for (x=0; x < (ssize_t) number_pixels; x++)
1327 q=PopQuantumPixel(quantum_info,
1328 ScaleQuantumToAny(GetPixelBlue(p),range),q);
1330 q+=(ptrdiff_t) quantum_info->pad;
1337static void ExportCbYCrYQuantum(
QuantumInfo *quantum_info,
1338 const MagickSizeType number_pixels,
const PixelPacket *magick_restrict p,
1339 unsigned char *magick_restrict q)
1362 range=GetQuantumRange(quantum_info->depth);
1363 switch (quantum_info->depth)
1367 if (quantum_info->pack == MagickFalse)
1369 for (x=0; x < (ssize_t) number_pixels; x+=2)
1371 for (i=0; i < 4; i++)
1377 quantum=(size_t) GetPixelRed(p);
1382 quantum=(size_t) GetPixelGreen(p);
1387 quantum=(size_t) GetPixelBlue(p);
1391 cbcr[i]=(Quantum) quantum;
1394 pixel=(
unsigned int) ((
size_t) (cbcr[1]) << 22 | (
size_t)
1395 (cbcr[0]) << 12 | (
size_t) (cbcr[2]) << 2);
1396 q=PopLongPixel(quantum_info->endian,pixel,q);
1398 pixel=(
unsigned int) ((
size_t) (cbcr[3]) << 22 | (
size_t)
1399 (cbcr[0]) << 12 | (
size_t) (cbcr[2]) << 2);
1400 q=PopLongPixel(quantum_info->endian,pixel,q);
1402 q+=(ptrdiff_t) quantum_info->pad;
1410 for (x=0; x < (ssize_t) number_pixels; x+=2)
1412 for (i=0; i < 4; i++)
1418 quantum=(size_t) GetPixelRed(p);
1423 quantum=(size_t) GetPixelGreen(p);
1428 quantum=(size_t) GetPixelBlue(p);
1432 cbcr[i]=(Quantum) quantum;
1435 q=PopQuantumPixel(quantum_info,
1436 ScaleQuantumToAny(cbcr[1],range),q);
1437 q=PopQuantumPixel(quantum_info,
1438 ScaleQuantumToAny(cbcr[0],range),q);
1439 q=PopQuantumPixel(quantum_info,
1440 ScaleQuantumToAny(cbcr[2],range),q);
1442 q=PopQuantumPixel(quantum_info,
1443 ScaleQuantumToAny(cbcr[3],range),q);
1444 q=PopQuantumPixel(quantum_info,
1445 ScaleQuantumToAny(cbcr[0],range),q);
1446 q=PopQuantumPixel(quantum_info,
1447 ScaleQuantumToAny(cbcr[2],range),q);
1449 q+=(ptrdiff_t) quantum_info->pad;
1457 const MagickSizeType number_pixels,
const PixelPacket *magick_restrict p,
1458 const IndexPacket *magick_restrict indexes,
unsigned char *magick_restrict q,
1467 if (image->colorspace != CMYKColorspace)
1469 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1470 "ColorSeparatedImageRequired",
"`%s'",image->filename);
1473 switch (quantum_info->depth)
1480 for (x=0; x < (ssize_t) number_pixels; x++)
1482 pixel=ScaleQuantumToChar(GetPixelRed(p));
1483 q=PopCharPixel(pixel,q);
1484 pixel=ScaleQuantumToChar(GetPixelGreen(p));
1485 q=PopCharPixel(pixel,q);
1486 pixel=ScaleQuantumToChar(GetPixelBlue(p));
1487 q=PopCharPixel(pixel,q);
1488 pixel=ScaleQuantumToChar(GetPixelIndex(indexes+x));
1489 q=PopCharPixel(pixel,q);
1491 q+=(ptrdiff_t) quantum_info->pad;
1500 if (quantum_info->format == FloatingPointQuantumFormat)
1502 for (x=0; x < (ssize_t) number_pixels; x++)
1504 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelRed(p));
1505 q=PopShortPixel(quantum_info->endian,pixel,q);
1506 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelGreen(p));
1507 q=PopShortPixel(quantum_info->endian,pixel,q);
1508 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelBlue(p));
1509 q=PopShortPixel(quantum_info->endian,pixel,q);
1510 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelIndex(indexes+x));
1511 q=PopShortPixel(quantum_info->endian,pixel,q);
1513 q+=(ptrdiff_t) quantum_info->pad;
1517 for (x=0; x < (ssize_t) number_pixels; x++)
1519 pixel=ScaleQuantumToShort(GetPixelRed(p));
1520 q=PopShortPixel(quantum_info->endian,pixel,q);
1521 pixel=ScaleQuantumToShort(GetPixelGreen(p));
1522 q=PopShortPixel(quantum_info->endian,pixel,q);
1523 pixel=ScaleQuantumToShort(GetPixelBlue(p));
1524 q=PopShortPixel(quantum_info->endian,pixel,q);
1525 pixel=ScaleQuantumToShort(GetPixelIndex(indexes+x));
1526 q=PopShortPixel(quantum_info->endian,pixel,q);
1528 q+=(ptrdiff_t) quantum_info->pad;
1537 if (quantum_info->format == FloatingPointQuantumFormat)
1539 for (x=0; x < (ssize_t) number_pixels; x++)
1541 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelRed(p),q);
1542 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelGreen(p),q);
1543 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelBlue(p),q);
1544 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelIndex(indexes+x),q);
1546 q+=(ptrdiff_t) quantum_info->pad;
1550 for (x=0; x < (ssize_t) number_pixels; x++)
1552 pixel=ScaleQuantumToLong(GetPixelRed(p));
1553 q=PopLongPixel(quantum_info->endian,pixel,q);
1554 pixel=ScaleQuantumToLong(GetPixelGreen(p));
1555 q=PopLongPixel(quantum_info->endian,pixel,q);
1556 pixel=ScaleQuantumToLong(GetPixelBlue(p));
1557 q=PopLongPixel(quantum_info->endian,pixel,q);
1558 pixel=ScaleQuantumToLong(GetPixelIndex(indexes+x));
1559 q=PopLongPixel(quantum_info->endian,pixel,q);
1561 q+=(ptrdiff_t) quantum_info->pad;
1567 if (quantum_info->format == FloatingPointQuantumFormat)
1569 for (x=0; x < (ssize_t) number_pixels; x++)
1571 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelRed(p),q);
1572 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelGreen(p),q);
1573 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelBlue(p),q);
1574 q=PopQuantumDoublePixel(quantum_info,(
double)
1575 GetPixelIndex(indexes+x),q);
1577 q+=(ptrdiff_t) quantum_info->pad;
1585 range=GetQuantumRange(quantum_info->depth);
1586 for (x=0; x < (ssize_t) number_pixels; x++)
1588 q=PopQuantumPixel(quantum_info,
1589 ScaleQuantumToAny(GetPixelRed(p),range),q);
1590 q=PopQuantumPixel(quantum_info,
1591 ScaleQuantumToAny(GetPixelGreen(p),range),q);
1592 q=PopQuantumPixel(quantum_info,
1593 ScaleQuantumToAny(GetPixelBlue(p),range),q);
1594 q=PopQuantumPixel(quantum_info,
1595 ScaleQuantumToAny(GetPixelIndex(indexes+x),range),q);
1597 q+=(ptrdiff_t) quantum_info->pad;
1604static void ExportCMYKAQuantum(
const Image *image,
QuantumInfo *quantum_info,
1605 const MagickSizeType number_pixels,
const PixelPacket *magick_restrict p,
1606 const IndexPacket *magick_restrict indexes,
unsigned char *magick_restrict q,
1615 if (image->colorspace != CMYKColorspace)
1617 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1618 "ColorSeparatedImageRequired",
"`%s'",image->filename);
1621 switch (quantum_info->depth)
1628 for (x=0; x < (ssize_t) number_pixels; x++)
1630 pixel=ScaleQuantumToChar(GetPixelRed(p));
1631 q=PopCharPixel(pixel,q);
1632 pixel=ScaleQuantumToChar(GetPixelGreen(p));
1633 q=PopCharPixel(pixel,q);
1634 pixel=ScaleQuantumToChar(GetPixelBlue(p));
1635 q=PopCharPixel(pixel,q);
1636 pixel=ScaleQuantumToChar(GetPixelIndex(indexes+x));
1637 q=PopCharPixel(pixel,q);
1638 pixel=ScaleQuantumToChar((Quantum) GetPixelAlpha(p));
1639 q=PopCharPixel(pixel,q);
1641 q+=(ptrdiff_t) quantum_info->pad;
1650 if (quantum_info->format == FloatingPointQuantumFormat)
1652 for (x=0; x < (ssize_t) number_pixels; x++)
1654 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelRed(p));
1655 q=PopShortPixel(quantum_info->endian,pixel,q);
1656 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelGreen(p));
1657 q=PopShortPixel(quantum_info->endian,pixel,q);
1658 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelBlue(p));
1659 q=PopShortPixel(quantum_info->endian,pixel,q);
1660 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelIndex(indexes+x));
1661 q=PopShortPixel(quantum_info->endian,pixel,q);
1662 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelAlpha(p));
1663 q=PopShortPixel(quantum_info->endian,pixel,q);
1665 q+=(ptrdiff_t) quantum_info->pad;
1669 for (x=0; x < (ssize_t) number_pixels; x++)
1671 pixel=ScaleQuantumToShort(GetPixelRed(p));
1672 q=PopShortPixel(quantum_info->endian,pixel,q);
1673 pixel=ScaleQuantumToShort(GetPixelGreen(p));
1674 q=PopShortPixel(quantum_info->endian,pixel,q);
1675 pixel=ScaleQuantumToShort(GetPixelBlue(p));
1676 q=PopShortPixel(quantum_info->endian,pixel,q);
1677 pixel=ScaleQuantumToShort(GetPixelIndex(indexes+x));
1678 q=PopShortPixel(quantum_info->endian,pixel,q);
1679 pixel=ScaleQuantumToShort((Quantum) GetPixelAlpha(p));
1680 q=PopShortPixel(quantum_info->endian,pixel,q);
1682 q+=(ptrdiff_t) quantum_info->pad;
1691 if (quantum_info->format == FloatingPointQuantumFormat)
1693 for (x=0; x < (ssize_t) number_pixels; x++)
1698 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelRed(p),q);
1699 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelGreen(p),q);
1700 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelBlue(p),q);
1701 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelIndex(indexes+x),q);
1702 pixel=(float) (GetPixelAlpha(p));
1703 q=PopQuantumFloatPixel(quantum_info,pixel,q);
1705 q+=(ptrdiff_t) quantum_info->pad;
1709 for (x=0; x < (ssize_t) number_pixels; x++)
1711 pixel=ScaleQuantumToLong(GetPixelRed(p));
1712 q=PopLongPixel(quantum_info->endian,pixel,q);
1713 pixel=ScaleQuantumToLong(GetPixelGreen(p));
1714 q=PopLongPixel(quantum_info->endian,pixel,q);
1715 pixel=ScaleQuantumToLong(GetPixelBlue(p));
1716 q=PopLongPixel(quantum_info->endian,pixel,q);
1717 pixel=ScaleQuantumToLong(GetPixelIndex(indexes+x));
1718 q=PopLongPixel(quantum_info->endian,pixel,q);
1719 pixel=ScaleQuantumToLong((Quantum) GetPixelAlpha(p));
1720 q=PopLongPixel(quantum_info->endian,pixel,q);
1722 q+=(ptrdiff_t) quantum_info->pad;
1728 if (quantum_info->format == FloatingPointQuantumFormat)
1733 for (x=0; x < (ssize_t) number_pixels; x++)
1735 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelRed(p),q);
1736 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelGreen(p),q);
1737 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelBlue(p),q);
1738 q=PopQuantumDoublePixel(quantum_info,(
double)
1739 GetPixelIndex(indexes+x),q);
1740 pixel=(double) (GetPixelAlpha(p));
1741 q=PopQuantumDoublePixel(quantum_info,pixel,q);
1743 q+=(ptrdiff_t) quantum_info->pad;
1751 range=GetQuantumRange(quantum_info->depth);
1752 for (x=0; x < (ssize_t) number_pixels; x++)
1754 q=PopQuantumPixel(quantum_info,
1755 ScaleQuantumToAny(GetPixelRed(p),range),q);
1756 q=PopQuantumPixel(quantum_info,
1757 ScaleQuantumToAny(GetPixelGreen(p),range),q);
1758 q=PopQuantumPixel(quantum_info,
1759 ScaleQuantumToAny(GetPixelBlue(p),range),q);
1760 q=PopQuantumPixel(quantum_info,
1761 ScaleQuantumToAny(GetPixelIndex(indexes+x),range),q);
1762 q=PopQuantumPixel(quantum_info,
1763 ScaleQuantumToAny((Quantum) GetPixelAlpha(p),range),q);
1765 q+=(ptrdiff_t) quantum_info->pad;
1772static void ExportCMYKOQuantum(
const Image *image,
QuantumInfo *quantum_info,
1773 const MagickSizeType number_pixels,
const PixelPacket *magick_restrict p,
1774 const IndexPacket *magick_restrict indexes,
unsigned char *magick_restrict q,
1783 if (image->colorspace != CMYKColorspace)
1785 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1786 "ColorSeparatedImageRequired",
"`%s'",image->filename);
1789 switch (quantum_info->depth)
1796 for (x=0; x < (ssize_t) number_pixels; x++)
1798 pixel=ScaleQuantumToChar(GetPixelRed(p));
1799 q=PopCharPixel(pixel,q);
1800 pixel=ScaleQuantumToChar(GetPixelGreen(p));
1801 q=PopCharPixel(pixel,q);
1802 pixel=ScaleQuantumToChar(GetPixelBlue(p));
1803 q=PopCharPixel(pixel,q);
1804 pixel=ScaleQuantumToChar(GetPixelIndex(indexes+x));
1805 q=PopCharPixel(pixel,q);
1806 pixel=ScaleQuantumToChar(GetPixelOpacity(p));
1807 q=PopCharPixel(pixel,q);
1809 q+=(ptrdiff_t) quantum_info->pad;
1818 if (quantum_info->format == FloatingPointQuantumFormat)
1820 for (x=0; x < (ssize_t) number_pixels; x++)
1822 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelRed(p));
1823 q=PopShortPixel(quantum_info->endian,pixel,q);
1824 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelGreen(p));
1825 q=PopShortPixel(quantum_info->endian,pixel,q);
1826 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelBlue(p));
1827 q=PopShortPixel(quantum_info->endian,pixel,q);
1828 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelIndex(indexes+x));
1829 q=PopShortPixel(quantum_info->endian,pixel,q);
1830 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelOpacity(p));
1831 q=PopShortPixel(quantum_info->endian,pixel,q);
1833 q+=(ptrdiff_t) quantum_info->pad;
1837 for (x=0; x < (ssize_t) number_pixels; x++)
1839 pixel=ScaleQuantumToShort(GetPixelRed(p));
1840 q=PopShortPixel(quantum_info->endian,pixel,q);
1841 pixel=ScaleQuantumToShort(GetPixelGreen(p));
1842 q=PopShortPixel(quantum_info->endian,pixel,q);
1843 pixel=ScaleQuantumToShort(GetPixelBlue(p));
1844 q=PopShortPixel(quantum_info->endian,pixel,q);
1845 pixel=ScaleQuantumToShort(GetPixelIndex(indexes+x));
1846 q=PopShortPixel(quantum_info->endian,pixel,q);
1847 pixel=ScaleQuantumToShort(GetPixelOpacity(p));
1848 q=PopShortPixel(quantum_info->endian,pixel,q);
1850 q+=(ptrdiff_t) quantum_info->pad;
1859 if (quantum_info->format == FloatingPointQuantumFormat)
1861 for (x=0; x < (ssize_t) number_pixels; x++)
1866 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelRed(p),q);
1867 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelGreen(p),q);
1868 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelBlue(p),q);
1869 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelIndex(indexes+x),q);
1870 pixel=(float) (GetPixelOpacity(p));
1871 q=PopQuantumFloatPixel(quantum_info,pixel,q);
1873 q+=(ptrdiff_t) quantum_info->pad;
1877 for (x=0; x < (ssize_t) number_pixels; x++)
1879 pixel=ScaleQuantumToLong(GetPixelRed(p));
1880 q=PopLongPixel(quantum_info->endian,pixel,q);
1881 pixel=ScaleQuantumToLong(GetPixelGreen(p));
1882 q=PopLongPixel(quantum_info->endian,pixel,q);
1883 pixel=ScaleQuantumToLong(GetPixelBlue(p));
1884 q=PopLongPixel(quantum_info->endian,pixel,q);
1885 pixel=ScaleQuantumToLong(GetPixelIndex(indexes+x));
1886 q=PopLongPixel(quantum_info->endian,pixel,q);
1887 pixel=ScaleQuantumToLong(GetPixelOpacity(p));
1888 q=PopLongPixel(quantum_info->endian,pixel,q);
1890 q+=(ptrdiff_t) quantum_info->pad;
1896 if (quantum_info->format == FloatingPointQuantumFormat)
1901 for (x=0; x < (ssize_t) number_pixels; x++)
1903 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelRed(p),q);
1904 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelGreen(p),q);
1905 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelBlue(p),q);
1906 q=PopQuantumDoublePixel(quantum_info,(
double)
1907 GetPixelIndex(indexes+x),q);
1908 pixel=(double) (GetPixelOpacity(p));
1909 q=PopQuantumDoublePixel(quantum_info,pixel,q);
1911 q+=(ptrdiff_t) quantum_info->pad;
1919 range=GetQuantumRange(quantum_info->depth);
1920 for (x=0; x < (ssize_t) number_pixels; x++)
1922 q=PopQuantumPixel(quantum_info,
1923 ScaleQuantumToAny(GetPixelRed(p),range),q);
1924 q=PopQuantumPixel(quantum_info,
1925 ScaleQuantumToAny(GetPixelGreen(p),range),q);
1926 q=PopQuantumPixel(quantum_info,
1927 ScaleQuantumToAny(GetPixelBlue(p),range),q);
1928 q=PopQuantumPixel(quantum_info,
1929 ScaleQuantumToAny(GetPixelIndex(indexes+x),range),q);
1930 q=PopQuantumPixel(quantum_info,
1931 ScaleQuantumToAny(GetPixelOpacity(p),range),q);
1933 q+=(ptrdiff_t) quantum_info->pad;
1941 const MagickSizeType number_pixels,
const PixelPacket *magick_restrict p,
1942 unsigned char *magick_restrict q)
1953 switch (quantum_info->depth)
1966 if (quantum_info->min_is_white != MagickFalse)
1971 threshold=(MagickRealType) QuantumRange/2.0;
1972 for (x=((ssize_t) number_pixels-7); x > 0; x-=8)
1975 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 7;
1977 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 6;
1979 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 5;
1981 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 4;
1983 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 3;
1985 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 2;
1987 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 1;
1989 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 0;
1993 if ((number_pixels % 8) != 0)
1996 for (bit=7; bit >= (ssize_t) (8-(number_pixels % 8)); bit--)
1998 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << bit;
2010 for (x=0; x < (ssize_t) (number_pixels-1) ; x+=2)
2012 pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
2013 *q=(((pixel >> 4) & 0xf) << 4);
2015 pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
2020 if ((number_pixels % 2) != 0)
2022 pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
2023 *q=(((pixel >> 4) & 0xf) << 4);
2034 for (x=0; x < (ssize_t) number_pixels; x++)
2036 pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
2037 q=PopCharPixel(pixel,q);
2039 q+=(ptrdiff_t) quantum_info->pad;
2045 range=GetQuantumRange(quantum_info->depth);
2046 if (quantum_info->pack == MagickFalse)
2051 for (x=0; x < (ssize_t) (number_pixels-2); x+=3)
2053 pixel=(
unsigned int) (
2054 ScaleQuantumToAny(ClampToQuantum(GetPixelLuma(image,p+2)),range) << 22 |
2055 ScaleQuantumToAny(ClampToQuantum(GetPixelLuma(image,p+1)),range) << 12 |
2056 ScaleQuantumToAny(ClampToQuantum(GetPixelLuma(image,p+0)),range) << 2);
2057 q=PopLongPixel(quantum_info->endian,pixel,q);
2059 q+=(ptrdiff_t) quantum_info->pad;
2061 if (x < (ssize_t) number_pixels)
2064 if (x++ < (ssize_t) (number_pixels-1))
2065 pixel|=ScaleQuantumToAny(ClampToQuantum(GetPixelLuma(image,
2067 if (x++ < (ssize_t) number_pixels)
2068 pixel|=ScaleQuantumToAny(ClampToQuantum(GetPixelLuma(image,
2070 q=PopLongPixel(quantum_info->endian,pixel,q);
2074 for (x=0; x < (ssize_t) number_pixels; x++)
2076 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(ClampToQuantum(
2077 GetPixelLuma(image,p)),range),q);
2079 q+=(ptrdiff_t) quantum_info->pad;
2088 range=GetQuantumRange(quantum_info->depth);
2089 if (quantum_info->pack == MagickFalse)
2091 for (x=0; x < (ssize_t) number_pixels; x++)
2093 pixel=ScaleQuantumToShort(ClampToQuantum(GetPixelLuma(image,p)));
2094 q=PopShortPixel(quantum_info->endian,(
unsigned short) (pixel >> 4),q);
2096 q+=(ptrdiff_t) quantum_info->pad;
2100 for (x=0; x < (ssize_t) number_pixels; x++)
2102 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(ClampToQuantum(
2103 GetPixelLuma(image,p)),range),q);
2105 q+=(ptrdiff_t) quantum_info->pad;
2114 if (quantum_info->format == FloatingPointQuantumFormat)
2116 for (x=0; x < (ssize_t) number_pixels; x++)
2118 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelLuma(image,p));
2119 q=PopShortPixel(quantum_info->endian,pixel,q);
2121 q+=(ptrdiff_t) quantum_info->pad;
2125 for (x=0; x < (ssize_t) number_pixels; x++)
2127 pixel=ScaleQuantumToShort(ClampToQuantum(GetPixelLuma(image,p)));
2128 q=PopShortPixel(quantum_info->endian,pixel,q);
2130 q+=(ptrdiff_t) quantum_info->pad;
2139 if (quantum_info->format == FloatingPointQuantumFormat)
2141 for (x=0; x < (ssize_t) number_pixels; x++)
2146 pixel=(float) GetPixelLuma(image,p);
2147 q=PopQuantumFloatPixel(quantum_info,pixel,q);
2149 q+=(ptrdiff_t) quantum_info->pad;
2153 for (x=0; x < (ssize_t) number_pixels; x++)
2155 pixel=ScaleQuantumToLong(ClampToQuantum(GetPixelLuma(image,p)));
2156 q=PopLongPixel(quantum_info->endian,pixel,q);
2158 q+=(ptrdiff_t) quantum_info->pad;
2164 if (quantum_info->format == FloatingPointQuantumFormat)
2166 for (x=0; x < (ssize_t) number_pixels; x++)
2171 pixel=(double) GetPixelLuma(image,p);
2172 q=PopQuantumDoublePixel(quantum_info,pixel,q);
2174 q+=(ptrdiff_t) quantum_info->pad;
2182 range=GetQuantumRange(quantum_info->depth);
2183 for (x=0; x < (ssize_t) number_pixels; x++)
2185 q=PopQuantumPixel(quantum_info,
2186 ScaleQuantumToAny(ClampToQuantum(GetPixelLuma(image,p)),range),q);
2188 q+=(ptrdiff_t) quantum_info->pad;
2195static void ExportGrayAlphaQuantum(
const Image *image,
QuantumInfo *quantum_info,
2196 const MagickSizeType number_pixels,
const PixelPacket *magick_restrict p,
2197 unsigned char *magick_restrict q)
2208 switch (quantum_info->depth)
2222 if (quantum_info->min_is_white != MagickFalse)
2227 threshold=(MagickRealType) QuantumRange/2.0;
2228 for (x=((ssize_t) number_pixels-3); x > 0; x-=4)
2231 *q|=(GetPixelLuma(image,p) > threshold ? black : white) << 7;
2232 pixel=(
unsigned char) (GetPixelOpacity(p) == OpaqueOpacity ?
2234 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 6);
2236 *q|=(GetPixelLuma(image,p) > threshold ? black : white) << 5;
2237 pixel=(
unsigned char) (GetPixelOpacity(p) == OpaqueOpacity ?
2239 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 4);
2241 *q|=(GetPixelLuma(image,p) > threshold ? black : white) << 3;
2242 pixel=(
unsigned char) (GetPixelOpacity(p) == OpaqueOpacity ?
2244 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 2);
2246 *q|=(GetPixelLuma(image,p) > threshold ? black : white) << 1;
2247 pixel=(
unsigned char) (GetPixelOpacity(p) == OpaqueOpacity ?
2249 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 0);
2253 if ((number_pixels % 4) != 0)
2256 for (bit=0; bit <= (ssize_t) (number_pixels % 4); bit+=2)
2258 *q|=(GetPixelLuma(image,p) > threshold ? black : white) <<
2260 pixel=(
unsigned char) (GetPixelOpacity(p) == OpaqueOpacity ? 0x00 :
2262 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << (
unsigned char) (7-bit-1));
2274 for (x=0; x < (ssize_t) number_pixels ; x++)
2276 pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
2277 *q=(((pixel >> 4) & 0xf) << 4);
2278 pixel=(
unsigned char) (16*QuantumScale*((MagickRealType) QuantumRange-
2279 (MagickRealType) GetPixelOpacity(p))+0.5);
2291 for (x=0; x < (ssize_t) number_pixels; x++)
2293 pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
2294 q=PopCharPixel(pixel,q);
2295 pixel=ScaleQuantumToChar((Quantum) (QuantumRange-GetPixelOpacity(p)));
2296 q=PopCharPixel(pixel,q);
2298 q+=(ptrdiff_t) quantum_info->pad;
2307 if (quantum_info->format == FloatingPointQuantumFormat)
2309 for (x=0; x < (ssize_t) number_pixels; x++)
2311 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelLuma(image,p));
2312 q=PopShortPixel(quantum_info->endian,pixel,q);
2313 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelAlpha(p));
2314 q=PopShortPixel(quantum_info->endian,pixel,q);
2316 q+=(ptrdiff_t) quantum_info->pad;
2320 for (x=0; x < (ssize_t) number_pixels; x++)
2322 pixel=ScaleQuantumToShort(ClampToQuantum(GetPixelLuma(image,p)));
2323 q=PopShortPixel(quantum_info->endian,pixel,q);
2324 pixel=ScaleQuantumToShort((Quantum) (QuantumRange-GetPixelOpacity(p)));
2325 q=PopShortPixel(quantum_info->endian,pixel,q);
2327 q+=(ptrdiff_t) quantum_info->pad;
2336 if (quantum_info->format == FloatingPointQuantumFormat)
2338 for (x=0; x < (ssize_t) number_pixels; x++)
2343 pixel=(float) GetPixelLuma(image,p);
2344 q=PopQuantumFloatPixel(quantum_info,pixel,q);
2345 pixel=(float) (GetPixelAlpha(p));
2346 q=PopQuantumFloatPixel(quantum_info,pixel,q);
2348 q+=(ptrdiff_t) quantum_info->pad;
2352 for (x=0; x < (ssize_t) number_pixels; x++)
2354 pixel=ScaleQuantumToLong(ClampToQuantum(GetPixelLuma(image,p)));
2355 q=PopLongPixel(quantum_info->endian,pixel,q);
2356 pixel=ScaleQuantumToLong((Quantum) (QuantumRange-GetPixelOpacity(p)));
2357 q=PopLongPixel(quantum_info->endian,pixel,q);
2359 q+=(ptrdiff_t) quantum_info->pad;
2365 if (quantum_info->format == FloatingPointQuantumFormat)
2367 for (x=0; x < (ssize_t) number_pixels; x++)
2372 pixel=(double) GetPixelLuma(image,p);
2373 q=PopQuantumDoublePixel(quantum_info,pixel,q);
2374 pixel=(double) (GetPixelAlpha(p));
2375 q=PopQuantumDoublePixel(quantum_info,pixel,q);
2377 q+=(ptrdiff_t) quantum_info->pad;
2385 range=GetQuantumRange(quantum_info->depth);
2386 for (x=0; x < (ssize_t) number_pixels; x++)
2388 q=PopQuantumPixel(quantum_info,
2389 ScaleQuantumToAny(ClampToQuantum(GetPixelLuma(image,p)),range),q);
2390 q=PopQuantumPixel(quantum_info,
2391 ScaleQuantumToAny((Quantum) (GetPixelAlpha(p)),range),q);
2393 q+=(ptrdiff_t) quantum_info->pad;
2400static void ExportGreenQuantum(
QuantumInfo *quantum_info,
2401 const MagickSizeType number_pixels,
const PixelPacket *magick_restrict p,
2402 unsigned char *magick_restrict q)
2410 switch (quantum_info->depth)
2417 for (x=0; x < (ssize_t) number_pixels; x++)
2419 pixel=ScaleQuantumToChar(GetPixelGreen(p));
2420 q=PopCharPixel(pixel,q);
2422 q+=(ptrdiff_t) quantum_info->pad;
2431 if (quantum_info->format == FloatingPointQuantumFormat)
2433 for (x=0; x < (ssize_t) number_pixels; x++)
2435 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelGreen(p));
2436 q=PopShortPixel(quantum_info->endian,pixel,q);
2438 q+=(ptrdiff_t) quantum_info->pad;
2442 for (x=0; x < (ssize_t) number_pixels; x++)
2444 pixel=ScaleQuantumToShort(GetPixelGreen(p));
2445 q=PopShortPixel(quantum_info->endian,pixel,q);
2447 q+=(ptrdiff_t) quantum_info->pad;
2456 if (quantum_info->format == FloatingPointQuantumFormat)
2458 for (x=0; x < (ssize_t) number_pixels; x++)
2460 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelGreen(p),q);
2462 q+=(ptrdiff_t) quantum_info->pad;
2466 for (x=0; x < (ssize_t) number_pixels; x++)
2468 pixel=ScaleQuantumToLong(GetPixelGreen(p));
2469 q=PopLongPixel(quantum_info->endian,pixel,q);
2471 q+=(ptrdiff_t) quantum_info->pad;
2477 if (quantum_info->format == FloatingPointQuantumFormat)
2479 for (x=0; x < (ssize_t) number_pixels; x++)
2481 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelGreen(p),q);
2483 q+=(ptrdiff_t) quantum_info->pad;
2491 range=GetQuantumRange(quantum_info->depth);
2492 for (x=0; x < (ssize_t) number_pixels; x++)
2494 q=PopQuantumPixel(quantum_info,
2495 ScaleQuantumToAny(GetPixelGreen(p),range),q);
2497 q+=(ptrdiff_t) quantum_info->pad;
2504static void ExportIndexQuantum(
const Image *image,
QuantumInfo *quantum_info,
2505 const MagickSizeType number_pixels,
const PixelPacket *magick_restrict p,
2506 const IndexPacket *magick_restrict indexes,
unsigned char *magick_restrict q,
2515 if (image->storage_class != PseudoClass)
2517 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2518 "ColormappedImageRequired",
"`%s'",image->filename);
2521 switch (quantum_info->depth)
2528 for (x=((ssize_t) number_pixels-7); x > 0; x-=8)
2530 pixel=(
unsigned char) ((ssize_t) *indexes++);
2531 *q=((pixel & 0x01) << 7);
2532 pixel=(
unsigned char) ((ssize_t) *indexes++);
2533 *q|=((pixel & 0x01) << 6);
2534 pixel=(
unsigned char) ((ssize_t) *indexes++);
2535 *q|=((pixel & 0x01) << 5);
2536 pixel=(
unsigned char) ((ssize_t) *indexes++);
2537 *q|=((pixel & 0x01) << 4);
2538 pixel=(
unsigned char) ((ssize_t) *indexes++);
2539 *q|=((pixel & 0x01) << 3);
2540 pixel=(
unsigned char) ((ssize_t) *indexes++);
2541 *q|=((pixel & 0x01) << 2);
2542 pixel=(
unsigned char) ((ssize_t) *indexes++);
2543 *q|=((pixel & 0x01) << 1);
2544 pixel=(
unsigned char) ((ssize_t) *indexes++);
2545 *q|=((pixel & 0x01) << 0);
2548 if ((number_pixels % 8) != 0)
2551 for (bit=7; bit >= (ssize_t) (8-(number_pixels % 8)); bit--)
2553 pixel=(
unsigned char) ((ssize_t) *indexes++);
2554 *q|=((pixel & 0x01) << (
unsigned char) bit);
2565 for (x=0; x < (ssize_t) (number_pixels-1) ; x+=2)
2567 pixel=(
unsigned char) ((ssize_t) *indexes++);
2568 *q=((pixel & 0xf) << 4);
2569 pixel=(
unsigned char) ((ssize_t) *indexes++);
2570 *q|=((pixel & 0xf) << 0);
2573 if ((number_pixels % 2) != 0)
2575 pixel=(
unsigned char) ((ssize_t) *indexes++);
2576 *q=((pixel & 0xf) << 4);
2583 for (x=0; x < (ssize_t) number_pixels; x++)
2585 q=PopCharPixel((
unsigned char) GetPixelIndex(indexes+x),q);
2586 q+=(ptrdiff_t) quantum_info->pad;
2592 if (quantum_info->format == FloatingPointQuantumFormat)
2594 for (x=0; x < (ssize_t) number_pixels; x++)
2596 q=PopShortPixel(quantum_info->endian,SinglePrecisionToHalf(
2597 QuantumScale*(MagickRealType) GetPixelIndex(indexes+x)),q);
2598 q+=(ptrdiff_t) quantum_info->pad;
2602 for (x=0; x < (ssize_t) number_pixels; x++)
2604 q=PopShortPixel(quantum_info->endian,(
unsigned short) GetPixelIndex(indexes+x),q);
2605 q+=(ptrdiff_t) quantum_info->pad;
2611 if (quantum_info->format == FloatingPointQuantumFormat)
2613 for (x=0; x < (ssize_t) number_pixels; x++)
2615 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelIndex(indexes+x),q);
2617 q+=(ptrdiff_t) quantum_info->pad;
2621 for (x=0; x < (ssize_t) number_pixels; x++)
2623 q=PopLongPixel(quantum_info->endian,(
unsigned int) GetPixelIndex(indexes+x),q);
2624 q+=(ptrdiff_t) quantum_info->pad;
2630 if (quantum_info->format == FloatingPointQuantumFormat)
2632 for (x=0; x < (ssize_t) number_pixels; x++)
2634 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelIndex(indexes+x),
2637 q+=(ptrdiff_t) quantum_info->pad;
2645 for (x=0; x < (ssize_t) number_pixels; x++)
2647 q=PopQuantumPixel(quantum_info,(QuantumAny) GetPixelIndex(indexes+x),q);
2649 q+=(ptrdiff_t) quantum_info->pad;
2656static void ExportIndexAlphaQuantum(
const Image *image,
2657 QuantumInfo *quantum_info,
const MagickSizeType number_pixels,
2659 const IndexPacket *magick_restrict indexes,
unsigned char *magick_restrict q,
2668 if (image->storage_class != PseudoClass)
2670 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2671 "ColormappedImageRequired",
"`%s'",image->filename);
2674 switch (quantum_info->depth)
2681 for (x=((ssize_t) number_pixels-3); x > 0; x-=4)
2683 pixel=(
unsigned char) ((ssize_t) *indexes++);
2684 *q=((pixel & 0x01) << 7);
2685 pixel=(
unsigned char) (GetPixelOpacity(p) == (Quantum)
2686 TransparentOpacity ? 1 : 0);
2687 *q|=((pixel & 0x01) << 6);
2689 pixel=(
unsigned char) ((ssize_t) *indexes++);
2690 *q|=((pixel & 0x01) << 5);
2691 pixel=(
unsigned char) (GetPixelOpacity(p) == (Quantum)
2692 TransparentOpacity ? 1 : 0);
2693 *q|=((pixel & 0x01) << 4);
2695 pixel=(
unsigned char) ((ssize_t) *indexes++);
2696 *q|=((pixel & 0x01) << 3);
2697 pixel=(
unsigned char) (GetPixelOpacity(p) == (Quantum)
2698 TransparentOpacity ? 1 : 0);
2699 *q|=((pixel & 0x01) << 2);
2701 pixel=(
unsigned char) ((ssize_t) *indexes++);
2702 *q|=((pixel & 0x01) << 1);
2703 pixel=(
unsigned char) (GetPixelOpacity(p) == (Quantum)
2704 TransparentOpacity ? 1 : 0);
2705 *q|=((pixel & 0x01) << 0);
2709 if ((number_pixels % 4) != 0)
2712 for (bit=3; bit >= (ssize_t) (4-(number_pixels % 4)); bit-=2)
2714 pixel=(
unsigned char) ((ssize_t) *indexes++);
2715 *q|=((pixel & 0x01) << (
unsigned char) (bit+4));
2716 pixel=(
unsigned char) (GetPixelOpacity(p) == (Quantum)
2717 TransparentOpacity ? 1 : 0);
2718 *q|=((pixel & 0x01) << (
unsigned char) (bit+4-1));
2730 for (x=0; x < (ssize_t) number_pixels ; x++)
2732 pixel=(
unsigned char) ((ssize_t) *indexes++);
2733 *q=((pixel & 0xf) << 4);
2734 pixel=(
unsigned char) ((ssize_t) (16*QuantumScale*((MagickRealType)
2735 QuantumRange-(MagickRealType) GetPixelOpacity(p))+0.5));
2736 *q|=((pixel & 0xf) << 0);
2747 for (x=0; x < (ssize_t) number_pixels; x++)
2749 q=PopCharPixel((
unsigned char) GetPixelIndex(indexes+x),q);
2750 pixel=ScaleQuantumToChar((Quantum) (QuantumRange-GetPixelOpacity(p)));
2751 q=PopCharPixel(pixel,q);
2753 q+=(ptrdiff_t) quantum_info->pad;
2762 if (quantum_info->format == FloatingPointQuantumFormat)
2764 for (x=0; x < (ssize_t) number_pixels; x++)
2766 q=PopShortPixel(quantum_info->endian,(
unsigned short)
2767 ((ssize_t) GetPixelIndex(indexes+x)),q);
2768 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelAlpha(p));
2769 q=PopShortPixel(quantum_info->endian,pixel,q);
2771 q+=(ptrdiff_t) quantum_info->pad;
2775 for (x=0; x < (ssize_t) number_pixels; x++)
2777 q=PopShortPixel(quantum_info->endian,(
unsigned short)
2778 ((ssize_t) GetPixelIndex(indexes+x)),q);
2779 pixel=ScaleQuantumToShort((Quantum) (QuantumRange-GetPixelOpacity(p)));
2780 q=PopShortPixel(quantum_info->endian,pixel,q);
2782 q+=(ptrdiff_t) quantum_info->pad;
2791 if (quantum_info->format == FloatingPointQuantumFormat)
2793 for (x=0; x < (ssize_t) number_pixels; x++)
2798 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelIndex(indexes+x),q);
2799 pixel=(float) (GetPixelAlpha(p));
2800 q=PopQuantumFloatPixel(quantum_info,pixel,q);
2802 q+=(ptrdiff_t) quantum_info->pad;
2806 for (x=0; x < (ssize_t) number_pixels; x++)
2808 q=PopLongPixel(quantum_info->endian,(
unsigned int)
2809 GetPixelIndex(indexes+x),q);
2810 pixel=ScaleQuantumToLong((Quantum) (QuantumRange-GetPixelOpacity(p)));
2811 q=PopLongPixel(quantum_info->endian,pixel,q);
2813 q+=(ptrdiff_t) quantum_info->pad;
2819 if (quantum_info->format == FloatingPointQuantumFormat)
2821 for (x=0; x < (ssize_t) number_pixels; x++)
2826 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelIndex(indexes+x),
2828 pixel=(double) (GetPixelAlpha(p));
2829 q=PopQuantumDoublePixel(quantum_info,pixel,q);
2831 q+=(ptrdiff_t) quantum_info->pad;
2842 range=GetQuantumRange(quantum_info->depth);
2843 for (x=0; x < (ssize_t) number_pixels; x++)
2845 q=PopQuantumPixel(quantum_info,(QuantumAny) GetPixelIndex(indexes+x),q);
2846 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny((Quantum)
2847 (GetPixelAlpha(p)),range),q);
2849 q+=(ptrdiff_t) quantum_info->pad;
2856static void ExportOpacityQuantum(
QuantumInfo *quantum_info,
2857 const MagickSizeType number_pixels,
const PixelPacket *magick_restrict p,
2858 unsigned char *magick_restrict q)
2866 switch (quantum_info->depth)
2873 for (x=0; x < (ssize_t) number_pixels; x++)
2875 pixel=ScaleQuantumToChar(GetPixelOpacity(p));
2876 q=PopCharPixel(pixel,q);
2878 q+=(ptrdiff_t) quantum_info->pad;
2887 if (quantum_info->format == FloatingPointQuantumFormat)
2889 for (x=0; x < (ssize_t) number_pixels; x++)
2891 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelOpacity(p));
2892 q=PopShortPixel(quantum_info->endian,pixel,q);
2894 q+=(ptrdiff_t) quantum_info->pad;
2898 for (x=0; x < (ssize_t) number_pixels; x++)
2900 pixel=ScaleQuantumToShort(GetPixelOpacity(p));
2901 q=PopShortPixel(quantum_info->endian,pixel,q);
2903 q+=(ptrdiff_t) quantum_info->pad;
2912 if (quantum_info->format == FloatingPointQuantumFormat)
2914 for (x=0; x < (ssize_t) number_pixels; x++)
2916 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelOpacity(p),q);
2918 q+=(ptrdiff_t) quantum_info->pad;
2922 for (x=0; x < (ssize_t) number_pixels; x++)
2924 pixel=ScaleQuantumToLong(GetPixelOpacity(p));
2925 q=PopLongPixel(quantum_info->endian,pixel,q);
2927 q+=(ptrdiff_t) quantum_info->pad;
2933 if (quantum_info->format == FloatingPointQuantumFormat)
2935 for (x=0; x < (ssize_t) number_pixels; x++)
2937 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelOpacity(p),q);
2939 q+=(ptrdiff_t) quantum_info->pad;
2947 range=GetQuantumRange(quantum_info->depth);
2948 for (x=0; x < (ssize_t) number_pixels; x++)
2950 q=PopQuantumPixel(quantum_info,
2951 ScaleQuantumToAny(GetPixelOpacity(p),range),q);
2953 q+=(ptrdiff_t) quantum_info->pad;
2960static void ExportRedQuantum(
QuantumInfo *quantum_info,
2961 const MagickSizeType number_pixels,
const PixelPacket *magick_restrict p,
2962 unsigned char *magick_restrict q)
2970 switch (quantum_info->depth)
2977 for (x=0; x < (ssize_t) number_pixels; x++)
2979 pixel=ScaleQuantumToChar(GetPixelRed(p));
2980 q=PopCharPixel(pixel,q);
2982 q+=(ptrdiff_t) quantum_info->pad;
2991 if (quantum_info->format == FloatingPointQuantumFormat)
2993 for (x=0; x < (ssize_t) number_pixels; x++)
2995 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelRed(p));
2996 q=PopShortPixel(quantum_info->endian,pixel,q);
2998 q+=(ptrdiff_t) quantum_info->pad;
3002 for (x=0; x < (ssize_t) number_pixels; x++)
3004 pixel=ScaleQuantumToShort(GetPixelRed(p));
3005 q=PopShortPixel(quantum_info->endian,pixel,q);
3007 q+=(ptrdiff_t) quantum_info->pad;
3016 if (quantum_info->format == FloatingPointQuantumFormat)
3018 for (x=0; x < (ssize_t) number_pixels; x++)
3020 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelRed(p),q);
3022 q+=(ptrdiff_t) quantum_info->pad;
3026 for (x=0; x < (ssize_t) number_pixels; x++)
3028 pixel=ScaleQuantumToLong(GetPixelRed(p));
3029 q=PopLongPixel(quantum_info->endian,pixel,q);
3031 q+=(ptrdiff_t) quantum_info->pad;
3037 if (quantum_info->format == FloatingPointQuantumFormat)
3039 for (x=0; x < (ssize_t) number_pixels; x++)
3041 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelRed(p),q);
3043 q+=(ptrdiff_t) quantum_info->pad;
3051 range=GetQuantumRange(quantum_info->depth);
3052 for (x=0; x < (ssize_t) number_pixels; x++)
3054 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(p),range),
3057 q+=(ptrdiff_t) quantum_info->pad;
3064static void ExportRGBQuantum(
QuantumInfo *quantum_info,
3065 const MagickSizeType number_pixels,
const PixelPacket *magick_restrict p,
3066 unsigned char *magick_restrict q)
3077 switch (quantum_info->depth)
3081 for (x=0; x < (ssize_t) number_pixels; x++)
3083 q=PopCharPixel(ScaleQuantumToChar(GetPixelRed(p)),q);
3084 q=PopCharPixel(ScaleQuantumToChar(GetPixelGreen(p)),q);
3085 q=PopCharPixel(ScaleQuantumToChar(GetPixelBlue(p)),q);
3087 q+=(ptrdiff_t) quantum_info->pad;
3096 range=GetQuantumRange(quantum_info->depth);
3097 if (quantum_info->pack == MagickFalse)
3099 for (x=0; x < (ssize_t) number_pixels; x++)
3101 pixel=(
unsigned int) (
3102 ScaleQuantumToAny(GetPixelRed(p),range) << 22 |
3103 ScaleQuantumToAny(GetPixelGreen(p),range) << 12 |
3104 ScaleQuantumToAny(GetPixelBlue(p),range) << 2);
3105 q=PopLongPixel(quantum_info->endian,pixel,q);
3107 q+=(ptrdiff_t) quantum_info->pad;
3111 if (quantum_info->quantum == 32UL)
3113 for (x=0; x < (ssize_t) number_pixels; x++)
3115 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(p),range);
3116 q=PopQuantumLongPixel(quantum_info,pixel,q);
3117 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(p),range);
3118 q=PopQuantumLongPixel(quantum_info,pixel,q);
3119 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(p),range);
3120 q=PopQuantumLongPixel(quantum_info,pixel,q);
3122 q+=(ptrdiff_t) quantum_info->pad;
3126 for (x=0; x < (ssize_t) number_pixels; x++)
3128 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(p),range);
3129 q=PopQuantumPixel(quantum_info,pixel,q);
3130 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(p),range);
3131 q=PopQuantumPixel(quantum_info,pixel,q);
3132 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(p),range);
3133 q=PopQuantumPixel(quantum_info,pixel,q);
3135 q+=(ptrdiff_t) quantum_info->pad;
3144 range=GetQuantumRange(quantum_info->depth);
3145 if (quantum_info->pack == MagickFalse)
3147 for (x=0; x < (ssize_t) (3*number_pixels-1); x+=2)
3154 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(p),range);
3159 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(p),range);
3164 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(p),range);
3169 q=PopShortPixel(quantum_info->endian,(
unsigned short) (pixel << 4),
3176 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(p),range);
3181 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(p),range);
3186 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(p),range);
3191 q=PopShortPixel(quantum_info->endian,(
unsigned short) (pixel << 4),
3193 q+=(ptrdiff_t) quantum_info->pad;
3195 for (bit=0; bit < (ssize_t) (3*number_pixels % 2); bit++)
3197 switch ((x+bit) % 3)
3202 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(p),range);
3207 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(p),range);
3212 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(p),range);
3217 q=PopShortPixel(quantum_info->endian,(
unsigned short) (pixel << 4),
3219 q+=(ptrdiff_t) quantum_info->pad;
3225 if (quantum_info->quantum == 32UL)
3227 for (x=0; x < (ssize_t) number_pixels; x++)
3229 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(p),range);
3230 q=PopQuantumLongPixel(quantum_info,pixel,q);
3231 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(p),range);
3232 q=PopQuantumLongPixel(quantum_info,pixel,q);
3233 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(p),range);
3234 q=PopQuantumLongPixel(quantum_info,pixel,q);
3236 q+=(ptrdiff_t) quantum_info->pad;
3240 for (x=0; x < (ssize_t) number_pixels; x++)
3242 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(p),range);
3243 q=PopQuantumPixel(quantum_info,pixel,q);
3244 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(p),range);
3245 q=PopQuantumPixel(quantum_info,pixel,q);
3246 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(p),range);
3247 q=PopQuantumPixel(quantum_info,pixel,q);
3249 q+=(ptrdiff_t) quantum_info->pad;
3258 if (quantum_info->format == FloatingPointQuantumFormat)
3260 for (x=0; x < (ssize_t) number_pixels; x++)
3262 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelRed(p));
3263 q=PopShortPixel(quantum_info->endian,pixel,q);
3264 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelGreen(p));
3265 q=PopShortPixel(quantum_info->endian,pixel,q);
3266 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelBlue(p));
3267 q=PopShortPixel(quantum_info->endian,pixel,q);
3269 q+=(ptrdiff_t) quantum_info->pad;
3273 for (x=0; x < (ssize_t) number_pixels; x++)
3275 pixel=ScaleQuantumToShort(GetPixelRed(p));
3276 q=PopShortPixel(quantum_info->endian,pixel,q);
3277 pixel=ScaleQuantumToShort(GetPixelGreen(p));
3278 q=PopShortPixel(quantum_info->endian,pixel,q);
3279 pixel=ScaleQuantumToShort(GetPixelBlue(p));
3280 q=PopShortPixel(quantum_info->endian,pixel,q);
3282 q+=(ptrdiff_t) quantum_info->pad;
3291 if (quantum_info->format == FloatingPointQuantumFormat)
3293 for (x=0; x < (ssize_t) number_pixels; x++)
3295 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelRed(p),q);
3296 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelGreen(p),q);
3297 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelBlue(p),q);
3299 q+=(ptrdiff_t) quantum_info->pad;
3303 for (x=0; x < (ssize_t) number_pixels; x++)
3305 pixel=ScaleQuantumToLong(GetPixelRed(p));
3306 q=PopLongPixel(quantum_info->endian,pixel,q);
3307 pixel=ScaleQuantumToLong(GetPixelGreen(p));
3308 q=PopLongPixel(quantum_info->endian,pixel,q);
3309 pixel=ScaleQuantumToLong(GetPixelBlue(p));
3310 q=PopLongPixel(quantum_info->endian,pixel,q);
3312 q+=(ptrdiff_t) quantum_info->pad;
3318 if (quantum_info->format == FloatingPointQuantumFormat)
3320 for (x=0; x < (ssize_t) number_pixels; x++)
3322 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelRed(p),q);
3323 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelGreen(p),q);
3324 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelBlue(p),q);
3326 q+=(ptrdiff_t) quantum_info->pad;
3334 range=GetQuantumRange(quantum_info->depth);
3335 for (x=0; x < (ssize_t) number_pixels; x++)
3337 q=PopQuantumPixel(quantum_info,
3338 ScaleQuantumToAny(GetPixelRed(p),range),q);
3339 q=PopQuantumPixel(quantum_info,
3340 ScaleQuantumToAny(GetPixelGreen(p),range),q);
3341 q=PopQuantumPixel(quantum_info,
3342 ScaleQuantumToAny(GetPixelBlue(p),range),q);
3344 q+=(ptrdiff_t) quantum_info->pad;
3351static void ExportRGBAQuantum(
QuantumInfo *quantum_info,
3352 const MagickSizeType number_pixels,
const PixelPacket *magick_restrict p,
3353 unsigned char *magick_restrict q)
3361 switch (quantum_info->depth)
3368 for (x=0; x < (ssize_t) number_pixels; x++)
3370 pixel=ScaleQuantumToChar(GetPixelRed(p));
3371 q=PopCharPixel(pixel,q);
3372 pixel=ScaleQuantumToChar(GetPixelGreen(p));
3373 q=PopCharPixel(pixel,q);
3374 pixel=ScaleQuantumToChar(GetPixelBlue(p));
3375 q=PopCharPixel(pixel,q);
3376 pixel=ScaleQuantumToChar((Quantum) GetPixelAlpha(p));
3377 q=PopCharPixel(pixel,q);
3379 q+=(ptrdiff_t) quantum_info->pad;
3388 range=GetQuantumRange(quantum_info->depth);
3389 if (quantum_info->pack == MagickFalse)
3403 for (x=0; x < (ssize_t) number_pixels; x++)
3405 for (i=0; i < 4; i++)
3409 case 0: quantum=(size_t) GetPixelRed(p);
break;
3410 case 1: quantum=(size_t) GetPixelGreen(p);
break;
3411 case 2: quantum=(size_t) GetPixelBlue(p);
break;
3412 case 3: quantum=(size_t) GetPixelAlpha(p);
break;
3418 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
3424 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
3430 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
3432 q=PopLongPixel(quantum_info->endian,pixel,q);
3440 q+=(ptrdiff_t) quantum_info->pad;
3444 if (quantum_info->quantum == 32UL)
3446 for (x=0; x < (ssize_t) number_pixels; x++)
3448 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(p),range);
3449 q=PopQuantumLongPixel(quantum_info,pixel,q);
3450 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(p),range);
3451 q=PopQuantumLongPixel(quantum_info,pixel,q);
3452 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(p),range);
3453 q=PopQuantumLongPixel(quantum_info,pixel,q);
3454 pixel=(
unsigned int) ScaleQuantumToAny((Quantum) GetPixelAlpha(p),
3456 q=PopQuantumLongPixel(quantum_info,pixel,q);
3458 q+=(ptrdiff_t) quantum_info->pad;
3462 for (x=0; x < (ssize_t) number_pixels; x++)
3464 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(p),range);
3465 q=PopQuantumPixel(quantum_info,pixel,q);
3466 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(p),range);
3467 q=PopQuantumPixel(quantum_info,pixel,q);
3468 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(p),range);
3469 q=PopQuantumPixel(quantum_info,pixel,q);
3470 pixel=(
unsigned int) ScaleQuantumToAny((Quantum) GetPixelAlpha(p),
3472 q=PopQuantumPixel(quantum_info,pixel,q);
3474 q+=(ptrdiff_t) quantum_info->pad;
3483 if (quantum_info->format == FloatingPointQuantumFormat)
3485 for (x=0; x < (ssize_t) number_pixels; x++)
3487 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelRed(p));
3488 q=PopShortPixel(quantum_info->endian,pixel,q);
3489 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelGreen(p));
3490 q=PopShortPixel(quantum_info->endian,pixel,q);
3491 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelBlue(p));
3492 q=PopShortPixel(quantum_info->endian,pixel,q);
3493 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelAlpha(p));
3494 q=PopShortPixel(quantum_info->endian,pixel,q);
3496 q+=(ptrdiff_t) quantum_info->pad;
3500 for (x=0; x < (ssize_t) number_pixels; x++)
3502 pixel=ScaleQuantumToShort(GetPixelRed(p));
3503 q=PopShortPixel(quantum_info->endian,pixel,q);
3504 pixel=ScaleQuantumToShort(GetPixelGreen(p));
3505 q=PopShortPixel(quantum_info->endian,pixel,q);
3506 pixel=ScaleQuantumToShort(GetPixelBlue(p));
3507 q=PopShortPixel(quantum_info->endian,pixel,q);
3508 pixel=ScaleQuantumToShort((Quantum) GetPixelAlpha(p));
3509 q=PopShortPixel(quantum_info->endian,pixel,q);
3511 q+=(ptrdiff_t) quantum_info->pad;
3520 if (quantum_info->format == FloatingPointQuantumFormat)
3522 for (x=0; x < (ssize_t) number_pixels; x++)
3527 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelRed(p),q);
3528 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelGreen(p),q);
3529 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelBlue(p),q);
3530 pixel=(float) GetPixelAlpha(p);
3531 q=PopQuantumFloatPixel(quantum_info,pixel,q);
3533 q+=(ptrdiff_t) quantum_info->pad;
3537 for (x=0; x < (ssize_t) number_pixels; x++)
3539 pixel=ScaleQuantumToLong(GetPixelRed(p));
3540 q=PopLongPixel(quantum_info->endian,pixel,q);
3541 pixel=ScaleQuantumToLong(GetPixelGreen(p));
3542 q=PopLongPixel(quantum_info->endian,pixel,q);
3543 pixel=ScaleQuantumToLong(GetPixelBlue(p));
3544 q=PopLongPixel(quantum_info->endian,pixel,q);
3545 pixel=ScaleQuantumToLong((Quantum) GetPixelAlpha(p));
3546 q=PopLongPixel(quantum_info->endian,pixel,q);
3548 q+=(ptrdiff_t) quantum_info->pad;
3554 if (quantum_info->format == FloatingPointQuantumFormat)
3559 for (x=0; x < (ssize_t) number_pixels; x++)
3561 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelRed(p),q);
3562 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelGreen(p),q);
3563 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelBlue(p),q);
3564 pixel=(double) GetPixelAlpha(p);
3565 q=PopQuantumDoublePixel(quantum_info,pixel,q);
3567 q+=(ptrdiff_t) quantum_info->pad;
3575 range=GetQuantumRange(quantum_info->depth);
3576 for (x=0; x < (ssize_t) number_pixels; x++)
3578 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(p),
3580 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(p),
3582 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(p),
3584 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny((Quantum)
3585 GetPixelAlpha(p),range),q);
3587 q+=(ptrdiff_t) quantum_info->pad;
3594static void ExportRGBOQuantum(
QuantumInfo *quantum_info,
3595 const MagickSizeType number_pixels,
const PixelPacket *magick_restrict p,
3596 unsigned char *magick_restrict q)
3604 switch (quantum_info->depth)
3611 for (x=0; x < (ssize_t) number_pixels; x++)
3613 pixel=ScaleQuantumToChar(GetPixelRed(p));
3614 q=PopCharPixel(pixel,q);
3615 pixel=ScaleQuantumToChar(GetPixelGreen(p));
3616 q=PopCharPixel(pixel,q);
3617 pixel=ScaleQuantumToChar(GetPixelBlue(p));
3618 q=PopCharPixel(pixel,q);
3619 pixel=ScaleQuantumToChar(GetPixelOpacity(p));
3620 q=PopCharPixel(pixel,q);
3622 q+=(ptrdiff_t) quantum_info->pad;
3631 range=GetQuantumRange(quantum_info->depth);
3632 if (quantum_info->pack == MagickFalse)
3646 for (x=0; x < (ssize_t) number_pixels; x++)
3648 for (i=0; i < 4; i++)
3652 case 0: quantum=(size_t) GetPixelRed(p);
break;
3653 case 1: quantum=(size_t) GetPixelGreen(p);
break;
3654 case 2: quantum=(size_t) GetPixelBlue(p);
break;
3655 case 3: quantum=(size_t) GetPixelOpacity(p);
break;
3661 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
3667 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
3673 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
3675 q=PopLongPixel(quantum_info->endian,pixel,q);
3683 q+=(ptrdiff_t) quantum_info->pad;
3687 if (quantum_info->quantum == 32UL)
3689 for (x=0; x < (ssize_t) number_pixels; x++)
3691 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(p),range);
3692 q=PopQuantumLongPixel(quantum_info,pixel,q);
3693 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(p),range);
3694 q=PopQuantumLongPixel(quantum_info,pixel,q);
3695 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(p),range);
3696 q=PopQuantumLongPixel(quantum_info,pixel,q);
3697 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelOpacity(p),range);
3698 q=PopQuantumLongPixel(quantum_info,pixel,q);
3700 q+=(ptrdiff_t) quantum_info->pad;
3704 for (x=0; x < (ssize_t) number_pixels; x++)
3706 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(p),range);
3707 q=PopQuantumPixel(quantum_info,pixel,q);
3708 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(p),range);
3709 q=PopQuantumPixel(quantum_info,pixel,q);
3710 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(p),range);
3711 q=PopQuantumPixel(quantum_info,pixel,q);
3712 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelOpacity(p),range);
3713 q=PopQuantumPixel(quantum_info,pixel,q);
3715 q+=(ptrdiff_t) quantum_info->pad;
3724 if (quantum_info->format == FloatingPointQuantumFormat)
3726 for (x=0; x < (ssize_t) number_pixels; x++)
3728 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelRed(p));
3729 q=PopShortPixel(quantum_info->endian,pixel,q);
3730 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelGreen(p));
3731 q=PopShortPixel(quantum_info->endian,pixel,q);
3732 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelBlue(p));
3733 q=PopShortPixel(quantum_info->endian,pixel,q);
3734 pixel=SinglePrecisionToHalf(QuantumScale*(MagickRealType) GetPixelOpacity(p));
3735 q=PopShortPixel(quantum_info->endian,pixel,q);
3737 q+=(ptrdiff_t) quantum_info->pad;
3741 for (x=0; x < (ssize_t) number_pixels; x++)
3743 pixel=ScaleQuantumToShort(GetPixelRed(p));
3744 q=PopShortPixel(quantum_info->endian,pixel,q);
3745 pixel=ScaleQuantumToShort(GetPixelGreen(p));
3746 q=PopShortPixel(quantum_info->endian,pixel,q);
3747 pixel=ScaleQuantumToShort(GetPixelBlue(p));
3748 q=PopShortPixel(quantum_info->endian,pixel,q);
3749 pixel=ScaleQuantumToShort(GetPixelOpacity(p));
3750 q=PopShortPixel(quantum_info->endian,pixel,q);
3752 q+=(ptrdiff_t) quantum_info->pad;
3761 if (quantum_info->format == FloatingPointQuantumFormat)
3763 for (x=0; x < (ssize_t) number_pixels; x++)
3768 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelRed(p),q);
3769 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelGreen(p),q);
3770 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelBlue(p),q);
3771 pixel=(float) GetPixelOpacity(p);
3772 q=PopQuantumFloatPixel(quantum_info,pixel,q);
3774 q+=(ptrdiff_t) quantum_info->pad;
3778 for (x=0; x < (ssize_t) number_pixels; x++)
3780 pixel=ScaleQuantumToLong(GetPixelRed(p));
3781 q=PopLongPixel(quantum_info->endian,pixel,q);
3782 pixel=ScaleQuantumToLong(GetPixelGreen(p));
3783 q=PopLongPixel(quantum_info->endian,pixel,q);
3784 pixel=ScaleQuantumToLong(GetPixelBlue(p));
3785 q=PopLongPixel(quantum_info->endian,pixel,q);
3786 pixel=ScaleQuantumToLong(GetPixelOpacity(p));
3787 q=PopLongPixel(quantum_info->endian,pixel,q);
3789 q+=(ptrdiff_t) quantum_info->pad;
3795 if (quantum_info->format == FloatingPointQuantumFormat)
3800 for (x=0; x < (ssize_t) number_pixels; x++)
3802 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelRed(p),q);
3803 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelGreen(p),q);
3804 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelBlue(p),q);
3805 pixel=(double) GetPixelOpacity(p);
3806 q=PopQuantumDoublePixel(quantum_info,pixel,q);
3808 q+=(ptrdiff_t) quantum_info->pad;
3816 range=GetQuantumRange(quantum_info->depth);
3817 for (x=0; x < (ssize_t) number_pixels; x++)
3819 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(p),
3821 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(p),
3823 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(p),
3825 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelOpacity(p),
3828 q+=(ptrdiff_t) quantum_info->pad;
3835MagickExport
size_t ExportQuantumPixels(
const Image *image,
3837 const QuantumType quantum_type,
unsigned char *magick_restrict pixels,
3847 *magick_restrict indexes;
3861 assert(image != (
Image *) NULL);
3862 assert(image->signature == MagickCoreSignature);
3863 if (IsEventLogging() != MagickFalse)
3864 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",image->filename);
3866 assert(quantum_info->signature == MagickCoreSignature);
3867 if (pixels == (
unsigned char *) NULL)
3868 pixels=GetQuantumPixels(quantum_info);
3871 number_pixels=GetImageExtent(image);
3872 p=GetVirtualPixelQueue(image);
3873 indexes=GetVirtualIndexQueue(image);
3877 number_pixels=GetCacheViewExtent(image_view);
3878 p=GetCacheViewVirtualPixelQueue(image_view);
3879 indexes=GetCacheViewVirtualIndexQueue(image_view);
3881 if (quantum_info->alpha_type == AssociatedQuantumAlpha)
3890 q=GetAuthenticPixelQueue(image);
3892 q=(
PixelPacket *) GetCacheViewVirtualPixelQueue(image_view);
3893 for (x=0; x < (ssize_t) image->columns; x++)
3895 alpha=QuantumScale*(MagickRealType) GetPixelAlpha(q);
3896 SetPixelRed(q,ClampToQuantum(alpha*(MagickRealType) GetPixelRed(q)));
3897 SetPixelGreen(q,ClampToQuantum(alpha*(MagickRealType)
3899 SetPixelBlue(q,ClampToQuantum(alpha*(MagickRealType) GetPixelBlue(q)));
3903 if ((quantum_type == CbYCrQuantum) || (quantum_type == CbYCrAQuantum))
3912 q=GetAuthenticPixelQueue(image);
3914 q=(
PixelPacket *) GetCacheViewVirtualPixelQueue(image_view);
3915 for (x=0; x < (ssize_t) number_pixels; x++)
3917 quantum=GetPixelRed(q);
3918 SetPixelRed(q,GetPixelGreen(q));
3919 SetPixelGreen(q,quantum);
3926 extent=GetQuantumExtent(image,quantum_info,quantum_type);
3927 switch (quantum_type)
3931 ExportAlphaQuantum((
QuantumInfo *) quantum_info,number_pixels,p,q);
3936 ExportBGRQuantum((
QuantumInfo *) quantum_info,number_pixels,p,q);
3941 ExportBGRAQuantum((
QuantumInfo *) quantum_info,number_pixels,p,q);
3946 ExportBGROQuantum((
QuantumInfo *) quantum_info,number_pixels,p,q);
3951 ExportBlackQuantum(image,(
QuantumInfo *) quantum_info,number_pixels,p,
3952 indexes,q,exception);
3958 ExportBlueQuantum((
QuantumInfo *) quantum_info,number_pixels,p,q);
3963 ExportCbYCrYQuantum((
QuantumInfo *) quantum_info,number_pixels,p,q);
3968 ExportCMYKQuantum(image,(
QuantumInfo *) quantum_info,number_pixels,p,
3969 indexes,q,exception);
3974 ExportCMYKAQuantum(image,(
QuantumInfo *) quantum_info,number_pixels,p,
3975 indexes,q,exception);
3980 ExportCMYKOQuantum(image,(
QuantumInfo *) quantum_info,number_pixels,p,
3981 indexes,q,exception);
3986 ExportGrayQuantum(image,(
QuantumInfo *) quantum_info,number_pixels,p,q);
3989 case GrayAlphaQuantum:
3991 ExportGrayAlphaQuantum(image,(
QuantumInfo *) quantum_info,number_pixels,
3996 case MagentaQuantum:
3998 ExportGreenQuantum((
QuantumInfo *) quantum_info,number_pixels,p,q);
4003 ExportIndexQuantum(image,(
QuantumInfo *) quantum_info,number_pixels,p,
4004 indexes,q,exception);
4007 case IndexAlphaQuantum:
4009 ExportIndexAlphaQuantum(image,(
QuantumInfo *) quantum_info,number_pixels,
4010 p,indexes,q,exception);
4013 case OpacityQuantum:
4015 ExportOpacityQuantum((
QuantumInfo *) quantum_info,number_pixels,p,q);
4021 ExportRedQuantum((
QuantumInfo *) quantum_info,number_pixels,p,q);
4027 ExportRGBQuantum((
QuantumInfo *) quantum_info,number_pixels,p,q);
4033 ExportRGBAQuantum((
QuantumInfo *) quantum_info,number_pixels,p,q);
4038 ExportRGBOQuantum((
QuantumInfo *) quantum_info,number_pixels,p,q);
4044 if ((quantum_type == CbYCrQuantum) || (quantum_type == CbYCrAQuantum))
4053 q=GetAuthenticPixelQueue(image);
4055 q=(
PixelPacket *) GetCacheViewVirtualPixelQueue(image_view);
4056 for (x=0; x < (ssize_t) number_pixels; x++)
4058 quantum=GetPixelRed(q);
4059 SetPixelRed(q,GetPixelGreen(q));
4060 SetPixelGreen(q,quantum);