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"
112static inline unsigned char *PopQuantumDoublePixel(QuantumInfo *quantum_info,
113 const double pixel,
unsigned char *magick_restrict pixels)
121 (void) memset(quantum,0,
sizeof(quantum));
122 p=(
double *) quantum;
123 *p=(double) (pixel*quantum_info->state.inverse_scale+quantum_info->minimum);
124 if (quantum_info->endian == LSBEndian)
126 *pixels++=quantum[0];
127 *pixels++=quantum[1];
128 *pixels++=quantum[2];
129 *pixels++=quantum[3];
130 *pixels++=quantum[4];
131 *pixels++=quantum[5];
132 *pixels++=quantum[6];
133 *pixels++=quantum[7];
136 *pixels++=quantum[7];
137 *pixels++=quantum[6];
138 *pixels++=quantum[5];
139 *pixels++=quantum[4];
140 *pixels++=quantum[3];
141 *pixels++=quantum[2];
142 *pixels++=quantum[1];
143 *pixels++=quantum[0];
147static inline unsigned char *PopQuantumFloatPixel(QuantumInfo *quantum_info,
148 const float pixel,
unsigned char *magick_restrict pixels)
156 (void) memset(quantum,0,
sizeof(quantum));
158 *p=(float) ((
double) pixel*quantum_info->state.inverse_scale+
159 quantum_info->minimum);
160 if (quantum_info->endian == LSBEndian)
162 *pixels++=quantum[0];
163 *pixels++=quantum[1];
164 *pixels++=quantum[2];
165 *pixels++=quantum[3];
168 *pixels++=quantum[3];
169 *pixels++=quantum[2];
170 *pixels++=quantum[1];
171 *pixels++=quantum[0];
175static inline unsigned char *PopQuantumPixel(QuantumInfo *quantum_info,
176 const QuantumAny pixel,
unsigned char *magick_restrict pixels)
184 if (quantum_info->state.bits == 0UL)
185 quantum_info->state.bits=8U;
186 for (i=(ssize_t) quantum_info->depth; i > 0L; )
188 quantum_bits=(size_t) i;
189 if (quantum_bits > quantum_info->state.bits)
190 quantum_bits=quantum_info->state.bits;
191 i-=(ssize_t) quantum_bits;
194 if (quantum_info->state.bits == 8UL)
196 quantum_info->state.bits-=quantum_bits;
197 *pixels|=(((pixel >> i) &~ (((QuantumAny) ~0UL) << quantum_bits)) <<
198 quantum_info->state.bits);
199 if (quantum_info->state.bits == 0UL)
202 quantum_info->state.bits=8UL;
208static inline unsigned char *PopQuantumLongPixel(QuantumInfo *quantum_info,
209 const size_t pixel,
unsigned char *magick_restrict pixels)
217 if (quantum_info->state.bits == 0U)
218 quantum_info->state.bits=32UL;
219 for (i=(ssize_t) quantum_info->depth; i > 0; )
221 quantum_bits=(size_t) i;
222 if (quantum_bits > quantum_info->state.bits)
223 quantum_bits=quantum_info->state.bits;
224 quantum_info->state.pixel|=(((pixel >> ((ssize_t) quantum_info->depth-i)) &
225 quantum_info->state.mask[quantum_bits]) << (32U-
226 quantum_info->state.bits));
227 i-=(ssize_t) quantum_bits;
228 quantum_info->state.bits-=quantum_bits;
229 if (quantum_info->state.bits == 0U)
231 pixels=PopLongPixel(quantum_info->endian,quantum_info->state.pixel,
233 quantum_info->state.pixel=0U;
234 quantum_info->state.bits=32U;
240static void ExportPixelChannel(
const Image *image,QuantumInfo *quantum_info,
241 const MagickSizeType number_pixels,
const Quantum *magick_restrict p,
242 unsigned char *magick_restrict q,PixelChannel channel)
250 p+=(ptrdiff_t) image->channel_map[channel].offset;
251 switch (quantum_info->depth)
258 for (x=0; x < (ssize_t) number_pixels; x++)
260 pixel=ScaleQuantumToChar(*p);
261 q=PopCharPixel(pixel,q);
262 p+=(ptrdiff_t) GetPixelChannels(image);
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*(*p));
277 q=PopShortPixel(quantum_info->endian,pixel,q);
278 p+=(ptrdiff_t) GetPixelChannels(image);
279 q+=(ptrdiff_t) quantum_info->pad;
283 for (x=0; x < (ssize_t) number_pixels; x++)
285 pixel=ScaleQuantumToShort(*p);
286 q=PopShortPixel(quantum_info->endian,pixel,q);
287 p+=(ptrdiff_t) GetPixelChannels(image);
288 q+=(ptrdiff_t) quantum_info->pad;
297 if (quantum_info->format == FloatingPointQuantumFormat)
299 for (x=0; x < (ssize_t) number_pixels; x++)
301 q=PopQuantumFloatPixel(quantum_info,(
float) *p,q);
302 p+=(ptrdiff_t) GetPixelChannels(image);
303 q+=(ptrdiff_t) quantum_info->pad;
307 for (x=0; x < (ssize_t) number_pixels; x++)
309 pixel=ScaleQuantumToLong(*p);
310 q=PopLongPixel(quantum_info->endian,pixel,q);
311 p+=(ptrdiff_t) GetPixelChannels(image);
312 q+=(ptrdiff_t) quantum_info->pad;
318 if (quantum_info->format == FloatingPointQuantumFormat)
320 for (x=0; x < (ssize_t) number_pixels; x++)
322 q=PopQuantumDoublePixel(quantum_info,(
double) *p,q);
323 p+=(ptrdiff_t) GetPixelChannels(image);
324 q+=(ptrdiff_t) quantum_info->pad;
332 range=GetQuantumRange(quantum_info->depth);
333 for (x=0; x < (ssize_t) number_pixels; x++)
335 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(*p,range),q);
336 p+=(ptrdiff_t) GetPixelChannels(image);
337 q+=(ptrdiff_t) quantum_info->pad;
344static void ExportAlphaQuantum(
const Image *image,QuantumInfo *quantum_info,
345 const MagickSizeType number_pixels,
const Quantum *magick_restrict p,
346 unsigned char *magick_restrict q,ExceptionInfo *exception)
348 if (image->alpha_trait == UndefinedPixelTrait)
350 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
351 "ImageDoesNotHaveAnAlphaChannel",
"`%s'",image->filename);
354 ExportPixelChannel(image,quantum_info,number_pixels,p,q,AlphaPixelChannel);
357static void ExportBGRQuantum(
const Image *image,QuantumInfo *quantum_info,
358 const MagickSizeType number_pixels,
const Quantum *magick_restrict p,
359 unsigned char *magick_restrict q)
370 switch (quantum_info->depth)
374 for (x=0; x < (ssize_t) number_pixels; x++)
376 q=PopCharPixel(ScaleQuantumToChar(GetPixelBlue(image,p)),q);
377 q=PopCharPixel(ScaleQuantumToChar(GetPixelGreen(image,p)),q);
378 q=PopCharPixel(ScaleQuantumToChar(GetPixelRed(image,p)),q);
379 p+=(ptrdiff_t) GetPixelChannels(image);
380 q+=(ptrdiff_t) quantum_info->pad;
389 range=GetQuantumRange(quantum_info->depth);
390 if (quantum_info->pack == MagickFalse)
392 for (x=0; x < (ssize_t) number_pixels; x++)
394 pixel=(
unsigned int) (
395 ScaleQuantumToAny(GetPixelRed(image,p),range) << 22 |
396 ScaleQuantumToAny(GetPixelGreen(image,p),range) << 12 |
397 ScaleQuantumToAny(GetPixelBlue(image,p),range) << 2);
398 q=PopLongPixel(quantum_info->endian,pixel,q);
399 p+=(ptrdiff_t) GetPixelChannels(image);
400 q+=(ptrdiff_t) quantum_info->pad;
404 if (quantum_info->quantum == 32UL)
406 for (x=0; x < (ssize_t) number_pixels; x++)
408 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
409 q=PopQuantumLongPixel(quantum_info,pixel,q);
410 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
412 q=PopQuantumLongPixel(quantum_info,pixel,q);
413 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
414 q=PopQuantumLongPixel(quantum_info,pixel,q);
415 p+=(ptrdiff_t) GetPixelChannels(image);
416 q+=(ptrdiff_t) quantum_info->pad;
420 for (x=0; x < (ssize_t) number_pixels; x++)
422 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
423 q=PopQuantumPixel(quantum_info,pixel,q);
424 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
425 q=PopQuantumPixel(quantum_info,pixel,q);
426 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
427 q=PopQuantumPixel(quantum_info,pixel,q);
428 p+=(ptrdiff_t) GetPixelChannels(image);
429 q+=(ptrdiff_t) quantum_info->pad;
438 range=GetQuantumRange(quantum_info->depth);
439 if (quantum_info->pack == MagickFalse)
441 for (x=0; x < (ssize_t) (3*number_pixels-1); x+=2)
448 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),
454 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
460 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),
462 p+=(ptrdiff_t) GetPixelChannels(image);
466 q=PopShortPixel(quantum_info->endian,(
unsigned short) (pixel << 4),
473 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),
479 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
485 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),
487 p+=(ptrdiff_t) GetPixelChannels(image);
491 q=PopShortPixel(quantum_info->endian,(
unsigned short) (pixel << 4),
493 q+=(ptrdiff_t) quantum_info->pad;
495 for (bit=0; bit < (ssize_t) (3*number_pixels % 2); bit++)
502 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),
508 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
514 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),
516 p+=(ptrdiff_t) GetPixelChannels(image);
520 q=PopShortPixel(quantum_info->endian,(
unsigned short) (pixel << 4),
522 q+=(ptrdiff_t) quantum_info->pad;
525 p+=(ptrdiff_t) GetPixelChannels(image);
528 if (quantum_info->quantum == 32UL)
530 for (x=0; x < (ssize_t) number_pixels; x++)
532 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
533 q=PopQuantumLongPixel(quantum_info,pixel,q);
534 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
536 q=PopQuantumLongPixel(quantum_info,pixel,q);
537 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
538 q=PopQuantumLongPixel(quantum_info,pixel,q);
539 p+=(ptrdiff_t) GetPixelChannels(image);
540 q+=(ptrdiff_t) quantum_info->pad;
544 for (x=0; x < (ssize_t) number_pixels; x++)
546 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
547 q=PopQuantumPixel(quantum_info,pixel,q);
548 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
549 q=PopQuantumPixel(quantum_info,pixel,q);
550 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
551 q=PopQuantumPixel(quantum_info,pixel,q);
552 p+=(ptrdiff_t) GetPixelChannels(image);
553 q+=(ptrdiff_t) quantum_info->pad;
562 if (quantum_info->format == FloatingPointQuantumFormat)
564 for (x=0; x < (ssize_t) number_pixels; x++)
566 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
567 GetPixelBlue(image,p));
568 q=PopShortPixel(quantum_info->endian,pixel,q);
569 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
570 GetPixelGreen(image,p));
571 q=PopShortPixel(quantum_info->endian,pixel,q);
572 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
573 GetPixelRed(image,p));
574 q=PopShortPixel(quantum_info->endian,pixel,q);
575 p+=(ptrdiff_t) GetPixelChannels(image);
576 q+=(ptrdiff_t) quantum_info->pad;
580 for (x=0; x < (ssize_t) number_pixels; x++)
582 pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
583 q=PopShortPixel(quantum_info->endian,pixel,q);
584 pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
585 q=PopShortPixel(quantum_info->endian,pixel,q);
586 pixel=ScaleQuantumToShort(GetPixelRed(image,p));
587 q=PopShortPixel(quantum_info->endian,pixel,q);
588 p+=(ptrdiff_t) GetPixelChannels(image);
589 q+=(ptrdiff_t) quantum_info->pad;
598 if (quantum_info->format == FloatingPointQuantumFormat)
600 for (x=0; x < (ssize_t) number_pixels; x++)
602 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelRed(image,p),q);
603 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelGreen(image,p),q);
604 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelBlue(image,p),q);
605 p+=(ptrdiff_t) GetPixelChannels(image);
606 q+=(ptrdiff_t) quantum_info->pad;
610 for (x=0; x < (ssize_t) number_pixels; x++)
612 pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
613 q=PopLongPixel(quantum_info->endian,pixel,q);
614 pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
615 q=PopLongPixel(quantum_info->endian,pixel,q);
616 pixel=ScaleQuantumToLong(GetPixelRed(image,p));
617 q=PopLongPixel(quantum_info->endian,pixel,q);
618 p+=(ptrdiff_t) GetPixelChannels(image);
619 q+=(ptrdiff_t) quantum_info->pad;
625 if (quantum_info->format == FloatingPointQuantumFormat)
627 for (x=0; x < (ssize_t) number_pixels; x++)
629 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelRed(image,p),q);
630 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelGreen(image,p),q);
631 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelBlue(image,p),q);
632 p+=(ptrdiff_t) GetPixelChannels(image);
633 q+=(ptrdiff_t) quantum_info->pad;
641 range=GetQuantumRange(quantum_info->depth);
642 for (x=0; x < (ssize_t) number_pixels; x++)
644 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
646 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
648 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
650 p+=(ptrdiff_t) GetPixelChannels(image);
651 q+=(ptrdiff_t) quantum_info->pad;
658static void ExportBGRAQuantum(
const Image *image,QuantumInfo *quantum_info,
659 const MagickSizeType number_pixels,
const Quantum *magick_restrict p,
660 unsigned char *magick_restrict q)
668 switch (quantum_info->depth)
675 for (x=0; x < (ssize_t) number_pixels; x++)
677 pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
678 q=PopCharPixel(pixel,q);
679 pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
680 q=PopCharPixel(pixel,q);
681 pixel=ScaleQuantumToChar(GetPixelRed(image,p));
682 q=PopCharPixel(pixel,q);
683 pixel=ScaleQuantumToChar(GetPixelAlpha(image,p));
684 q=PopCharPixel(pixel,q);
685 p+=(ptrdiff_t) GetPixelChannels(image);
686 q+=(ptrdiff_t) quantum_info->pad;
695 range=GetQuantumRange(quantum_info->depth);
696 if (quantum_info->pack == MagickFalse)
710 for (x=0; x < (ssize_t) number_pixels; x++)
712 for (i=0; i < 4; i++)
716 case 0: quantum=(size_t) GetPixelRed(image,p);
break;
717 case 1: quantum=(size_t) GetPixelGreen(image,p);
break;
718 case 2: quantum=(size_t) GetPixelBlue(image,p);
break;
719 case 3: quantum=(size_t) GetPixelAlpha(image,p);
break;
725 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
731 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
737 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
739 q=PopLongPixel(quantum_info->endian,pixel,q);
746 p+=(ptrdiff_t) GetPixelChannels(image);
747 q+=(ptrdiff_t) quantum_info->pad;
751 if (quantum_info->quantum == 32UL)
753 for (x=0; x < (ssize_t) number_pixels; x++)
755 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
756 q=PopQuantumLongPixel(quantum_info,pixel,q);
757 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
759 q=PopQuantumLongPixel(quantum_info,pixel,q);
760 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
761 q=PopQuantumLongPixel(quantum_info,pixel,q);
762 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelAlpha(image,p),
764 q=PopQuantumLongPixel(quantum_info,pixel,q);
765 p+=(ptrdiff_t) GetPixelChannels(image);
766 q+=(ptrdiff_t) quantum_info->pad;
770 for (x=0; x < (ssize_t) number_pixels; x++)
772 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
773 q=PopQuantumPixel(quantum_info,pixel,q);
774 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
775 q=PopQuantumPixel(quantum_info,pixel,q);
776 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
777 q=PopQuantumPixel(quantum_info,pixel,q);
778 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelAlpha(image,p),range);
779 q=PopQuantumPixel(quantum_info,pixel,q);
780 p+=(ptrdiff_t) GetPixelChannels(image);
781 q+=(ptrdiff_t) quantum_info->pad;
790 if (quantum_info->format == FloatingPointQuantumFormat)
792 for (x=0; x < (ssize_t) number_pixels; x++)
794 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
795 GetPixelBlue(image,p));
796 q=PopShortPixel(quantum_info->endian,pixel,q);
797 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
798 GetPixelGreen(image,p));
799 q=PopShortPixel(quantum_info->endian,pixel,q);
800 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
801 GetPixelRed(image,p));
802 q=PopShortPixel(quantum_info->endian,pixel,q);
803 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
804 GetPixelAlpha(image,p));
805 q=PopShortPixel(quantum_info->endian,pixel,q);
806 p+=(ptrdiff_t) GetPixelChannels(image);
807 q+=(ptrdiff_t) quantum_info->pad;
811 for (x=0; x < (ssize_t) number_pixels; x++)
813 pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
814 q=PopShortPixel(quantum_info->endian,pixel,q);
815 pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
816 q=PopShortPixel(quantum_info->endian,pixel,q);
817 pixel=ScaleQuantumToShort(GetPixelRed(image,p));
818 q=PopShortPixel(quantum_info->endian,pixel,q);
819 pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
820 q=PopShortPixel(quantum_info->endian,pixel,q);
821 p+=(ptrdiff_t) GetPixelChannels(image);
822 q+=(ptrdiff_t) quantum_info->pad;
831 if (quantum_info->format == FloatingPointQuantumFormat)
833 for (x=0; x < (ssize_t) number_pixels; x++)
838 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelRed(image,p),q);
839 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelGreen(image,p),q);
840 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelBlue(image,p),q);
841 float_pixel=(float) GetPixelAlpha(image,p);
842 q=PopQuantumFloatPixel(quantum_info,float_pixel,q);
843 p+=(ptrdiff_t) GetPixelChannels(image);
844 q+=(ptrdiff_t) quantum_info->pad;
848 for (x=0; x < (ssize_t) number_pixels; x++)
850 pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
851 q=PopLongPixel(quantum_info->endian,pixel,q);
852 pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
853 q=PopLongPixel(quantum_info->endian,pixel,q);
854 pixel=ScaleQuantumToLong(GetPixelRed(image,p));
855 q=PopLongPixel(quantum_info->endian,pixel,q);
856 pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
857 q=PopLongPixel(quantum_info->endian,pixel,q);
858 p+=(ptrdiff_t) GetPixelChannels(image);
859 q+=(ptrdiff_t) quantum_info->pad;
865 if (quantum_info->format == FloatingPointQuantumFormat)
870 for (x=0; x < (ssize_t) number_pixels; x++)
872 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelRed(image,p),q);
873 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelGreen(image,p),q);
874 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelBlue(image,p),q);
875 pixel=(double) GetPixelAlpha(image,p);
876 q=PopQuantumDoublePixel(quantum_info,pixel,q);
877 p+=(ptrdiff_t) GetPixelChannels(image);
878 q+=(ptrdiff_t) quantum_info->pad;
886 range=GetQuantumRange(quantum_info->depth);
887 for (x=0; x < (ssize_t) number_pixels; x++)
889 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
891 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
893 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
895 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
897 p+=(ptrdiff_t) GetPixelChannels(image);
898 q+=(ptrdiff_t) quantum_info->pad;
905static void ExportBGROQuantum(
const Image *image,QuantumInfo *quantum_info,
906 const MagickSizeType number_pixels,
const Quantum *magick_restrict p,
907 unsigned char *magick_restrict q)
915 switch (quantum_info->depth)
922 for (x=0; x < (ssize_t) number_pixels; x++)
924 pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
925 q=PopCharPixel(pixel,q);
926 pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
927 q=PopCharPixel(pixel,q);
928 pixel=ScaleQuantumToChar(GetPixelRed(image,p));
929 q=PopCharPixel(pixel,q);
930 pixel=ScaleQuantumToChar(GetPixelOpacity(image,p));
931 q=PopCharPixel(pixel,q);
932 p+=(ptrdiff_t) GetPixelChannels(image);
933 q+=(ptrdiff_t) quantum_info->pad;
942 range=GetQuantumRange(quantum_info->depth);
943 if (quantum_info->pack == MagickFalse)
957 for (x=0; x < (ssize_t) number_pixels; x++)
959 for (i=0; i < 4; i++)
963 case 0: quantum=(size_t) GetPixelRed(image,p);
break;
964 case 1: quantum=(size_t) GetPixelGreen(image,p);
break;
965 case 2: quantum=(size_t) GetPixelBlue(image,p);
break;
966 case 3: quantum=(size_t) GetPixelOpacity(image,p);
break;
972 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
978 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
984 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
986 q=PopLongPixel(quantum_info->endian,pixel,q);
993 p+=(ptrdiff_t) GetPixelChannels(image);
994 q+=(ptrdiff_t) quantum_info->pad;
998 if (quantum_info->quantum == 32UL)
1000 for (x=0; x < (ssize_t) number_pixels; x++)
1002 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
1003 q=PopQuantumLongPixel(quantum_info,pixel,q);
1004 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
1006 q=PopQuantumLongPixel(quantum_info,pixel,q);
1007 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
1008 q=PopQuantumLongPixel(quantum_info,pixel,q);
1009 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelOpacity(image,p),
1011 q=PopQuantumLongPixel(quantum_info,pixel,q);
1012 p+=(ptrdiff_t) GetPixelChannels(image);
1013 q+=(ptrdiff_t) quantum_info->pad;
1017 for (x=0; x < (ssize_t) number_pixels; x++)
1019 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
1020 q=PopQuantumPixel(quantum_info,pixel,q);
1021 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
1022 q=PopQuantumPixel(quantum_info,pixel,q);
1023 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
1024 q=PopQuantumPixel(quantum_info,pixel,q);
1025 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelOpacity(image,p),range);
1026 q=PopQuantumPixel(quantum_info,pixel,q);
1027 p+=(ptrdiff_t) GetPixelChannels(image);
1028 q+=(ptrdiff_t) quantum_info->pad;
1037 if (quantum_info->format == FloatingPointQuantumFormat)
1039 for (x=0; x < (ssize_t) number_pixels; x++)
1041 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
1042 GetPixelBlue(image,p));
1043 q=PopShortPixel(quantum_info->endian,pixel,q);
1044 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
1045 GetPixelGreen(image,p));
1046 q=PopShortPixel(quantum_info->endian,pixel,q);
1047 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
1048 GetPixelRed(image,p));
1049 q=PopShortPixel(quantum_info->endian,pixel,q);
1050 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
1051 GetPixelOpacity(image,p));
1052 q=PopShortPixel(quantum_info->endian,pixel,q);
1053 p+=(ptrdiff_t) GetPixelChannels(image);
1054 q+=(ptrdiff_t) quantum_info->pad;
1058 for (x=0; x < (ssize_t) number_pixels; x++)
1060 pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
1061 q=PopShortPixel(quantum_info->endian,pixel,q);
1062 pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
1063 q=PopShortPixel(quantum_info->endian,pixel,q);
1064 pixel=ScaleQuantumToShort(GetPixelRed(image,p));
1065 q=PopShortPixel(quantum_info->endian,pixel,q);
1066 pixel=ScaleQuantumToShort(GetPixelOpacity(image,p));
1067 q=PopShortPixel(quantum_info->endian,pixel,q);
1068 p+=(ptrdiff_t) GetPixelChannels(image);
1069 q+=(ptrdiff_t) quantum_info->pad;
1078 if (quantum_info->format == FloatingPointQuantumFormat)
1080 for (x=0; x < (ssize_t) number_pixels; x++)
1085 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelRed(image,p),q);
1086 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelGreen(image,p),q);
1087 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelBlue(image,p),q);
1088 float_pixel=(float) GetPixelOpacity(image,p);
1089 q=PopQuantumFloatPixel(quantum_info,float_pixel,q);
1090 p+=(ptrdiff_t) GetPixelChannels(image);
1091 q+=(ptrdiff_t) quantum_info->pad;
1095 for (x=0; x < (ssize_t) number_pixels; x++)
1097 pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
1098 q=PopLongPixel(quantum_info->endian,pixel,q);
1099 pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
1100 q=PopLongPixel(quantum_info->endian,pixel,q);
1101 pixel=ScaleQuantumToLong(GetPixelRed(image,p));
1102 q=PopLongPixel(quantum_info->endian,pixel,q);
1103 pixel=ScaleQuantumToLong(GetPixelOpacity(image,p));
1104 q=PopLongPixel(quantum_info->endian,pixel,q);
1105 p+=(ptrdiff_t) GetPixelChannels(image);
1106 q+=(ptrdiff_t) quantum_info->pad;
1112 if (quantum_info->format == FloatingPointQuantumFormat)
1117 for (x=0; x < (ssize_t) number_pixels; x++)
1119 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelRed(image,p),q);
1120 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelGreen(image,p),q);
1121 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelBlue(image,p),q);
1122 pixel=(double) GetPixelOpacity(image,p);
1123 q=PopQuantumDoublePixel(quantum_info,pixel,q);
1124 p+=(ptrdiff_t) GetPixelChannels(image);
1125 q+=(ptrdiff_t) quantum_info->pad;
1133 range=GetQuantumRange(quantum_info->depth);
1134 for (x=0; x < (ssize_t) number_pixels; x++)
1136 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
1138 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
1140 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
1142 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelOpacity(image,p),
1144 p+=(ptrdiff_t) GetPixelChannels(image);
1145 q+=(ptrdiff_t) quantum_info->pad;
1152static void ExportBlackQuantum(
const Image *image,QuantumInfo *quantum_info,
1153 const MagickSizeType number_pixels,
const Quantum *magick_restrict p,
1154 unsigned char *magick_restrict q,ExceptionInfo *exception)
1156 if (image->colorspace != CMYKColorspace)
1158 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1159 "ColorSeparatedImageRequired",
"`%s'",image->filename);
1162 ExportPixelChannel(image,quantum_info,number_pixels,p,q,BlackPixelChannel);
1165static void ExportCbYCrYQuantum(
const Image *image,QuantumInfo *quantum_info,
1166 const MagickSizeType number_pixels,
const Quantum *magick_restrict p,
1167 unsigned char *magick_restrict q)
1187 switch (quantum_info->depth)
1191 if (quantum_info->pack == MagickFalse)
1193 for (x=0; x < (ssize_t) number_pixels; x+=2)
1195 for (i=0; i < 4; i++)
1201 quantum=(size_t) GetPixelRed(image,p);
1206 quantum=(size_t) GetPixelGreen(image,p);
1211 quantum=(size_t) GetPixelBlue(image,p);
1215 cbcr[i]=(Quantum) quantum;
1218 pixel=(
unsigned int) ((
size_t) (cbcr[1]) << 22 | (
size_t)
1219 (cbcr[0]) << 12 | (
size_t) (cbcr[2]) << 2);
1220 q=PopLongPixel(quantum_info->endian,pixel,q);
1221 p+=(ptrdiff_t) GetPixelChannels(image);
1222 pixel=(
unsigned int) ((
size_t) (cbcr[3]) << 22 | (
size_t)
1223 (cbcr[0]) << 12 | (
size_t) (cbcr[2]) << 2);
1224 q=PopLongPixel(quantum_info->endian,pixel,q);
1225 p+=(ptrdiff_t) GetPixelChannels(image);
1226 q+=(ptrdiff_t) quantum_info->pad;
1237 for (x=0; x < (ssize_t) number_pixels; x+=2)
1239 for (i=0; i < 4; i++)
1245 quantum=(size_t) GetPixelRed(image,p);
1250 quantum=(size_t) GetPixelGreen(image,p);
1255 quantum=(size_t) GetPixelBlue(image,p);
1259 cbcr[i]=(Quantum) quantum;
1262 range=GetQuantumRange(quantum_info->depth);
1263 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(cbcr[1],range),q);
1264 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(cbcr[0],range),q);
1265 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(cbcr[2],range),q);
1266 p+=(ptrdiff_t) GetPixelChannels(image);
1267 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(cbcr[3],range),q);
1268 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(cbcr[0],range),q);
1269 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(cbcr[2],range),q);
1270 p+=(ptrdiff_t) GetPixelChannels(image);
1271 q+=(ptrdiff_t) quantum_info->pad;
1278static void ExportCMYKQuantum(
const Image *image,QuantumInfo *quantum_info,
1279 const MagickSizeType number_pixels,
const Quantum *magick_restrict p,
1280 unsigned char *magick_restrict q,ExceptionInfo *exception)
1285 if (image->colorspace != CMYKColorspace)
1287 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1288 "ColorSeparatedImageRequired",
"`%s'",image->filename);
1291 switch (quantum_info->depth)
1298 for (x=0; x < (ssize_t) number_pixels; x++)
1300 pixel=ScaleQuantumToChar(GetPixelRed(image,p));
1301 q=PopCharPixel(pixel,q);
1302 pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
1303 q=PopCharPixel(pixel,q);
1304 pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
1305 q=PopCharPixel(pixel,q);
1306 pixel=ScaleQuantumToChar(GetPixelBlack(image,p));
1307 q=PopCharPixel(pixel,q);
1308 p+=(ptrdiff_t) GetPixelChannels(image);
1309 q+=(ptrdiff_t) quantum_info->pad;
1318 if (quantum_info->format == FloatingPointQuantumFormat)
1320 for (x=0; x < (ssize_t) number_pixels; x++)
1322 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
1323 GetPixelRed(image,p));
1324 q=PopShortPixel(quantum_info->endian,pixel,q);
1325 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
1326 GetPixelGreen(image,p));
1327 q=PopShortPixel(quantum_info->endian,pixel,q);
1328 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
1329 GetPixelBlue(image,p));
1330 q=PopShortPixel(quantum_info->endian,pixel,q);
1331 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
1332 GetPixelBlack(image,p));
1333 q=PopShortPixel(quantum_info->endian,pixel,q);
1334 p+=(ptrdiff_t) GetPixelChannels(image);
1335 q+=(ptrdiff_t) quantum_info->pad;
1339 for (x=0; x < (ssize_t) number_pixels; x++)
1341 pixel=ScaleQuantumToShort(GetPixelRed(image,p));
1342 q=PopShortPixel(quantum_info->endian,pixel,q);
1343 pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
1344 q=PopShortPixel(quantum_info->endian,pixel,q);
1345 pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
1346 q=PopShortPixel(quantum_info->endian,pixel,q);
1347 pixel=ScaleQuantumToShort(GetPixelBlack(image,p));
1348 q=PopShortPixel(quantum_info->endian,pixel,q);
1349 p+=(ptrdiff_t) GetPixelChannels(image);
1350 q+=(ptrdiff_t) quantum_info->pad;
1359 if (quantum_info->format == FloatingPointQuantumFormat)
1361 for (x=0; x < (ssize_t) number_pixels; x++)
1363 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelRed(image,p),q);
1364 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelGreen(image,p),q);
1365 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelBlue(image,p),q);
1366 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelBlack(image,p),q);
1367 p+=(ptrdiff_t) GetPixelChannels(image);
1368 q+=(ptrdiff_t) quantum_info->pad;
1372 for (x=0; x < (ssize_t) number_pixels; x++)
1374 pixel=ScaleQuantumToLong(GetPixelRed(image,p));
1375 q=PopLongPixel(quantum_info->endian,pixel,q);
1376 pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
1377 q=PopLongPixel(quantum_info->endian,pixel,q);
1378 pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
1379 q=PopLongPixel(quantum_info->endian,pixel,q);
1380 pixel=ScaleQuantumToLong(GetPixelBlack(image,p));
1381 q=PopLongPixel(quantum_info->endian,pixel,q);
1382 p+=(ptrdiff_t) GetPixelChannels(image);
1383 q+=(ptrdiff_t) quantum_info->pad;
1389 if (quantum_info->format == FloatingPointQuantumFormat)
1391 for (x=0; x < (ssize_t) number_pixels; x++)
1393 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelRed(image,p),q);
1394 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelGreen(image,p),q);
1395 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelBlue(image,p),q);
1396 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelBlack(image,p),q);
1397 p+=(ptrdiff_t) GetPixelChannels(image);
1398 q+=(ptrdiff_t) quantum_info->pad;
1409 range=GetQuantumRange(quantum_info->depth);
1410 for (x=0; x < (ssize_t) number_pixels; x++)
1412 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
1414 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
1416 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
1418 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlack(image,p),
1420 p+=(ptrdiff_t) GetPixelChannels(image);
1421 q+=(ptrdiff_t) quantum_info->pad;
1428static void ExportCMYKAQuantum(
const Image *image,QuantumInfo *quantum_info,
1429 const MagickSizeType number_pixels,
const Quantum *magick_restrict p,
1430 unsigned char *magick_restrict q,ExceptionInfo *exception)
1435 if (image->colorspace != CMYKColorspace)
1437 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1438 "ColorSeparatedImageRequired",
"`%s'",image->filename);
1441 switch (quantum_info->depth)
1448 for (x=0; x < (ssize_t) number_pixels; x++)
1450 pixel=ScaleQuantumToChar(GetPixelRed(image,p));
1451 q=PopCharPixel(pixel,q);
1452 pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
1453 q=PopCharPixel(pixel,q);
1454 pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
1455 q=PopCharPixel(pixel,q);
1456 pixel=ScaleQuantumToChar(GetPixelBlack(image,p));
1457 q=PopCharPixel(pixel,q);
1458 pixel=ScaleQuantumToChar(GetPixelAlpha(image,p));
1459 q=PopCharPixel(pixel,q);
1460 p+=(ptrdiff_t) GetPixelChannels(image);
1461 q+=(ptrdiff_t) quantum_info->pad;
1470 if (quantum_info->format == FloatingPointQuantumFormat)
1472 for (x=0; x < (ssize_t) number_pixels; x++)
1474 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
1475 GetPixelRed(image,p));
1476 q=PopShortPixel(quantum_info->endian,pixel,q);
1477 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
1478 GetPixelGreen(image,p));
1479 q=PopShortPixel(quantum_info->endian,pixel,q);
1480 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
1481 GetPixelBlue(image,p));
1482 q=PopShortPixel(quantum_info->endian,pixel,q);
1483 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
1484 GetPixelBlack(image,p));
1485 q=PopShortPixel(quantum_info->endian,pixel,q);
1486 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
1487 GetPixelAlpha(image,p));
1488 q=PopShortPixel(quantum_info->endian,pixel,q);
1489 p+=(ptrdiff_t) GetPixelChannels(image);
1490 q+=(ptrdiff_t) quantum_info->pad;
1494 for (x=0; x < (ssize_t) number_pixels; x++)
1496 pixel=ScaleQuantumToShort(GetPixelRed(image,p));
1497 q=PopShortPixel(quantum_info->endian,pixel,q);
1498 pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
1499 q=PopShortPixel(quantum_info->endian,pixel,q);
1500 pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
1501 q=PopShortPixel(quantum_info->endian,pixel,q);
1502 pixel=ScaleQuantumToShort(GetPixelBlack(image,p));
1503 q=PopShortPixel(quantum_info->endian,pixel,q);
1504 pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
1505 q=PopShortPixel(quantum_info->endian,pixel,q);
1506 p+=(ptrdiff_t) GetPixelChannels(image);
1507 q+=(ptrdiff_t) quantum_info->pad;
1516 if (quantum_info->format == FloatingPointQuantumFormat)
1518 for (x=0; x < (ssize_t) number_pixels; x++)
1520 q=PopQuantumFloatPixel(quantum_info,(
float)
1521 GetPixelRed(image,p),q);
1522 q=PopQuantumFloatPixel(quantum_info,(
float)
1523 GetPixelGreen(image,p),q);
1524 q=PopQuantumFloatPixel(quantum_info,(
float)
1525 GetPixelBlue(image,p),q);
1526 q=PopQuantumFloatPixel(quantum_info,(
float)
1527 GetPixelBlack(image,p),q);
1528 q=PopQuantumFloatPixel(quantum_info,(
float)
1529 GetPixelAlpha(image,p),q);
1530 p+=(ptrdiff_t) GetPixelChannels(image);
1531 q+=(ptrdiff_t) quantum_info->pad;
1535 for (x=0; x < (ssize_t) number_pixels; x++)
1537 pixel=ScaleQuantumToLong(GetPixelRed(image,p));
1538 q=PopLongPixel(quantum_info->endian,pixel,q);
1539 pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
1540 q=PopLongPixel(quantum_info->endian,pixel,q);
1541 pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
1542 q=PopLongPixel(quantum_info->endian,pixel,q);
1543 pixel=ScaleQuantumToLong(GetPixelBlack(image,p));
1544 q=PopLongPixel(quantum_info->endian,pixel,q);
1545 pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
1546 q=PopLongPixel(quantum_info->endian,pixel,q);
1547 p+=(ptrdiff_t) GetPixelChannels(image);
1548 q+=(ptrdiff_t) quantum_info->pad;
1554 if (quantum_info->format == FloatingPointQuantumFormat)
1556 for (x=0; x < (ssize_t) number_pixels; x++)
1558 q=PopQuantumDoublePixel(quantum_info,(
double)
1559 GetPixelRed(image,p),q);
1560 q=PopQuantumDoublePixel(quantum_info,(
double)
1561 GetPixelGreen(image,p),q);
1562 q=PopQuantumDoublePixel(quantum_info,(
double)
1563 GetPixelBlue(image,p),q);
1564 q=PopQuantumDoublePixel(quantum_info,(
double)
1565 GetPixelBlack(image,p),q);
1566 q=PopQuantumDoublePixel(quantum_info,(
double)
1567 GetPixelAlpha(image,p),q);
1568 p+=(ptrdiff_t) GetPixelChannels(image);
1569 q+=(ptrdiff_t) quantum_info->pad;
1580 range=GetQuantumRange(quantum_info->depth);
1581 for (x=0; x < (ssize_t) number_pixels; x++)
1583 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
1585 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
1587 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
1589 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlack(image,p),
1591 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
1593 p+=(ptrdiff_t) GetPixelChannels(image);
1594 q+=(ptrdiff_t) quantum_info->pad;
1601static void ExportCMYKOQuantum(
const Image *image,QuantumInfo *quantum_info,
1602 const MagickSizeType number_pixels,
const Quantum *magick_restrict p,
1603 unsigned char *magick_restrict q,ExceptionInfo *exception)
1608 if (image->colorspace != CMYKColorspace)
1610 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1611 "ColorSeparatedImageRequired",
"`%s'",image->filename);
1614 switch (quantum_info->depth)
1621 for (x=0; x < (ssize_t) number_pixels; x++)
1623 pixel=ScaleQuantumToChar(GetPixelRed(image,p));
1624 q=PopCharPixel(pixel,q);
1625 pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
1626 q=PopCharPixel(pixel,q);
1627 pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
1628 q=PopCharPixel(pixel,q);
1629 pixel=ScaleQuantumToChar(GetPixelBlack(image,p));
1630 q=PopCharPixel(pixel,q);
1631 pixel=ScaleQuantumToChar(GetPixelOpacity(image,p));
1632 q=PopCharPixel(pixel,q);
1633 p+=(ptrdiff_t) GetPixelChannels(image);
1634 q+=(ptrdiff_t) quantum_info->pad;
1643 if (quantum_info->format == FloatingPointQuantumFormat)
1645 for (x=0; x < (ssize_t) number_pixels; x++)
1647 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
1648 GetPixelRed(image,p));
1649 q=PopShortPixel(quantum_info->endian,pixel,q);
1650 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
1651 GetPixelGreen(image,p));
1652 q=PopShortPixel(quantum_info->endian,pixel,q);
1653 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
1654 GetPixelBlue(image,p));
1655 q=PopShortPixel(quantum_info->endian,pixel,q);
1656 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
1657 GetPixelBlack(image,p));
1658 q=PopShortPixel(quantum_info->endian,pixel,q);
1659 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
1660 GetPixelOpacity(image,p));
1661 q=PopShortPixel(quantum_info->endian,pixel,q);
1662 p+=(ptrdiff_t) GetPixelChannels(image);
1663 q+=(ptrdiff_t) quantum_info->pad;
1667 for (x=0; x < (ssize_t) number_pixels; x++)
1669 pixel=ScaleQuantumToShort(GetPixelRed(image,p));
1670 q=PopShortPixel(quantum_info->endian,pixel,q);
1671 pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
1672 q=PopShortPixel(quantum_info->endian,pixel,q);
1673 pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
1674 q=PopShortPixel(quantum_info->endian,pixel,q);
1675 pixel=ScaleQuantumToShort(GetPixelBlack(image,p));
1676 q=PopShortPixel(quantum_info->endian,pixel,q);
1677 pixel=ScaleQuantumToShort(GetPixelOpacity(image,p));
1678 q=PopShortPixel(quantum_info->endian,pixel,q);
1679 p+=(ptrdiff_t) GetPixelChannels(image);
1680 q+=(ptrdiff_t) quantum_info->pad;
1689 if (quantum_info->format == FloatingPointQuantumFormat)
1691 for (x=0; x < (ssize_t) number_pixels; x++)
1696 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelRed(image,p),q);
1697 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelGreen(image,p),q);
1698 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelBlue(image,p),q);
1699 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelBlack(image,p),q);
1700 float_pixel=(float) (GetPixelOpacity(image,p));
1701 q=PopQuantumFloatPixel(quantum_info,float_pixel,q);
1702 p+=(ptrdiff_t) GetPixelChannels(image);
1703 q+=(ptrdiff_t) quantum_info->pad;
1707 for (x=0; x < (ssize_t) number_pixels; x++)
1709 pixel=ScaleQuantumToLong(GetPixelRed(image,p));
1710 q=PopLongPixel(quantum_info->endian,pixel,q);
1711 pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
1712 q=PopLongPixel(quantum_info->endian,pixel,q);
1713 pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
1714 q=PopLongPixel(quantum_info->endian,pixel,q);
1715 pixel=ScaleQuantumToLong(GetPixelBlack(image,p));
1716 q=PopLongPixel(quantum_info->endian,pixel,q);
1717 pixel=ScaleQuantumToLong(GetPixelOpacity(image,p));
1718 q=PopLongPixel(quantum_info->endian,pixel,q);
1719 p+=(ptrdiff_t) GetPixelChannels(image);
1720 q+=(ptrdiff_t) quantum_info->pad;
1726 if (quantum_info->format == FloatingPointQuantumFormat)
1731 for (x=0; x < (ssize_t) number_pixels; x++)
1733 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelRed(image,p),q);
1734 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelGreen(image,p),q);
1735 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelBlue(image,p),q);
1736 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelBlack(image,p),q);
1737 pixel=(double) (GetPixelOpacity(image,p));
1738 q=PopQuantumDoublePixel(quantum_info,pixel,q);
1739 p+=(ptrdiff_t) GetPixelChannels(image);
1740 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,ScaleQuantumToAny(GetPixelRed(image,p),
1756 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
1758 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
1760 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlack(image,p),
1762 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelOpacity(image,p),
1764 p+=(ptrdiff_t) GetPixelChannels(image);
1765 q+=(ptrdiff_t) quantum_info->pad;
1772static void ExportGrayQuantum(
const Image *image,QuantumInfo *quantum_info,
1773 const MagickSizeType number_pixels,
const Quantum *magick_restrict p,
1774 unsigned char *magick_restrict q)
1782 switch (quantum_info->depth)
1798 if (quantum_info->min_is_white != MagickFalse)
1803 threshold=(double) QuantumRange/2.0;
1804 for (x=((ssize_t) number_pixels-7); x > 0; x-=8)
1807 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 7;
1808 p+=(ptrdiff_t) GetPixelChannels(image);
1809 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 6;
1810 p+=(ptrdiff_t) GetPixelChannels(image);
1811 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 5;
1812 p+=(ptrdiff_t) GetPixelChannels(image);
1813 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 4;
1814 p+=(ptrdiff_t) GetPixelChannels(image);
1815 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 3;
1816 p+=(ptrdiff_t) GetPixelChannels(image);
1817 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 2;
1818 p+=(ptrdiff_t) GetPixelChannels(image);
1819 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 1;
1820 p+=(ptrdiff_t) GetPixelChannels(image);
1821 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 0;
1822 p+=(ptrdiff_t) GetPixelChannels(image);
1825 if ((number_pixels % 8) != 0)
1828 for (bit=7; bit >= (ssize_t) (8-(number_pixels % 8)); bit--)
1830 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << bit;
1831 p+=(ptrdiff_t) GetPixelChannels(image);
1842 for (x=0; x < (ssize_t) (number_pixels-1) ; x+=2)
1844 pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
1845 *q=(((pixel >> 4) & 0xf) << 4);
1846 p+=(ptrdiff_t) GetPixelChannels(image);
1847 pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
1849 p+=(ptrdiff_t) GetPixelChannels(image);
1852 if ((number_pixels % 2) != 0)
1854 pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
1855 *q=(((pixel >> 4) & 0xf) << 4);
1856 p+=(ptrdiff_t) GetPixelChannels(image);
1866 for (x=0; x < (ssize_t) number_pixels; x++)
1868 pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
1869 q=PopCharPixel(pixel,q);
1870 p+=(ptrdiff_t) GetPixelChannels(image);
1871 q+=(ptrdiff_t) quantum_info->pad;
1877 range=GetQuantumRange(quantum_info->depth);
1878 if (quantum_info->pack == MagickFalse)
1883 for (x=0; x < (ssize_t) (number_pixels-2); x+=3)
1885 pixel=(
unsigned int) (ScaleQuantumToAny(ClampToQuantum(
1886 GetPixelLuma(image,p+2*GetPixelChannels(image))),range) << 22 |
1887 ScaleQuantumToAny(ClampToQuantum(GetPixelLuma(image,p+
1888 GetPixelChannels(image))),range) << 12 | ScaleQuantumToAny(
1889 ClampToQuantum(GetPixelLuma(image,p)),range) << 2);
1890 q=PopLongPixel(quantum_info->endian,pixel,q);
1891 p+=(ptrdiff_t) 3*GetPixelChannels(image);
1892 q+=(ptrdiff_t) quantum_info->pad;
1894 if (x < (ssize_t) number_pixels)
1897 if (x++ < (ssize_t) (number_pixels-1))
1898 pixel|=ScaleQuantumToAny(ClampToQuantum(GetPixelLuma(image,p+
1899 GetPixelChannels(image))),range) << 12;
1900 if (x++ < (ssize_t) number_pixels)
1901 pixel|=ScaleQuantumToAny(ClampToQuantum(GetPixelLuma(image,p)),
1903 q=PopLongPixel(quantum_info->endian,pixel,q);
1907 for (x=0; x < (ssize_t) number_pixels; x++)
1909 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(ClampToQuantum(
1910 GetPixelLuma(image,p)),range),q);
1911 p+=(ptrdiff_t) GetPixelChannels(image);
1912 q+=(ptrdiff_t) quantum_info->pad;
1921 range=GetQuantumRange(quantum_info->depth);
1922 if (quantum_info->pack == MagickFalse)
1924 for (x=0; x < (ssize_t) number_pixels; x++)
1926 pixel=ScaleQuantumToShort(ClampToQuantum(GetPixelLuma(image,p)));
1927 q=PopShortPixel(quantum_info->endian,(
unsigned short) (pixel >> 4),
1929 p+=(ptrdiff_t) GetPixelChannels(image);
1930 q+=(ptrdiff_t) quantum_info->pad;
1934 for (x=0; x < (ssize_t) number_pixels; x++)
1936 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(ClampToQuantum(
1937 GetPixelLuma(image,p)),range),q);
1938 p+=(ptrdiff_t) GetPixelChannels(image);
1939 q+=(ptrdiff_t) quantum_info->pad;
1948 if (quantum_info->format == FloatingPointQuantumFormat)
1950 for (x=0; x < (ssize_t) number_pixels; x++)
1952 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
1953 GetPixelLuma(image,p));
1954 q=PopShortPixel(quantum_info->endian,pixel,q);
1955 p+=(ptrdiff_t) GetPixelChannels(image);
1956 q+=(ptrdiff_t) quantum_info->pad;
1960 for (x=0; x < (ssize_t) number_pixels; x++)
1962 pixel=ScaleQuantumToShort(ClampToQuantum(GetPixelLuma(image,p)));
1963 q=PopShortPixel(quantum_info->endian,pixel,q);
1964 p+=(ptrdiff_t) GetPixelChannels(image);
1965 q+=(ptrdiff_t) quantum_info->pad;
1974 if (quantum_info->format == FloatingPointQuantumFormat)
1976 for (x=0; x < (ssize_t) number_pixels; x++)
1981 float_pixel=(float) GetPixelLuma(image,p);
1982 q=PopQuantumFloatPixel(quantum_info,float_pixel,q);
1983 p+=(ptrdiff_t) GetPixelChannels(image);
1984 q+=(ptrdiff_t) quantum_info->pad;
1988 for (x=0; x < (ssize_t) number_pixels; x++)
1990 pixel=ScaleQuantumToLong(ClampToQuantum(GetPixelLuma(image,p)));
1991 q=PopLongPixel(quantum_info->endian,pixel,q);
1992 p+=(ptrdiff_t) GetPixelChannels(image);
1993 q+=(ptrdiff_t) quantum_info->pad;
1999 if (quantum_info->format == FloatingPointQuantumFormat)
2001 for (x=0; x < (ssize_t) number_pixels; x++)
2006 pixel=GetPixelLuma(image,p);
2007 q=PopQuantumDoublePixel(quantum_info,pixel,q);
2008 p+=(ptrdiff_t) GetPixelChannels(image);
2009 q+=(ptrdiff_t) quantum_info->pad;
2017 range=GetQuantumRange(quantum_info->depth);
2018 for (x=0; x < (ssize_t) number_pixels; x++)
2020 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(ClampToQuantum(
2021 GetPixelLuma(image,p)),range),q);
2022 p+=(ptrdiff_t) GetPixelChannels(image);
2023 q+=(ptrdiff_t) quantum_info->pad;
2030static void ExportGrayAlphaQuantum(
const Image *image,QuantumInfo *quantum_info,
2031 const MagickSizeType number_pixels,
const Quantum *magick_restrict p,
2032 unsigned char *magick_restrict q)
2040 switch (quantum_info->depth)
2057 if (quantum_info->min_is_white != MagickFalse)
2062 threshold=(double) QuantumRange/2.0;
2063 for (x=((ssize_t) number_pixels-3); x > 0; x-=4)
2066 *q|=(GetPixelLuma(image,p) > threshold ? black : white) << 7;
2067 pixel=(
unsigned char) (GetPixelAlpha(image,p) == OpaqueAlpha ?
2069 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 6);
2070 p+=(ptrdiff_t) GetPixelChannels(image);
2071 *q|=(GetPixelLuma(image,p) > threshold ? black : white) << 5;
2072 pixel=(
unsigned char) (GetPixelAlpha(image,p) == OpaqueAlpha ?
2074 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 4);
2075 p+=(ptrdiff_t) GetPixelChannels(image);
2076 *q|=(GetPixelLuma(image,p) > threshold ? black : white) << 3;
2077 pixel=(
unsigned char) (GetPixelAlpha(image,p) == OpaqueAlpha ?
2079 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 2);
2080 p+=(ptrdiff_t) GetPixelChannels(image);
2081 *q|=(GetPixelLuma(image,p) > threshold ? black : white) << 1;
2082 pixel=(
unsigned char) (GetPixelAlpha(image,p) == OpaqueAlpha ?
2084 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 0);
2085 p+=(ptrdiff_t) GetPixelChannels(image);
2088 if ((number_pixels % 4) != 0)
2091 for (bit=0; bit <= (ssize_t) (number_pixels % 4); bit+=2)
2093 *q|=(GetPixelLuma(image,p) > threshold ? black : white) <<
2095 pixel=(
unsigned char) (GetPixelAlpha(image,p) == OpaqueAlpha ?
2097 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << (
unsigned char)
2099 p+=(ptrdiff_t) GetPixelChannels(image);
2110 for (x=0; x < (ssize_t) number_pixels ; x++)
2112 pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
2113 *q=(((pixel >> 4) & 0xf) << 4);
2114 pixel=(
unsigned char) (16.0*QuantumScale*(
double)
2115 GetPixelAlpha(image,p)+0.5);
2117 p+=(ptrdiff_t) GetPixelChannels(image);
2127 for (x=0; x < (ssize_t) number_pixels; x++)
2129 pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
2130 q=PopCharPixel(pixel,q);
2131 pixel=ScaleQuantumToChar(GetPixelAlpha(image,p));
2132 q=PopCharPixel(pixel,q);
2133 p+=(ptrdiff_t) GetPixelChannels(image);
2134 q+=(ptrdiff_t) quantum_info->pad;
2143 if (quantum_info->format == FloatingPointQuantumFormat)
2145 for (x=0; x < (ssize_t) number_pixels; x++)
2147 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
2148 GetPixelLuma(image,p));
2149 q=PopShortPixel(quantum_info->endian,pixel,q);
2150 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
2151 GetPixelAlpha(image,p));
2152 q=PopShortPixel(quantum_info->endian,pixel,q);
2153 p+=(ptrdiff_t) GetPixelChannels(image);
2154 q+=(ptrdiff_t) quantum_info->pad;
2158 for (x=0; x < (ssize_t) number_pixels; x++)
2160 pixel=ScaleQuantumToShort(ClampToQuantum(GetPixelLuma(image,p)));
2161 q=PopShortPixel(quantum_info->endian,pixel,q);
2162 pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
2163 q=PopShortPixel(quantum_info->endian,pixel,q);
2164 p+=(ptrdiff_t) GetPixelChannels(image);
2165 q+=(ptrdiff_t) quantum_info->pad;
2174 if (quantum_info->format == FloatingPointQuantumFormat)
2176 for (x=0; x < (ssize_t) number_pixels; x++)
2181 float_pixel=(float) GetPixelLuma(image,p);
2182 q=PopQuantumFloatPixel(quantum_info,float_pixel,q);
2183 float_pixel=(float) (GetPixelAlpha(image,p));
2184 q=PopQuantumFloatPixel(quantum_info,float_pixel,q);
2185 p+=(ptrdiff_t) GetPixelChannels(image);
2186 q+=(ptrdiff_t) quantum_info->pad;
2190 for (x=0; x < (ssize_t) number_pixels; x++)
2192 pixel=ScaleQuantumToLong(ClampToQuantum(GetPixelLuma(image,p)));
2193 q=PopLongPixel(quantum_info->endian,pixel,q);
2194 pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
2195 q=PopLongPixel(quantum_info->endian,pixel,q);
2196 p+=(ptrdiff_t) GetPixelChannels(image);
2197 q+=(ptrdiff_t) quantum_info->pad;
2203 if (quantum_info->format == FloatingPointQuantumFormat)
2205 for (x=0; x < (ssize_t) number_pixels; x++)
2210 pixel=GetPixelLuma(image,p);
2211 q=PopQuantumDoublePixel(quantum_info,pixel,q);
2212 pixel=(double) (GetPixelAlpha(image,p));
2213 q=PopQuantumDoublePixel(quantum_info,pixel,q);
2214 p+=(ptrdiff_t) GetPixelChannels(image);
2215 q+=(ptrdiff_t) quantum_info->pad;
2223 range=GetQuantumRange(quantum_info->depth);
2224 for (x=0; x < (ssize_t) number_pixels; x++)
2226 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(ClampToQuantum(
2227 GetPixelLuma(image,p)),range),q);
2228 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
2230 p+=(ptrdiff_t) GetPixelChannels(image);
2231 q+=(ptrdiff_t) quantum_info->pad;
2238static void ExportIndexQuantum(
const Image *image,QuantumInfo *quantum_info,
2239 const MagickSizeType number_pixels,
const Quantum *magick_restrict p,
2240 unsigned char *magick_restrict q,ExceptionInfo *exception)
2248 if (image->storage_class != PseudoClass)
2250 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2251 "ColormappedImageRequired",
"`%s'",image->filename);
2254 switch (quantum_info->depth)
2261 for (x=((ssize_t) number_pixels-7); x > 0; x-=8)
2263 pixel=(
unsigned char) ((ssize_t) GetPixelIndex(image,p));
2264 *q=((pixel & 0x01) << 7);
2265 p+=(ptrdiff_t) GetPixelChannels(image);
2266 pixel=(
unsigned char) ((ssize_t) GetPixelIndex(image,p));
2267 *q|=((pixel & 0x01) << 6);
2268 p+=(ptrdiff_t) GetPixelChannels(image);
2269 pixel=(
unsigned char) ((ssize_t) GetPixelIndex(image,p));
2270 *q|=((pixel & 0x01) << 5);
2271 p+=(ptrdiff_t) GetPixelChannels(image);
2272 pixel=(
unsigned char) ((ssize_t) GetPixelIndex(image,p));
2273 *q|=((pixel & 0x01) << 4);
2274 p+=(ptrdiff_t) GetPixelChannels(image);
2275 pixel=(
unsigned char) ((ssize_t) GetPixelIndex(image,p));
2276 *q|=((pixel & 0x01) << 3);
2277 p+=(ptrdiff_t) GetPixelChannels(image);
2278 pixel=(
unsigned char) ((ssize_t) GetPixelIndex(image,p));
2279 *q|=((pixel & 0x01) << 2);
2280 p+=(ptrdiff_t) GetPixelChannels(image);
2281 pixel=(
unsigned char) ((ssize_t) GetPixelIndex(image,p));
2282 *q|=((pixel & 0x01) << 1);
2283 p+=(ptrdiff_t) GetPixelChannels(image);
2284 pixel=(
unsigned char) ((ssize_t) GetPixelIndex(image,p));
2285 *q|=((pixel & 0x01) << 0);
2286 p+=(ptrdiff_t) GetPixelChannels(image);
2289 if ((number_pixels % 8) != 0)
2292 for (bit=7; bit >= (ssize_t) (8-(number_pixels % 8)); bit--)
2294 pixel=(
unsigned char) ((ssize_t) GetPixelIndex(image,p));
2295 *q|=((pixel & 0x01) << (
unsigned char) bit);
2296 p+=(ptrdiff_t) GetPixelChannels(image);
2307 for (x=0; x < (ssize_t) (number_pixels-1) ; x+=2)
2309 pixel=(
unsigned char) ((ssize_t) GetPixelIndex(image,p));
2310 *q=((pixel & 0xf) << 4);
2311 p+=(ptrdiff_t) GetPixelChannels(image);
2312 pixel=(
unsigned char) ((ssize_t) GetPixelIndex(image,p));
2313 *q|=((pixel & 0xf) << 0);
2314 p+=(ptrdiff_t) GetPixelChannels(image);
2317 if ((number_pixels % 2) != 0)
2319 pixel=(
unsigned char) ((ssize_t) GetPixelIndex(image,p));
2320 *q=((pixel & 0xf) << 4);
2321 p+=(ptrdiff_t) GetPixelChannels(image);
2328 for (x=0; x < (ssize_t) number_pixels; x++)
2330 q=PopCharPixel((
unsigned char) ((ssize_t) GetPixelIndex(image,p)),q);
2331 p+=(ptrdiff_t) GetPixelChannels(image);
2332 q+=(ptrdiff_t) quantum_info->pad;
2338 if (quantum_info->format == FloatingPointQuantumFormat)
2340 for (x=0; x < (ssize_t) number_pixels; x++)
2342 q=PopShortPixel(quantum_info->endian,SinglePrecisionToHalf(
2343 QuantumScale*(
double) GetPixelIndex(image,p)),q);
2344 p+=(ptrdiff_t) GetPixelChannels(image);
2345 q+=(ptrdiff_t) quantum_info->pad;
2349 for (x=0; x < (ssize_t) number_pixels; x++)
2351 q=PopShortPixel(quantum_info->endian,(
unsigned short)
2352 GetPixelIndex(image,p),q);
2353 p+=(ptrdiff_t) GetPixelChannels(image);
2354 q+=(ptrdiff_t) quantum_info->pad;
2360 if (quantum_info->format == FloatingPointQuantumFormat)
2362 for (x=0; x < (ssize_t) number_pixels; x++)
2364 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelIndex(image,p),q);
2365 p+=(ptrdiff_t) GetPixelChannels(image);
2366 q+=(ptrdiff_t) quantum_info->pad;
2370 for (x=0; x < (ssize_t) number_pixels; x++)
2372 q=PopLongPixel(quantum_info->endian,(
unsigned int)
2373 GetPixelIndex(image,p),q);
2374 p+=(ptrdiff_t) GetPixelChannels(image);
2375 q+=(ptrdiff_t) quantum_info->pad;
2381 if (quantum_info->format == FloatingPointQuantumFormat)
2383 for (x=0; x < (ssize_t) number_pixels; x++)
2385 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelIndex(image,p),q);
2386 p+=(ptrdiff_t) GetPixelChannels(image);
2387 q+=(ptrdiff_t) quantum_info->pad;
2395 for (x=0; x < (ssize_t) number_pixels; x++)
2397 q=PopQuantumPixel(quantum_info,(QuantumAny) GetPixelIndex(image,p),q);
2398 p+=(ptrdiff_t) GetPixelChannels(image);
2399 q+=(ptrdiff_t) quantum_info->pad;
2406static void ExportIndexAlphaQuantum(
const Image *image,
2407 QuantumInfo *quantum_info,
const MagickSizeType number_pixels,
2408 const Quantum *magick_restrict p,
unsigned char *magick_restrict q,
2409 ExceptionInfo *exception)
2417 if (image->storage_class != PseudoClass)
2419 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2420 "ColormappedImageRequired",
"`%s'",image->filename);
2423 switch (quantum_info->depth)
2430 for (x=((ssize_t) number_pixels-3); x > 0; x-=4)
2432 pixel=(
unsigned char) ((ssize_t) GetPixelIndex(image,p));
2433 *q=((pixel & 0x01) << 7);
2434 pixel=(
unsigned char) (GetPixelAlpha(image,p) == (Quantum)
2435 TransparentAlpha ? 1 : 0);
2436 *q|=((pixel & 0x01) << 6);
2437 p+=(ptrdiff_t) GetPixelChannels(image);
2438 pixel=(
unsigned char) ((ssize_t) GetPixelIndex(image,p));
2439 *q|=((pixel & 0x01) << 5);
2440 pixel=(
unsigned char) (GetPixelAlpha(image,p) == (Quantum)
2441 TransparentAlpha ? 1 : 0);
2442 *q|=((pixel & 0x01) << 4);
2443 p+=(ptrdiff_t) GetPixelChannels(image);
2444 pixel=(
unsigned char) ((ssize_t) GetPixelIndex(image,p));
2445 *q|=((pixel & 0x01) << 3);
2446 pixel=(
unsigned char) (GetPixelAlpha(image,p) == (Quantum)
2447 TransparentAlpha ? 1 : 0);
2448 *q|=((pixel & 0x01) << 2);
2449 p+=(ptrdiff_t) GetPixelChannels(image);
2450 pixel=(
unsigned char) ((ssize_t) GetPixelIndex(image,p));
2451 *q|=((pixel & 0x01) << 1);
2452 pixel=(
unsigned char) (GetPixelAlpha(image,p) == (Quantum)
2453 TransparentAlpha ? 1 : 0);
2454 *q|=((pixel & 0x01) << 0);
2455 p+=(ptrdiff_t) GetPixelChannels(image);
2458 if ((number_pixels % 4) != 0)
2461 for (bit=3; bit >= (ssize_t) (4-(number_pixels % 4)); bit-=2)
2463 pixel=(
unsigned char) ((ssize_t) GetPixelIndex(image,p));
2464 *q|=((pixel & 0x01) << (
unsigned char) (bit+4));
2465 pixel=(
unsigned char) (GetPixelAlpha(image,p) == (Quantum)
2466 TransparentAlpha ? 1 : 0);
2467 *q|=((pixel & 0x01) << (
unsigned char) (bit+4-1));
2468 p+=(ptrdiff_t) GetPixelChannels(image);
2479 for (x=0; x < (ssize_t) number_pixels ; x++)
2481 pixel=(
unsigned char) ((ssize_t) GetPixelIndex(image,p));
2482 *q=((pixel & 0xf) << 4);
2483 pixel=(
unsigned char) (16.0*QuantumScale*(
double)
2484 GetPixelAlpha(image,p)+0.5);
2485 *q|=((pixel & 0xf) << 0);
2486 p+=(ptrdiff_t) GetPixelChannels(image);
2496 for (x=0; x < (ssize_t) number_pixels; x++)
2498 q=PopCharPixel((
unsigned char) ((ssize_t) GetPixelIndex(image,p)),q);
2499 pixel=ScaleQuantumToChar(GetPixelAlpha(image,p));
2500 q=PopCharPixel(pixel,q);
2501 p+=(ptrdiff_t) GetPixelChannels(image);
2502 q+=(ptrdiff_t) quantum_info->pad;
2511 if (quantum_info->format == FloatingPointQuantumFormat)
2513 for (x=0; x < (ssize_t) number_pixels; x++)
2515 q=PopShortPixel(quantum_info->endian,(
unsigned short)
2516 ((ssize_t) GetPixelIndex(image,p)),q);
2517 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
2518 GetPixelAlpha(image,p));
2519 q=PopShortPixel(quantum_info->endian,pixel,q);
2520 p+=(ptrdiff_t) GetPixelChannels(image);
2521 q+=(ptrdiff_t) quantum_info->pad;
2525 for (x=0; x < (ssize_t) number_pixels; x++)
2527 q=PopShortPixel(quantum_info->endian,(
unsigned short)
2528 ((ssize_t) GetPixelIndex(image,p)),q);
2529 pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
2530 q=PopShortPixel(quantum_info->endian,pixel,q);
2531 p+=(ptrdiff_t) GetPixelChannels(image);
2532 q+=(ptrdiff_t) quantum_info->pad;
2541 if (quantum_info->format == FloatingPointQuantumFormat)
2543 for (x=0; x < (ssize_t) number_pixels; x++)
2548 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelIndex(image,p),q);
2549 float_pixel=(float) GetPixelAlpha(image,p);
2550 q=PopQuantumFloatPixel(quantum_info,float_pixel,q);
2551 p+=(ptrdiff_t) GetPixelChannels(image);
2552 q+=(ptrdiff_t) quantum_info->pad;
2556 for (x=0; x < (ssize_t) number_pixels; x++)
2558 q=PopLongPixel(quantum_info->endian,(
unsigned int)
2559 GetPixelIndex(image,p),q);
2560 pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
2561 q=PopLongPixel(quantum_info->endian,pixel,q);
2562 p+=(ptrdiff_t) GetPixelChannels(image);
2563 q+=(ptrdiff_t) quantum_info->pad;
2569 if (quantum_info->format == FloatingPointQuantumFormat)
2571 for (x=0; x < (ssize_t) number_pixels; x++)
2576 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelIndex(image,p),q);
2577 pixel=(double) GetPixelAlpha(image,p);
2578 q=PopQuantumDoublePixel(quantum_info,pixel,q);
2579 p+=(ptrdiff_t) GetPixelChannels(image);
2580 q+=(ptrdiff_t) quantum_info->pad;
2591 range=GetQuantumRange(quantum_info->depth);
2592 for (x=0; x < (ssize_t) number_pixels; x++)
2594 q=PopQuantumPixel(quantum_info,(QuantumAny) GetPixelIndex(image,p),q);
2595 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
2597 p+=(ptrdiff_t) GetPixelChannels(image);
2598 q+=(ptrdiff_t) quantum_info->pad;
2605static void ExportMultispectralQuantum(
const Image *image,
2606 QuantumInfo *quantum_info,
const MagickSizeType number_pixels,
2607 const Quantum *magick_restrict p,
unsigned char *magick_restrict q,
2608 ExceptionInfo *exception)
2614 if (image->number_meta_channels == 0)
2616 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2617 "MultispectralImageRequired",
"`%s'",image->filename);
2620 if (quantum_info->meta_channel != 0)
2622 ExportPixelChannel(image,quantum_info,number_pixels,p,q,
2623 (PixelChannel) (MetaPixelChannels+quantum_info->meta_channel-1));
2626 switch (quantum_info->depth)
2633 for (x=0; x < (ssize_t) number_pixels; x++)
2635 for (i=0; i < (ssize_t) GetImageChannels(image); i++)
2637 pixel=ScaleQuantumToChar(p[i]);
2638 q=PopCharPixel(pixel,q);
2640 p+=(ptrdiff_t) GetPixelChannels(image);
2641 q+=(ptrdiff_t) quantum_info->pad;
2650 if (quantum_info->format == FloatingPointQuantumFormat)
2652 for (x=0; x < (ssize_t) number_pixels; x++)
2654 for (i=0; i < (ssize_t) GetImageChannels(image); i++)
2656 pixel=SinglePrecisionToHalf(QuantumScale*(
double) p[i]);
2657 q=PopShortPixel(quantum_info->endian,pixel,q);
2659 p+=(ptrdiff_t) GetPixelChannels(image);
2660 q+=(ptrdiff_t) quantum_info->pad;
2664 for (x=0; x < (ssize_t) number_pixels; x++)
2666 for (i=0; i < (ssize_t) GetImageChannels(image); i++)
2668 pixel=ScaleQuantumToShort(p[i]);
2669 q=PopShortPixel(quantum_info->endian,pixel,q);
2671 p+=(ptrdiff_t) GetPixelChannels(image);
2672 q+=(ptrdiff_t) quantum_info->pad;
2681 if (quantum_info->format == FloatingPointQuantumFormat)
2683 for (x=0; x < (ssize_t) number_pixels; x++)
2685 for (i=0; i < (ssize_t) GetImageChannels(image); i++)
2686 q=PopQuantumFloatPixel(quantum_info,(
float) p[i],q);
2687 p+=(ptrdiff_t) GetPixelChannels(image);
2688 q+=(ptrdiff_t) quantum_info->pad;
2692 for (x=0; x < (ssize_t) number_pixels; x++)
2694 for (i=0; i < (ssize_t) GetImageChannels(image); i++)
2696 pixel=ScaleQuantumToLong(p[i]);
2697 q=PopLongPixel(quantum_info->endian,pixel,q);
2699 p+=(ptrdiff_t) GetPixelChannels(image);
2700 q+=(ptrdiff_t) quantum_info->pad;
2706 if (quantum_info->format == FloatingPointQuantumFormat)
2708 for (x=0; x < (ssize_t) number_pixels; x++)
2710 for (i=0; i < (ssize_t) GetImageChannels(image); i++)
2711 q=PopQuantumDoublePixel(quantum_info,(
double) p[i],q);
2712 p+=(ptrdiff_t) GetPixelChannels(image);
2713 q+=(ptrdiff_t) quantum_info->pad;
2724 range=GetQuantumRange(quantum_info->depth);
2725 for (x=0; x < (ssize_t) number_pixels; x++)
2727 for (i=0; i < (ssize_t) GetImageChannels(image); i++)
2728 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(p[i],range),q);
2729 p+=(ptrdiff_t) GetPixelChannels(image);
2730 q+=(ptrdiff_t) quantum_info->pad;
2737static void ExportOpacityQuantum(
const Image *image,QuantumInfo *quantum_info,
2738 const MagickSizeType number_pixels,
const Quantum *magick_restrict p,
2739 unsigned char *magick_restrict q,ExceptionInfo *exception)
2747 if (image->alpha_trait == UndefinedPixelTrait)
2749 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2750 "ImageDoesNotHaveAnAlphaChannel",
"`%s'",image->filename);
2753 switch (quantum_info->depth)
2760 for (x=0; x < (ssize_t) number_pixels; x++)
2762 pixel=ScaleQuantumToChar(GetPixelOpacity(image,p));
2763 q=PopCharPixel(pixel,q);
2764 p+=(ptrdiff_t) GetPixelChannels(image);
2765 q+=(ptrdiff_t) quantum_info->pad;
2774 if (quantum_info->format == FloatingPointQuantumFormat)
2776 for (x=0; x < (ssize_t) number_pixels; x++)
2778 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
2779 GetPixelOpacity(image,p));
2780 q=PopShortPixel(quantum_info->endian,pixel,q);
2781 p+=(ptrdiff_t) GetPixelChannels(image);
2782 q+=(ptrdiff_t) quantum_info->pad;
2786 for (x=0; x < (ssize_t) number_pixels; x++)
2788 pixel=ScaleQuantumToShort(GetPixelOpacity(image,p));
2789 q=PopShortPixel(quantum_info->endian,pixel,q);
2790 p+=(ptrdiff_t) GetPixelChannels(image);
2791 q+=(ptrdiff_t) quantum_info->pad;
2800 if (quantum_info->format == FloatingPointQuantumFormat)
2802 for (x=0; x < (ssize_t) number_pixels; x++)
2804 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelOpacity(image,p),q);
2805 p+=(ptrdiff_t) GetPixelChannels(image);
2806 q+=(ptrdiff_t) quantum_info->pad;
2810 for (x=0; x < (ssize_t) number_pixels; x++)
2812 pixel=ScaleQuantumToLong(GetPixelOpacity(image,p));
2813 q=PopLongPixel(quantum_info->endian,pixel,q);
2814 p+=(ptrdiff_t) GetPixelChannels(image);
2815 q+=(ptrdiff_t) quantum_info->pad;
2821 if (quantum_info->format == FloatingPointQuantumFormat)
2823 for (x=0; x < (ssize_t) number_pixels; x++)
2825 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelOpacity(image,p),q);
2826 p+=(ptrdiff_t) GetPixelChannels(image);
2827 q+=(ptrdiff_t) quantum_info->pad;
2835 range=GetQuantumRange(quantum_info->depth);
2836 for (x=0; x < (ssize_t) number_pixels; x++)
2838 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(
2839 GetPixelOpacity(image,p),range),q);
2840 p+=(ptrdiff_t) GetPixelChannels(image);
2841 q+=(ptrdiff_t) quantum_info->pad;
2848static void ExportRGBQuantum(
const Image *image,QuantumInfo *quantum_info,
2849 const MagickSizeType number_pixels,
const Quantum *magick_restrict p,
2850 unsigned char *magick_restrict q)
2861 switch (quantum_info->depth)
2865 for (x=0; x < (ssize_t) number_pixels; x++)
2867 q=PopCharPixel(ScaleQuantumToChar(GetPixelRed(image,p)),q);
2868 q=PopCharPixel(ScaleQuantumToChar(GetPixelGreen(image,p)),q);
2869 q=PopCharPixel(ScaleQuantumToChar(GetPixelBlue(image,p)),q);
2870 p+=(ptrdiff_t) GetPixelChannels(image);
2871 q+=(ptrdiff_t) quantum_info->pad;
2880 range=GetQuantumRange(quantum_info->depth);
2881 if (quantum_info->pack == MagickFalse)
2883 for (x=0; x < (ssize_t) number_pixels; x++)
2885 pixel=(
unsigned int) (
2886 ScaleQuantumToAny(GetPixelRed(image,p),range) << 22 |
2887 ScaleQuantumToAny(GetPixelGreen(image,p),range) << 12 |
2888 ScaleQuantumToAny(GetPixelBlue(image,p),range) << 2);
2889 q=PopLongPixel(quantum_info->endian,pixel,q);
2890 p+=(ptrdiff_t) GetPixelChannels(image);
2891 q+=(ptrdiff_t) quantum_info->pad;
2895 if (quantum_info->quantum == 32UL)
2897 for (x=0; x < (ssize_t) number_pixels; x++)
2899 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
2900 q=PopQuantumLongPixel(quantum_info,pixel,q);
2901 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
2903 q=PopQuantumLongPixel(quantum_info,pixel,q);
2904 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
2905 q=PopQuantumLongPixel(quantum_info,pixel,q);
2906 p+=(ptrdiff_t) GetPixelChannels(image);
2907 q+=(ptrdiff_t) quantum_info->pad;
2911 for (x=0; x < (ssize_t) number_pixels; x++)
2913 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
2914 q=PopQuantumPixel(quantum_info,pixel,q);
2915 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
2916 q=PopQuantumPixel(quantum_info,pixel,q);
2917 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
2918 q=PopQuantumPixel(quantum_info,pixel,q);
2919 p+=(ptrdiff_t) GetPixelChannels(image);
2920 q+=(ptrdiff_t) quantum_info->pad;
2929 range=GetQuantumRange(quantum_info->depth);
2930 if (quantum_info->pack == MagickFalse)
2932 for (x=0; x < (ssize_t) (3*number_pixels-1); x+=2)
2939 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),
2945 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
2951 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),
2953 p+=(ptrdiff_t) GetPixelChannels(image);
2957 q=PopShortPixel(quantum_info->endian,(
unsigned short) (pixel << 4),
2964 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),
2970 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
2976 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),
2978 p+=(ptrdiff_t) GetPixelChannels(image);
2982 q=PopShortPixel(quantum_info->endian,(
unsigned short) (pixel << 4),
2984 q+=(ptrdiff_t) quantum_info->pad;
2986 for (bit=0; bit < (ssize_t) (3*number_pixels % 2); bit++)
2988 switch ((x+bit) % 3)
2993 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),
2999 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
3005 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),
3007 p+=(ptrdiff_t) GetPixelChannels(image);
3011 q=PopShortPixel(quantum_info->endian,(
unsigned short) (pixel << 4),
3013 q+=(ptrdiff_t) quantum_info->pad;
3016 p+=(ptrdiff_t) GetPixelChannels(image);
3019 if (quantum_info->quantum == 32UL)
3021 for (x=0; x < (ssize_t) number_pixels; x++)
3023 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
3024 q=PopQuantumLongPixel(quantum_info,pixel,q);
3025 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
3027 q=PopQuantumLongPixel(quantum_info,pixel,q);
3028 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
3029 q=PopQuantumLongPixel(quantum_info,pixel,q);
3030 p+=(ptrdiff_t) GetPixelChannels(image);
3031 q+=(ptrdiff_t) quantum_info->pad;
3035 for (x=0; x < (ssize_t) number_pixels; x++)
3037 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
3038 q=PopQuantumPixel(quantum_info,pixel,q);
3039 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
3040 q=PopQuantumPixel(quantum_info,pixel,q);
3041 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
3042 q=PopQuantumPixel(quantum_info,pixel,q);
3043 p+=(ptrdiff_t) GetPixelChannels(image);
3044 q+=(ptrdiff_t) quantum_info->pad;
3053 if (quantum_info->format == FloatingPointQuantumFormat)
3055 for (x=0; x < (ssize_t) number_pixels; x++)
3057 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
3058 GetPixelRed(image,p));
3059 q=PopShortPixel(quantum_info->endian,pixel,q);
3060 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
3061 GetPixelGreen(image,p));
3062 q=PopShortPixel(quantum_info->endian,pixel,q);
3063 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
3064 GetPixelBlue(image,p));
3065 q=PopShortPixel(quantum_info->endian,pixel,q);
3066 p+=(ptrdiff_t) GetPixelChannels(image);
3067 q+=(ptrdiff_t) quantum_info->pad;
3071 for (x=0; x < (ssize_t) number_pixels; x++)
3073 pixel=ScaleQuantumToShort(GetPixelRed(image,p));
3074 q=PopShortPixel(quantum_info->endian,pixel,q);
3075 pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
3076 q=PopShortPixel(quantum_info->endian,pixel,q);
3077 pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
3078 q=PopShortPixel(quantum_info->endian,pixel,q);
3079 p+=(ptrdiff_t) GetPixelChannels(image);
3080 q+=(ptrdiff_t) quantum_info->pad;
3089 if (quantum_info->format == FloatingPointQuantumFormat)
3091 for (x=0; x < (ssize_t) number_pixels; x++)
3093 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelRed(image,p),
3095 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelGreen(image,p),
3097 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelBlue(image,p),
3099 p+=(ptrdiff_t) GetPixelChannels(image);
3100 q+=(ptrdiff_t) quantum_info->pad;
3104 for (x=0; x < (ssize_t) number_pixels; x++)
3106 pixel=ScaleQuantumToLong(GetPixelRed(image,p));
3107 q=PopLongPixel(quantum_info->endian,pixel,q);
3108 pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
3109 q=PopLongPixel(quantum_info->endian,pixel,q);
3110 pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
3111 q=PopLongPixel(quantum_info->endian,pixel,q);
3112 p+=(ptrdiff_t) GetPixelChannels(image);
3113 q+=(ptrdiff_t) quantum_info->pad;
3119 if (quantum_info->format == FloatingPointQuantumFormat)
3121 for (x=0; x < (ssize_t) number_pixels; x++)
3123 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelRed(image,p),q);
3124 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelGreen(image,p),q);
3125 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelBlue(image,p),q);
3126 p+=(ptrdiff_t) GetPixelChannels(image);
3127 q+=(ptrdiff_t) quantum_info->pad;
3135 range=GetQuantumRange(quantum_info->depth);
3136 for (x=0; x < (ssize_t) number_pixels; x++)
3138 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
3140 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
3142 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
3144 p+=(ptrdiff_t) GetPixelChannels(image);
3145 q+=(ptrdiff_t) quantum_info->pad;
3152static void ExportRGBAQuantum(
const Image *image,QuantumInfo *quantum_info,
3153 const MagickSizeType number_pixels,
const Quantum *magick_restrict p,
3154 unsigned char *magick_restrict q)
3162 switch (quantum_info->depth)
3169 for (x=0; x < (ssize_t) number_pixels; x++)
3171 pixel=ScaleQuantumToChar(GetPixelRed(image,p));
3172 q=PopCharPixel(pixel,q);
3173 pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
3174 q=PopCharPixel(pixel,q);
3175 pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
3176 q=PopCharPixel(pixel,q);
3177 pixel=ScaleQuantumToChar(GetPixelAlpha(image,p));
3178 q=PopCharPixel(pixel,q);
3179 p+=(ptrdiff_t) GetPixelChannels(image);
3180 q+=(ptrdiff_t) quantum_info->pad;
3189 range=GetQuantumRange(quantum_info->depth);
3190 if (quantum_info->pack == MagickFalse)
3204 for (x=0; x < (ssize_t) number_pixels; x++)
3206 for (i=0; i < 4; i++)
3210 case 0: quantum=(size_t) GetPixelRed(image,p);
break;
3211 case 1: quantum=(size_t) GetPixelGreen(image,p);
break;
3212 case 2: quantum=(size_t) GetPixelBlue(image,p);
break;
3213 case 3: quantum=(size_t) GetPixelAlpha(image,p);
break;
3219 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
3225 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
3231 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
3233 q=PopLongPixel(quantum_info->endian,pixel,q);
3240 p+=(ptrdiff_t) GetPixelChannels(image);
3241 q+=(ptrdiff_t) quantum_info->pad;
3245 if (quantum_info->quantum == 32UL)
3247 for (x=0; x < (ssize_t) number_pixels; x++)
3249 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
3250 q=PopQuantumLongPixel(quantum_info,pixel,q);
3251 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
3253 q=PopQuantumLongPixel(quantum_info,pixel,q);
3254 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
3255 q=PopQuantumLongPixel(quantum_info,pixel,q);
3256 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelAlpha(image,p),
3258 q=PopQuantumLongPixel(quantum_info,pixel,q);
3259 p+=(ptrdiff_t) GetPixelChannels(image);
3260 q+=(ptrdiff_t) quantum_info->pad;
3264 for (x=0; x < (ssize_t) number_pixels; x++)
3266 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
3267 q=PopQuantumPixel(quantum_info,pixel,q);
3268 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
3269 q=PopQuantumPixel(quantum_info,pixel,q);
3270 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
3271 q=PopQuantumPixel(quantum_info,pixel,q);
3272 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelAlpha(image,p),range);
3273 q=PopQuantumPixel(quantum_info,pixel,q);
3274 p+=(ptrdiff_t) GetPixelChannels(image);
3275 q+=(ptrdiff_t) quantum_info->pad;
3284 if (quantum_info->format == FloatingPointQuantumFormat)
3286 for (x=0; x < (ssize_t) number_pixels; x++)
3288 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
3289 GetPixelRed(image,p));
3290 q=PopShortPixel(quantum_info->endian,pixel,q);
3291 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
3292 GetPixelGreen(image,p));
3293 q=PopShortPixel(quantum_info->endian,pixel,q);
3294 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
3295 GetPixelBlue(image,p));
3296 q=PopShortPixel(quantum_info->endian,pixel,q);
3297 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
3298 GetPixelAlpha(image,p));
3299 q=PopShortPixel(quantum_info->endian,pixel,q);
3300 p+=(ptrdiff_t) GetPixelChannels(image);
3301 q+=(ptrdiff_t) quantum_info->pad;
3305 for (x=0; x < (ssize_t) number_pixels; x++)
3307 pixel=ScaleQuantumToShort(GetPixelRed(image,p));
3308 q=PopShortPixel(quantum_info->endian,pixel,q);
3309 pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
3310 q=PopShortPixel(quantum_info->endian,pixel,q);
3311 pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
3312 q=PopShortPixel(quantum_info->endian,pixel,q);
3313 pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
3314 q=PopShortPixel(quantum_info->endian,pixel,q);
3315 p+=(ptrdiff_t) GetPixelChannels(image);
3316 q+=(ptrdiff_t) quantum_info->pad;
3325 if (quantum_info->format == FloatingPointQuantumFormat)
3327 for (x=0; x < (ssize_t) number_pixels; x++)
3332 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelRed(image,p),q);
3333 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelGreen(image,p),q);
3334 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelBlue(image,p),q);
3335 float_pixel=(float) GetPixelAlpha(image,p);
3336 q=PopQuantumFloatPixel(quantum_info,float_pixel,q);
3337 p+=(ptrdiff_t) GetPixelChannels(image);
3338 q+=(ptrdiff_t) quantum_info->pad;
3342 for (x=0; x < (ssize_t) number_pixels; x++)
3344 pixel=ScaleQuantumToLong(GetPixelRed(image,p));
3345 q=PopLongPixel(quantum_info->endian,pixel,q);
3346 pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
3347 q=PopLongPixel(quantum_info->endian,pixel,q);
3348 pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
3349 q=PopLongPixel(quantum_info->endian,pixel,q);
3350 pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
3351 q=PopLongPixel(quantum_info->endian,pixel,q);
3352 p+=(ptrdiff_t) GetPixelChannels(image);
3353 q+=(ptrdiff_t) quantum_info->pad;
3359 if (quantum_info->format == FloatingPointQuantumFormat)
3364 for (x=0; x < (ssize_t) number_pixels; x++)
3366 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelRed(image,p),q);
3367 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelGreen(image,p),q);
3368 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelBlue(image,p),q);
3369 pixel=(double) GetPixelAlpha(image,p);
3370 q=PopQuantumDoublePixel(quantum_info,pixel,q);
3371 p+=(ptrdiff_t) GetPixelChannels(image);
3372 q+=(ptrdiff_t) quantum_info->pad;
3380 range=GetQuantumRange(quantum_info->depth);
3381 for (x=0; x < (ssize_t) number_pixels; x++)
3383 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
3385 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
3387 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
3389 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
3391 p+=(ptrdiff_t) GetPixelChannels(image);
3392 q+=(ptrdiff_t) quantum_info->pad;
3399static void ExportRGBOQuantum(
const Image *image,QuantumInfo *quantum_info,
3400 const MagickSizeType number_pixels,
const Quantum *magick_restrict p,
3401 unsigned char *magick_restrict q)
3409 switch (quantum_info->depth)
3416 for (x=0; x < (ssize_t) number_pixels; x++)
3418 pixel=ScaleQuantumToChar(GetPixelRed(image,p));
3419 q=PopCharPixel(pixel,q);
3420 pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
3421 q=PopCharPixel(pixel,q);
3422 pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
3423 q=PopCharPixel(pixel,q);
3424 pixel=ScaleQuantumToChar(GetPixelOpacity(image,p));
3425 q=PopCharPixel(pixel,q);
3426 p+=(ptrdiff_t) GetPixelChannels(image);
3427 q+=(ptrdiff_t) quantum_info->pad;
3436 range=GetQuantumRange(quantum_info->depth);
3437 if (quantum_info->pack == MagickFalse)
3451 for (x=0; x < (ssize_t) number_pixels; x++)
3453 for (i=0; i < 4; i++)
3457 case 0: quantum=(size_t) GetPixelRed(image,p);
break;
3458 case 1: quantum=(size_t) GetPixelGreen(image,p);
break;
3459 case 2: quantum=(size_t) GetPixelBlue(image,p);
break;
3460 case 3: quantum=(size_t) GetPixelOpacity(image,p);
break;
3466 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
3472 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
3478 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
3480 q=PopLongPixel(quantum_info->endian,pixel,q);
3487 p+=(ptrdiff_t) GetPixelChannels(image);
3488 q+=(ptrdiff_t) quantum_info->pad;
3492 if (quantum_info->quantum == 32UL)
3494 for (x=0; x < (ssize_t) number_pixels; x++)
3496 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
3497 q=PopQuantumLongPixel(quantum_info,pixel,q);
3498 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
3500 q=PopQuantumLongPixel(quantum_info,pixel,q);
3501 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
3502 q=PopQuantumLongPixel(quantum_info,pixel,q);
3503 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelOpacity(image,p),
3505 q=PopQuantumLongPixel(quantum_info,pixel,q);
3506 p+=(ptrdiff_t) GetPixelChannels(image);
3507 q+=(ptrdiff_t) quantum_info->pad;
3511 for (x=0; x < (ssize_t) number_pixels; x++)
3513 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
3514 q=PopQuantumPixel(quantum_info,pixel,q);
3515 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
3516 q=PopQuantumPixel(quantum_info,pixel,q);
3517 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
3518 q=PopQuantumPixel(quantum_info,pixel,q);
3519 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelOpacity(image,p),range);
3520 q=PopQuantumPixel(quantum_info,pixel,q);
3521 p+=(ptrdiff_t) GetPixelChannels(image);
3522 q+=(ptrdiff_t) quantum_info->pad;
3531 if (quantum_info->format == FloatingPointQuantumFormat)
3533 for (x=0; x < (ssize_t) number_pixels; x++)
3535 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
3536 GetPixelRed(image,p));
3537 q=PopShortPixel(quantum_info->endian,pixel,q);
3538 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
3539 GetPixelGreen(image,p));
3540 q=PopShortPixel(quantum_info->endian,pixel,q);
3541 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
3542 GetPixelBlue(image,p));
3543 q=PopShortPixel(quantum_info->endian,pixel,q);
3544 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
3545 GetPixelOpacity(image,p));
3546 q=PopShortPixel(quantum_info->endian,pixel,q);
3547 p+=(ptrdiff_t) GetPixelChannels(image);
3548 q+=(ptrdiff_t) quantum_info->pad;
3552 for (x=0; x < (ssize_t) number_pixels; x++)
3554 pixel=ScaleQuantumToShort(GetPixelRed(image,p));
3555 q=PopShortPixel(quantum_info->endian,pixel,q);
3556 pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
3557 q=PopShortPixel(quantum_info->endian,pixel,q);
3558 pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
3559 q=PopShortPixel(quantum_info->endian,pixel,q);
3560 pixel=ScaleQuantumToShort(GetPixelOpacity(image,p));
3561 q=PopShortPixel(quantum_info->endian,pixel,q);
3562 p+=(ptrdiff_t) GetPixelChannels(image);
3563 q+=(ptrdiff_t) quantum_info->pad;
3572 if (quantum_info->format == FloatingPointQuantumFormat)
3574 for (x=0; x < (ssize_t) number_pixels; x++)
3579 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelRed(image,p),
3581 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelGreen(image,p),
3583 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelBlue(image,p),
3585 float_pixel=(float) GetPixelOpacity(image,p);
3586 q=PopQuantumFloatPixel(quantum_info,float_pixel,q);
3587 p+=(ptrdiff_t) GetPixelChannels(image);
3588 q+=(ptrdiff_t) quantum_info->pad;
3592 for (x=0; x < (ssize_t) number_pixels; x++)
3594 pixel=ScaleQuantumToLong(GetPixelRed(image,p));
3595 q=PopLongPixel(quantum_info->endian,pixel,q);
3596 pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
3597 q=PopLongPixel(quantum_info->endian,pixel,q);
3598 pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
3599 q=PopLongPixel(quantum_info->endian,pixel,q);
3600 pixel=ScaleQuantumToLong(GetPixelOpacity(image,p));
3601 q=PopLongPixel(quantum_info->endian,pixel,q);
3602 p+=(ptrdiff_t) GetPixelChannels(image);
3603 q+=(ptrdiff_t) quantum_info->pad;
3609 if (quantum_info->format == FloatingPointQuantumFormat)
3614 for (x=0; x < (ssize_t) number_pixels; x++)
3616 q=PopQuantumDoublePixel(quantum_info,(
double)
3617 GetPixelRed(image,p),q);
3618 q=PopQuantumDoublePixel(quantum_info,(
double)
3619 GetPixelGreen(image,p),q);
3620 q=PopQuantumDoublePixel(quantum_info,(
double)
3621 GetPixelBlue(image,p),q);
3622 pixel=(double) GetPixelOpacity(image,p);
3623 q=PopQuantumDoublePixel(quantum_info,pixel,q);
3624 p+=(ptrdiff_t) GetPixelChannels(image);
3625 q+=(ptrdiff_t) quantum_info->pad;
3633 range=GetQuantumRange(quantum_info->depth);
3634 for (x=0; x < (ssize_t) number_pixels; x++)
3636 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
3638 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
3640 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
3642 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelOpacity(image,p),
3644 p+=(ptrdiff_t) GetPixelChannels(image);
3645 q+=(ptrdiff_t) quantum_info->pad;
3652MagickExport
size_t ExportQuantumPixels(
const Image *image,
3653 CacheView *image_view,QuantumInfo *quantum_info,
3654 const QuantumType quantum_type,
unsigned char *magick_restrict pixels,
3655 ExceptionInfo *exception)
3672 assert(image != (Image *) NULL);
3673 assert(image->signature == MagickCoreSignature);
3674 assert(quantum_info != (QuantumInfo *) NULL);
3675 assert(quantum_info->signature == MagickCoreSignature);
3676 assert(exception != (ExceptionInfo *) NULL);
3677 assert(exception->signature == MagickCoreSignature);
3678 if (IsEventLogging() != MagickFalse)
3679 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",image->filename);
3680 if (pixels == (
unsigned char *) NULL)
3681 pixels=(
unsigned char *) GetQuantumPixels(quantum_info);
3682 if (image_view == (CacheView *) NULL)
3684 number_pixels=GetImageExtent(image);
3685 p=GetVirtualPixelQueue(image);
3689 number_pixels=GetCacheViewExtent(image_view);
3690 p=GetCacheViewVirtualPixelQueue(image_view);
3692 if (quantum_info->alpha_type == AssociatedQuantumAlpha)
3703 if (image_view == (CacheView *) NULL)
3704 r=GetAuthenticPixelQueue(image);
3706 r=GetCacheViewAuthenticPixelQueue(image_view);
3707 for (x=0; x < (ssize_t) image->columns; x++)
3712 Sa=QuantumScale*(double) GetPixelAlpha(image,r);
3713 for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
3715 PixelChannel channel = GetPixelChannelChannel(image,i);
3716 PixelTrait traits = GetPixelChannelTraits(image,channel);
3717 if ((traits & UpdatePixelTrait) == 0)
3719 r[i]=ClampToQuantum(Sa*(
double) r[i]);
3721 r+=(ptrdiff_t) GetPixelChannels(image);
3724 if ((quantum_type == CbYCrQuantum) || (quantum_type == CbYCrAQuantum))
3732 if (image_view == (CacheView *) NULL)
3733 r=GetAuthenticPixelQueue(image);
3735 r=GetCacheViewAuthenticPixelQueue(image_view);
3736 for (x=0; x < (ssize_t) number_pixels; x++)
3738 quantum=GetPixelRed(image,r);
3739 SetPixelRed(image,GetPixelGreen(image,r),r);
3740 SetPixelGreen(image,quantum,r);
3741 r+=(ptrdiff_t) GetPixelChannels(image);
3745 ResetQuantumState(quantum_info);
3746 extent=GetQuantumExtent(image,quantum_info,quantum_type);
3747 switch (quantum_type)
3751 ExportAlphaQuantum(image,quantum_info,number_pixels,p,q,exception);
3756 ExportBGRQuantum(image,quantum_info,number_pixels,p,q);
3761 ExportBGRAQuantum(image,quantum_info,number_pixels,p,q);
3766 ExportBGROQuantum(image,quantum_info,number_pixels,p,q);
3771 ExportBlackQuantum(image,quantum_info,number_pixels,p,q,exception);
3777 ExportPixelChannel(image,quantum_info,number_pixels,p,q,BluePixelChannel);
3782 ExportCMYKQuantum(image,quantum_info,number_pixels,p,q,exception);
3787 ExportCMYKAQuantum(image,quantum_info,number_pixels,p,q,exception);
3790 case MultispectralQuantum:
3792 ExportMultispectralQuantum(image,quantum_info,number_pixels,p,q,exception);
3797 ExportCMYKOQuantum(image,quantum_info,number_pixels,p,q,exception);
3802 ExportCbYCrYQuantum(image,quantum_info,number_pixels,p,q);
3807 ExportGrayQuantum(image,quantum_info,number_pixels,p,q);
3810 case GrayAlphaQuantum:
3812 ExportGrayAlphaQuantum(image,quantum_info,number_pixels,p,q);
3816 case MagentaQuantum:
3818 ExportPixelChannel(image,quantum_info,number_pixels,p,q,GreenPixelChannel);
3823 ExportIndexQuantum(image,quantum_info,number_pixels,p,q,exception);
3826 case IndexAlphaQuantum:
3828 ExportIndexAlphaQuantum(image,quantum_info,number_pixels,p,q,exception);
3834 ExportPixelChannel(image,quantum_info,number_pixels,p,q,RedPixelChannel);
3837 case OpacityQuantum:
3839 ExportOpacityQuantum(image,quantum_info,number_pixels,p,q,exception);
3845 ExportRGBQuantum(image,quantum_info,number_pixels,p,q);
3851 ExportRGBAQuantum(image,quantum_info,number_pixels,p,q);
3856 ExportRGBOQuantum(image,quantum_info,number_pixels,p,q);
3862 if ((quantum_type == CbYCrQuantum) || (quantum_type == CbYCrAQuantum))
3870 if (image_view == (CacheView *) NULL)
3871 r=GetAuthenticPixelQueue(image);
3873 r=GetCacheViewAuthenticPixelQueue(image_view);
3874 for (x=0; x < (ssize_t) number_pixels; x++)
3876 quantum=GetPixelRed(image,r);
3877 SetPixelRed(image,GetPixelGreen(image,r),r);
3878 SetPixelGreen(image,quantum,r);
3879 r+=(ptrdiff_t) GetPixelChannels(image);