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 < (3*(ssize_t) 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),
1365 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelGreen(image,p),
1367 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelBlue(image,p),
1369 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelBlack(image,p),
1371 p+=(ptrdiff_t) GetPixelChannels(image);
1372 q+=(ptrdiff_t) quantum_info->pad;
1376 for (x=0; x < (ssize_t) number_pixels; x++)
1378 pixel=ScaleQuantumToLong(GetPixelRed(image,p));
1379 q=PopLongPixel(quantum_info->endian,pixel,q);
1380 pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
1381 q=PopLongPixel(quantum_info->endian,pixel,q);
1382 pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
1383 q=PopLongPixel(quantum_info->endian,pixel,q);
1384 pixel=ScaleQuantumToLong(GetPixelBlack(image,p));
1385 q=PopLongPixel(quantum_info->endian,pixel,q);
1386 p+=(ptrdiff_t) GetPixelChannels(image);
1387 q+=(ptrdiff_t) quantum_info->pad;
1393 if (quantum_info->format == FloatingPointQuantumFormat)
1395 for (x=0; x < (ssize_t) number_pixels; x++)
1397 q=PopQuantumDoublePixel(quantum_info,(
double)
1398 GetPixelRed(image,p),q);
1399 q=PopQuantumDoublePixel(quantum_info,(
double)
1400 GetPixelGreen(image,p),q);
1401 q=PopQuantumDoublePixel(quantum_info,(
double)
1402 GetPixelBlue(image,p),q);
1403 q=PopQuantumDoublePixel(quantum_info,(
double)
1404 GetPixelBlack(image,p),q);
1405 p+=(ptrdiff_t) GetPixelChannels(image);
1406 q+=(ptrdiff_t) quantum_info->pad;
1417 range=GetQuantumRange(quantum_info->depth);
1418 for (x=0; x < (ssize_t) number_pixels; x++)
1420 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
1422 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
1424 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
1426 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlack(image,p),
1428 p+=(ptrdiff_t) GetPixelChannels(image);
1429 q+=(ptrdiff_t) quantum_info->pad;
1436static void ExportCMYKAQuantum(
const Image *image,QuantumInfo *quantum_info,
1437 const MagickSizeType number_pixels,
const Quantum *magick_restrict p,
1438 unsigned char *magick_restrict q,ExceptionInfo *exception)
1443 if (image->colorspace != CMYKColorspace)
1445 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1446 "ColorSeparatedImageRequired",
"`%s'",image->filename);
1449 switch (quantum_info->depth)
1456 for (x=0; x < (ssize_t) number_pixels; x++)
1458 pixel=ScaleQuantumToChar(GetPixelRed(image,p));
1459 q=PopCharPixel(pixel,q);
1460 pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
1461 q=PopCharPixel(pixel,q);
1462 pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
1463 q=PopCharPixel(pixel,q);
1464 pixel=ScaleQuantumToChar(GetPixelBlack(image,p));
1465 q=PopCharPixel(pixel,q);
1466 pixel=ScaleQuantumToChar(GetPixelAlpha(image,p));
1467 q=PopCharPixel(pixel,q);
1468 p+=(ptrdiff_t) GetPixelChannels(image);
1469 q+=(ptrdiff_t) quantum_info->pad;
1478 if (quantum_info->format == FloatingPointQuantumFormat)
1480 for (x=0; x < (ssize_t) number_pixels; x++)
1482 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
1483 GetPixelRed(image,p));
1484 q=PopShortPixel(quantum_info->endian,pixel,q);
1485 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
1486 GetPixelGreen(image,p));
1487 q=PopShortPixel(quantum_info->endian,pixel,q);
1488 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
1489 GetPixelBlue(image,p));
1490 q=PopShortPixel(quantum_info->endian,pixel,q);
1491 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
1492 GetPixelBlack(image,p));
1493 q=PopShortPixel(quantum_info->endian,pixel,q);
1494 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
1495 GetPixelAlpha(image,p));
1496 q=PopShortPixel(quantum_info->endian,pixel,q);
1497 p+=(ptrdiff_t) GetPixelChannels(image);
1498 q+=(ptrdiff_t) quantum_info->pad;
1502 for (x=0; x < (ssize_t) number_pixels; x++)
1504 pixel=ScaleQuantumToShort(GetPixelRed(image,p));
1505 q=PopShortPixel(quantum_info->endian,pixel,q);
1506 pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
1507 q=PopShortPixel(quantum_info->endian,pixel,q);
1508 pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
1509 q=PopShortPixel(quantum_info->endian,pixel,q);
1510 pixel=ScaleQuantumToShort(GetPixelBlack(image,p));
1511 q=PopShortPixel(quantum_info->endian,pixel,q);
1512 pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
1513 q=PopShortPixel(quantum_info->endian,pixel,q);
1514 p+=(ptrdiff_t) GetPixelChannels(image);
1515 q+=(ptrdiff_t) quantum_info->pad;
1524 if (quantum_info->format == FloatingPointQuantumFormat)
1526 for (x=0; x < (ssize_t) number_pixels; x++)
1528 q=PopQuantumFloatPixel(quantum_info,(
float)
1529 GetPixelRed(image,p),q);
1530 q=PopQuantumFloatPixel(quantum_info,(
float)
1531 GetPixelGreen(image,p),q);
1532 q=PopQuantumFloatPixel(quantum_info,(
float)
1533 GetPixelBlue(image,p),q);
1534 q=PopQuantumFloatPixel(quantum_info,(
float)
1535 GetPixelBlack(image,p),q);
1536 q=PopQuantumFloatPixel(quantum_info,(
float)
1537 GetPixelAlpha(image,p),q);
1538 p+=(ptrdiff_t) GetPixelChannels(image);
1539 q+=(ptrdiff_t) quantum_info->pad;
1543 for (x=0; x < (ssize_t) number_pixels; x++)
1545 pixel=ScaleQuantumToLong(GetPixelRed(image,p));
1546 q=PopLongPixel(quantum_info->endian,pixel,q);
1547 pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
1548 q=PopLongPixel(quantum_info->endian,pixel,q);
1549 pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
1550 q=PopLongPixel(quantum_info->endian,pixel,q);
1551 pixel=ScaleQuantumToLong(GetPixelBlack(image,p));
1552 q=PopLongPixel(quantum_info->endian,pixel,q);
1553 pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
1554 q=PopLongPixel(quantum_info->endian,pixel,q);
1555 p+=(ptrdiff_t) GetPixelChannels(image);
1556 q+=(ptrdiff_t) quantum_info->pad;
1562 if (quantum_info->format == FloatingPointQuantumFormat)
1564 for (x=0; x < (ssize_t) number_pixels; x++)
1566 q=PopQuantumDoublePixel(quantum_info,(
double)
1567 GetPixelRed(image,p),q);
1568 q=PopQuantumDoublePixel(quantum_info,(
double)
1569 GetPixelGreen(image,p),q);
1570 q=PopQuantumDoublePixel(quantum_info,(
double)
1571 GetPixelBlue(image,p),q);
1572 q=PopQuantumDoublePixel(quantum_info,(
double)
1573 GetPixelBlack(image,p),q);
1574 q=PopQuantumDoublePixel(quantum_info,(
double)
1575 GetPixelAlpha(image,p),q);
1576 p+=(ptrdiff_t) GetPixelChannels(image);
1577 q+=(ptrdiff_t) quantum_info->pad;
1588 range=GetQuantumRange(quantum_info->depth);
1589 for (x=0; x < (ssize_t) number_pixels; x++)
1591 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
1593 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
1595 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
1597 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlack(image,p),
1599 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
1601 p+=(ptrdiff_t) GetPixelChannels(image);
1602 q+=(ptrdiff_t) quantum_info->pad;
1609static void ExportCMYKOQuantum(
const Image *image,QuantumInfo *quantum_info,
1610 const MagickSizeType number_pixels,
const Quantum *magick_restrict p,
1611 unsigned char *magick_restrict q,ExceptionInfo *exception)
1616 if (image->colorspace != CMYKColorspace)
1618 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1619 "ColorSeparatedImageRequired",
"`%s'",image->filename);
1622 switch (quantum_info->depth)
1629 for (x=0; x < (ssize_t) number_pixels; x++)
1631 pixel=ScaleQuantumToChar(GetPixelRed(image,p));
1632 q=PopCharPixel(pixel,q);
1633 pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
1634 q=PopCharPixel(pixel,q);
1635 pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
1636 q=PopCharPixel(pixel,q);
1637 pixel=ScaleQuantumToChar(GetPixelBlack(image,p));
1638 q=PopCharPixel(pixel,q);
1639 pixel=ScaleQuantumToChar(GetPixelOpacity(image,p));
1640 q=PopCharPixel(pixel,q);
1641 p+=(ptrdiff_t) GetPixelChannels(image);
1642 q+=(ptrdiff_t) quantum_info->pad;
1651 if (quantum_info->format == FloatingPointQuantumFormat)
1653 for (x=0; x < (ssize_t) number_pixels; x++)
1655 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
1656 GetPixelRed(image,p));
1657 q=PopShortPixel(quantum_info->endian,pixel,q);
1658 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
1659 GetPixelGreen(image,p));
1660 q=PopShortPixel(quantum_info->endian,pixel,q);
1661 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
1662 GetPixelBlue(image,p));
1663 q=PopShortPixel(quantum_info->endian,pixel,q);
1664 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
1665 GetPixelBlack(image,p));
1666 q=PopShortPixel(quantum_info->endian,pixel,q);
1667 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
1668 GetPixelOpacity(image,p));
1669 q=PopShortPixel(quantum_info->endian,pixel,q);
1670 p+=(ptrdiff_t) GetPixelChannels(image);
1671 q+=(ptrdiff_t) quantum_info->pad;
1675 for (x=0; x < (ssize_t) number_pixels; x++)
1677 pixel=ScaleQuantumToShort(GetPixelRed(image,p));
1678 q=PopShortPixel(quantum_info->endian,pixel,q);
1679 pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
1680 q=PopShortPixel(quantum_info->endian,pixel,q);
1681 pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
1682 q=PopShortPixel(quantum_info->endian,pixel,q);
1683 pixel=ScaleQuantumToShort(GetPixelBlack(image,p));
1684 q=PopShortPixel(quantum_info->endian,pixel,q);
1685 pixel=ScaleQuantumToShort(GetPixelOpacity(image,p));
1686 q=PopShortPixel(quantum_info->endian,pixel,q);
1687 p+=(ptrdiff_t) GetPixelChannels(image);
1688 q+=(ptrdiff_t) quantum_info->pad;
1697 if (quantum_info->format == FloatingPointQuantumFormat)
1699 for (x=0; x < (ssize_t) number_pixels; x++)
1704 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelRed(image,p),q);
1705 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelGreen(image,p),
1707 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelBlue(image,p),
1709 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelBlack(image,p),
1711 float_pixel=(float) (GetPixelOpacity(image,p));
1712 q=PopQuantumFloatPixel(quantum_info,float_pixel,q);
1713 p+=(ptrdiff_t) GetPixelChannels(image);
1714 q+=(ptrdiff_t) quantum_info->pad;
1718 for (x=0; x < (ssize_t) number_pixels; x++)
1720 pixel=ScaleQuantumToLong(GetPixelRed(image,p));
1721 q=PopLongPixel(quantum_info->endian,pixel,q);
1722 pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
1723 q=PopLongPixel(quantum_info->endian,pixel,q);
1724 pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
1725 q=PopLongPixel(quantum_info->endian,pixel,q);
1726 pixel=ScaleQuantumToLong(GetPixelBlack(image,p));
1727 q=PopLongPixel(quantum_info->endian,pixel,q);
1728 pixel=ScaleQuantumToLong(GetPixelOpacity(image,p));
1729 q=PopLongPixel(quantum_info->endian,pixel,q);
1730 p+=(ptrdiff_t) GetPixelChannels(image);
1731 q+=(ptrdiff_t) quantum_info->pad;
1737 if (quantum_info->format == FloatingPointQuantumFormat)
1742 for (x=0; x < (ssize_t) number_pixels; x++)
1744 q=PopQuantumDoublePixel(quantum_info,(
double)
1745 GetPixelRed(image,p),q);
1746 q=PopQuantumDoublePixel(quantum_info,(
double)
1747 GetPixelGreen(image,p),q);
1748 q=PopQuantumDoublePixel(quantum_info,(
double)
1749 GetPixelBlue(image,p),q);
1750 q=PopQuantumDoublePixel(quantum_info,(
double)
1751 GetPixelBlack(image,p),q);
1752 pixel=(double) (GetPixelOpacity(image,p));
1753 q=PopQuantumDoublePixel(quantum_info,pixel,q);
1754 p+=(ptrdiff_t) GetPixelChannels(image);
1755 q+=(ptrdiff_t) quantum_info->pad;
1766 range=GetQuantumRange(quantum_info->depth);
1767 for (x=0; x < (ssize_t) number_pixels; x++)
1769 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
1771 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
1773 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
1775 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlack(image,p),
1777 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(
1778 GetPixelOpacity(image,p),range),q);
1779 p+=(ptrdiff_t) GetPixelChannels(image);
1780 q+=(ptrdiff_t) quantum_info->pad;
1787static void ExportGrayQuantum(
const Image *image,QuantumInfo *quantum_info,
1788 const MagickSizeType number_pixels,
const Quantum *magick_restrict p,
1789 unsigned char *magick_restrict q)
1797 switch (quantum_info->depth)
1813 if (quantum_info->min_is_white != MagickFalse)
1818 threshold=(double) QuantumRange/2.0;
1819 for (x=((ssize_t) number_pixels-7); x > 0; x-=8)
1822 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 7;
1823 p+=(ptrdiff_t) GetPixelChannels(image);
1824 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 6;
1825 p+=(ptrdiff_t) GetPixelChannels(image);
1826 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 5;
1827 p+=(ptrdiff_t) GetPixelChannels(image);
1828 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 4;
1829 p+=(ptrdiff_t) GetPixelChannels(image);
1830 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 3;
1831 p+=(ptrdiff_t) GetPixelChannels(image);
1832 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 2;
1833 p+=(ptrdiff_t) GetPixelChannels(image);
1834 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 1;
1835 p+=(ptrdiff_t) GetPixelChannels(image);
1836 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 0;
1837 p+=(ptrdiff_t) GetPixelChannels(image);
1840 if ((number_pixels % 8) != 0)
1843 for (bit=7; bit >= (ssize_t) (8-(number_pixels % 8)); bit--)
1845 *q|=(GetPixelLuma(image,p) < threshold ? black : white) << bit;
1846 p+=(ptrdiff_t) GetPixelChannels(image);
1857 for (x=0; x < ((ssize_t) number_pixels-1) ; x+=2)
1859 pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
1860 *q=(((pixel >> 4) & 0xf) << 4);
1861 p+=(ptrdiff_t) GetPixelChannels(image);
1862 pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
1864 p+=(ptrdiff_t) GetPixelChannels(image);
1867 if ((number_pixels % 2) != 0)
1869 pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
1870 *q=(((pixel >> 4) & 0xf) << 4);
1871 p+=(ptrdiff_t) GetPixelChannels(image);
1881 for (x=0; x < (ssize_t) number_pixels; x++)
1883 pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
1884 q=PopCharPixel(pixel,q);
1885 p+=(ptrdiff_t) GetPixelChannels(image);
1886 q+=(ptrdiff_t) quantum_info->pad;
1892 range=GetQuantumRange(quantum_info->depth);
1893 if (quantum_info->pack == MagickFalse)
1898 for (x=0; x < ((ssize_t) number_pixels-2); x+=3)
1900 pixel=(
unsigned int) (ScaleQuantumToAny(ClampToQuantum(
1901 GetPixelLuma(image,p+2*GetPixelChannels(image))),range) << 22 |
1902 ScaleQuantumToAny(ClampToQuantum(GetPixelLuma(image,p+
1903 GetPixelChannels(image))),range) << 12 | ScaleQuantumToAny(
1904 ClampToQuantum(GetPixelLuma(image,p)),range) << 2);
1905 q=PopLongPixel(quantum_info->endian,pixel,q);
1906 p+=(ptrdiff_t) 3*GetPixelChannels(image);
1907 q+=(ptrdiff_t) quantum_info->pad;
1909 if (x < (ssize_t) number_pixels)
1912 if (x++ < ((ssize_t) number_pixels-1))
1913 pixel|=ScaleQuantumToAny(ClampToQuantum(GetPixelLuma(image,p+
1914 GetPixelChannels(image))),range) << 12;
1915 if (x++ < (ssize_t) number_pixels)
1916 pixel|=ScaleQuantumToAny(ClampToQuantum(GetPixelLuma(image,p)),
1918 q=PopLongPixel(quantum_info->endian,pixel,q);
1922 for (x=0; x < (ssize_t) number_pixels; x++)
1924 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(ClampToQuantum(
1925 GetPixelLuma(image,p)),range),q);
1926 p+=(ptrdiff_t) GetPixelChannels(image);
1927 q+=(ptrdiff_t) quantum_info->pad;
1936 range=GetQuantumRange(quantum_info->depth);
1937 if (quantum_info->pack == MagickFalse)
1939 for (x=0; x < (ssize_t) number_pixels; x++)
1941 pixel=ScaleQuantumToShort(ClampToQuantum(GetPixelLuma(image,p)));
1942 q=PopShortPixel(quantum_info->endian,(
unsigned short) (pixel >> 4),
1944 p+=(ptrdiff_t) GetPixelChannels(image);
1945 q+=(ptrdiff_t) quantum_info->pad;
1949 for (x=0; x < (ssize_t) number_pixels; x++)
1951 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(ClampToQuantum(
1952 GetPixelLuma(image,p)),range),q);
1953 p+=(ptrdiff_t) GetPixelChannels(image);
1954 q+=(ptrdiff_t) quantum_info->pad;
1963 if (quantum_info->format == FloatingPointQuantumFormat)
1965 for (x=0; x < (ssize_t) number_pixels; x++)
1967 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
1968 GetPixelLuma(image,p));
1969 q=PopShortPixel(quantum_info->endian,pixel,q);
1970 p+=(ptrdiff_t) GetPixelChannels(image);
1971 q+=(ptrdiff_t) quantum_info->pad;
1975 for (x=0; x < (ssize_t) number_pixels; x++)
1977 pixel=ScaleQuantumToShort(ClampToQuantum(GetPixelLuma(image,p)));
1978 q=PopShortPixel(quantum_info->endian,pixel,q);
1979 p+=(ptrdiff_t) GetPixelChannels(image);
1980 q+=(ptrdiff_t) quantum_info->pad;
1989 if (quantum_info->format == FloatingPointQuantumFormat)
1991 for (x=0; x < (ssize_t) number_pixels; x++)
1996 float_pixel=(float) GetPixelLuma(image,p);
1997 q=PopQuantumFloatPixel(quantum_info,float_pixel,q);
1998 p+=(ptrdiff_t) GetPixelChannels(image);
1999 q+=(ptrdiff_t) quantum_info->pad;
2003 for (x=0; x < (ssize_t) number_pixels; x++)
2005 pixel=ScaleQuantumToLong(ClampToQuantum(GetPixelLuma(image,p)));
2006 q=PopLongPixel(quantum_info->endian,pixel,q);
2007 p+=(ptrdiff_t) GetPixelChannels(image);
2008 q+=(ptrdiff_t) quantum_info->pad;
2014 if (quantum_info->format == FloatingPointQuantumFormat)
2016 for (x=0; x < (ssize_t) number_pixels; x++)
2021 pixel=GetPixelLuma(image,p);
2022 q=PopQuantumDoublePixel(quantum_info,pixel,q);
2023 p+=(ptrdiff_t) GetPixelChannels(image);
2024 q+=(ptrdiff_t) quantum_info->pad;
2032 range=GetQuantumRange(quantum_info->depth);
2033 for (x=0; x < (ssize_t) number_pixels; x++)
2035 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(ClampToQuantum(
2036 GetPixelLuma(image,p)),range),q);
2037 p+=(ptrdiff_t) GetPixelChannels(image);
2038 q+=(ptrdiff_t) quantum_info->pad;
2045static void ExportGrayAlphaQuantum(
const Image *image,QuantumInfo *quantum_info,
2046 const MagickSizeType number_pixels,
const Quantum *magick_restrict p,
2047 unsigned char *magick_restrict q)
2055 switch (quantum_info->depth)
2072 if (quantum_info->min_is_white != MagickFalse)
2077 threshold=(double) QuantumRange/2.0;
2078 for (x=((ssize_t) number_pixels-3); x > 0; x-=4)
2081 *q|=(GetPixelLuma(image,p) > threshold ? black : white) << 7;
2082 pixel=(
unsigned char) (GetPixelAlpha(image,p) == OpaqueAlpha ?
2084 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 6);
2085 p+=(ptrdiff_t) GetPixelChannels(image);
2086 *q|=(GetPixelLuma(image,p) > threshold ? black : white) << 5;
2087 pixel=(
unsigned char) (GetPixelAlpha(image,p) == OpaqueAlpha ?
2089 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 4);
2090 p+=(ptrdiff_t) GetPixelChannels(image);
2091 *q|=(GetPixelLuma(image,p) > threshold ? black : white) << 3;
2092 pixel=(
unsigned char) (GetPixelAlpha(image,p) == OpaqueAlpha ?
2094 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 2);
2095 p+=(ptrdiff_t) GetPixelChannels(image);
2096 *q|=(GetPixelLuma(image,p) > threshold ? black : white) << 1;
2097 pixel=(
unsigned char) (GetPixelAlpha(image,p) == OpaqueAlpha ?
2099 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 0);
2100 p+=(ptrdiff_t) GetPixelChannels(image);
2103 if ((number_pixels % 4) != 0)
2106 for (bit=0; bit <= (ssize_t) (number_pixels % 4); bit+=2)
2108 *q|=(GetPixelLuma(image,p) > threshold ? black : white) <<
2110 pixel=(
unsigned char) (GetPixelAlpha(image,p) == OpaqueAlpha ?
2112 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << (
unsigned char)
2114 p+=(ptrdiff_t) GetPixelChannels(image);
2125 for (x=0; x < (ssize_t) number_pixels ; x++)
2127 pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
2128 *q=(((pixel >> 4) & 0xf) << 4);
2129 pixel=(
unsigned char) (16.0*QuantumScale*(
double)
2130 GetPixelAlpha(image,p)+0.5);
2132 p+=(ptrdiff_t) GetPixelChannels(image);
2142 for (x=0; x < (ssize_t) number_pixels; x++)
2144 pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
2145 q=PopCharPixel(pixel,q);
2146 pixel=ScaleQuantumToChar(GetPixelAlpha(image,p));
2147 q=PopCharPixel(pixel,q);
2148 p+=(ptrdiff_t) GetPixelChannels(image);
2149 q+=(ptrdiff_t) quantum_info->pad;
2158 if (quantum_info->format == FloatingPointQuantumFormat)
2160 for (x=0; x < (ssize_t) number_pixels; x++)
2162 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
2163 GetPixelLuma(image,p));
2164 q=PopShortPixel(quantum_info->endian,pixel,q);
2165 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
2166 GetPixelAlpha(image,p));
2167 q=PopShortPixel(quantum_info->endian,pixel,q);
2168 p+=(ptrdiff_t) GetPixelChannels(image);
2169 q+=(ptrdiff_t) quantum_info->pad;
2173 for (x=0; x < (ssize_t) number_pixels; x++)
2175 pixel=ScaleQuantumToShort(ClampToQuantum(GetPixelLuma(image,p)));
2176 q=PopShortPixel(quantum_info->endian,pixel,q);
2177 pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
2178 q=PopShortPixel(quantum_info->endian,pixel,q);
2179 p+=(ptrdiff_t) GetPixelChannels(image);
2180 q+=(ptrdiff_t) quantum_info->pad;
2189 if (quantum_info->format == FloatingPointQuantumFormat)
2191 for (x=0; x < (ssize_t) number_pixels; x++)
2196 float_pixel=(float) GetPixelLuma(image,p);
2197 q=PopQuantumFloatPixel(quantum_info,float_pixel,q);
2198 float_pixel=(float) (GetPixelAlpha(image,p));
2199 q=PopQuantumFloatPixel(quantum_info,float_pixel,q);
2200 p+=(ptrdiff_t) GetPixelChannels(image);
2201 q+=(ptrdiff_t) quantum_info->pad;
2205 for (x=0; x < (ssize_t) number_pixels; x++)
2207 pixel=ScaleQuantumToLong(ClampToQuantum(GetPixelLuma(image,p)));
2208 q=PopLongPixel(quantum_info->endian,pixel,q);
2209 pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
2210 q=PopLongPixel(quantum_info->endian,pixel,q);
2211 p+=(ptrdiff_t) GetPixelChannels(image);
2212 q+=(ptrdiff_t) quantum_info->pad;
2218 if (quantum_info->format == FloatingPointQuantumFormat)
2220 for (x=0; x < (ssize_t) number_pixels; x++)
2225 pixel=GetPixelLuma(image,p);
2226 q=PopQuantumDoublePixel(quantum_info,pixel,q);
2227 pixel=(double) (GetPixelAlpha(image,p));
2228 q=PopQuantumDoublePixel(quantum_info,pixel,q);
2229 p+=(ptrdiff_t) GetPixelChannels(image);
2230 q+=(ptrdiff_t) quantum_info->pad;
2238 range=GetQuantumRange(quantum_info->depth);
2239 for (x=0; x < (ssize_t) number_pixels; x++)
2241 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(ClampToQuantum(
2242 GetPixelLuma(image,p)),range),q);
2243 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
2245 p+=(ptrdiff_t) GetPixelChannels(image);
2246 q+=(ptrdiff_t) quantum_info->pad;
2253static void ExportIndexQuantum(
const Image *image,QuantumInfo *quantum_info,
2254 const MagickSizeType number_pixels,
const Quantum *magick_restrict p,
2255 unsigned char *magick_restrict q,ExceptionInfo *exception)
2263 if (image->storage_class != PseudoClass)
2265 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2266 "ColormappedImageRequired",
"`%s'",image->filename);
2269 switch (quantum_info->depth)
2276 for (x=((ssize_t) number_pixels-7); x > 0; x-=8)
2278 pixel=(
unsigned char) ((ssize_t) GetPixelIndex(image,p));
2279 *q=((pixel & 0x01) << 7);
2280 p+=(ptrdiff_t) GetPixelChannels(image);
2281 pixel=(
unsigned char) ((ssize_t) GetPixelIndex(image,p));
2282 *q|=((pixel & 0x01) << 6);
2283 p+=(ptrdiff_t) GetPixelChannels(image);
2284 pixel=(
unsigned char) ((ssize_t) GetPixelIndex(image,p));
2285 *q|=((pixel & 0x01) << 5);
2286 p+=(ptrdiff_t) GetPixelChannels(image);
2287 pixel=(
unsigned char) ((ssize_t) GetPixelIndex(image,p));
2288 *q|=((pixel & 0x01) << 4);
2289 p+=(ptrdiff_t) GetPixelChannels(image);
2290 pixel=(
unsigned char) ((ssize_t) GetPixelIndex(image,p));
2291 *q|=((pixel & 0x01) << 3);
2292 p+=(ptrdiff_t) GetPixelChannels(image);
2293 pixel=(
unsigned char) ((ssize_t) GetPixelIndex(image,p));
2294 *q|=((pixel & 0x01) << 2);
2295 p+=(ptrdiff_t) GetPixelChannels(image);
2296 pixel=(
unsigned char) ((ssize_t) GetPixelIndex(image,p));
2297 *q|=((pixel & 0x01) << 1);
2298 p+=(ptrdiff_t) GetPixelChannels(image);
2299 pixel=(
unsigned char) ((ssize_t) GetPixelIndex(image,p));
2300 *q|=((pixel & 0x01) << 0);
2301 p+=(ptrdiff_t) GetPixelChannels(image);
2304 if ((number_pixels % 8) != 0)
2307 for (bit=7; bit >= (ssize_t) (8-(number_pixels % 8)); bit--)
2309 pixel=(
unsigned char) ((ssize_t) GetPixelIndex(image,p));
2310 *q|=((pixel & 0x01) << (
unsigned char) bit);
2311 p+=(ptrdiff_t) GetPixelChannels(image);
2322 for (x=0; x < ((ssize_t) number_pixels-1) ; x+=2)
2324 pixel=(
unsigned char) ((ssize_t) GetPixelIndex(image,p));
2325 *q=((pixel & 0xf) << 4);
2326 p+=(ptrdiff_t) GetPixelChannels(image);
2327 pixel=(
unsigned char) ((ssize_t) GetPixelIndex(image,p));
2328 *q|=((pixel & 0xf) << 0);
2329 p+=(ptrdiff_t) GetPixelChannels(image);
2332 if ((number_pixels % 2) != 0)
2334 pixel=(
unsigned char) ((ssize_t) GetPixelIndex(image,p));
2335 *q=((pixel & 0xf) << 4);
2336 p+=(ptrdiff_t) GetPixelChannels(image);
2343 for (x=0; x < (ssize_t) number_pixels; x++)
2345 q=PopCharPixel((
unsigned char) ((ssize_t) GetPixelIndex(image,p)),q);
2346 p+=(ptrdiff_t) GetPixelChannels(image);
2347 q+=(ptrdiff_t) quantum_info->pad;
2353 if (quantum_info->format == FloatingPointQuantumFormat)
2355 for (x=0; x < (ssize_t) number_pixels; x++)
2357 q=PopShortPixel(quantum_info->endian,SinglePrecisionToHalf(
2358 QuantumScale*(
double) GetPixelIndex(image,p)),q);
2359 p+=(ptrdiff_t) GetPixelChannels(image);
2360 q+=(ptrdiff_t) quantum_info->pad;
2364 for (x=0; x < (ssize_t) number_pixels; x++)
2366 q=PopShortPixel(quantum_info->endian,(
unsigned short)
2367 GetPixelIndex(image,p),q);
2368 p+=(ptrdiff_t) GetPixelChannels(image);
2369 q+=(ptrdiff_t) quantum_info->pad;
2375 if (quantum_info->format == FloatingPointQuantumFormat)
2377 for (x=0; x < (ssize_t) number_pixels; x++)
2379 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelIndex(image,p),q);
2380 p+=(ptrdiff_t) GetPixelChannels(image);
2381 q+=(ptrdiff_t) quantum_info->pad;
2385 for (x=0; x < (ssize_t) number_pixels; x++)
2387 q=PopLongPixel(quantum_info->endian,(
unsigned int)
2388 GetPixelIndex(image,p),q);
2389 p+=(ptrdiff_t) GetPixelChannels(image);
2390 q+=(ptrdiff_t) quantum_info->pad;
2396 if (quantum_info->format == FloatingPointQuantumFormat)
2398 for (x=0; x < (ssize_t) number_pixels; x++)
2400 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelIndex(image,p),q);
2401 p+=(ptrdiff_t) GetPixelChannels(image);
2402 q+=(ptrdiff_t) quantum_info->pad;
2410 for (x=0; x < (ssize_t) number_pixels; x++)
2412 q=PopQuantumPixel(quantum_info,(QuantumAny) GetPixelIndex(image,p),q);
2413 p+=(ptrdiff_t) GetPixelChannels(image);
2414 q+=(ptrdiff_t) quantum_info->pad;
2421static void ExportIndexAlphaQuantum(
const Image *image,
2422 QuantumInfo *quantum_info,
const MagickSizeType number_pixels,
2423 const Quantum *magick_restrict p,
unsigned char *magick_restrict q,
2424 ExceptionInfo *exception)
2432 if (image->storage_class != PseudoClass)
2434 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2435 "ColormappedImageRequired",
"`%s'",image->filename);
2438 switch (quantum_info->depth)
2445 for (x=((ssize_t) number_pixels-3); x > 0; x-=4)
2447 pixel=(
unsigned char) ((ssize_t) GetPixelIndex(image,p));
2448 *q=((pixel & 0x01) << 7);
2449 pixel=(
unsigned char) (GetPixelAlpha(image,p) == (Quantum)
2450 TransparentAlpha ? 1 : 0);
2451 *q|=((pixel & 0x01) << 6);
2452 p+=(ptrdiff_t) GetPixelChannels(image);
2453 pixel=(
unsigned char) ((ssize_t) GetPixelIndex(image,p));
2454 *q|=((pixel & 0x01) << 5);
2455 pixel=(
unsigned char) (GetPixelAlpha(image,p) == (Quantum)
2456 TransparentAlpha ? 1 : 0);
2457 *q|=((pixel & 0x01) << 4);
2458 p+=(ptrdiff_t) GetPixelChannels(image);
2459 pixel=(
unsigned char) ((ssize_t) GetPixelIndex(image,p));
2460 *q|=((pixel & 0x01) << 3);
2461 pixel=(
unsigned char) (GetPixelAlpha(image,p) == (Quantum)
2462 TransparentAlpha ? 1 : 0);
2463 *q|=((pixel & 0x01) << 2);
2464 p+=(ptrdiff_t) GetPixelChannels(image);
2465 pixel=(
unsigned char) ((ssize_t) GetPixelIndex(image,p));
2466 *q|=((pixel & 0x01) << 1);
2467 pixel=(
unsigned char) (GetPixelAlpha(image,p) == (Quantum)
2468 TransparentAlpha ? 1 : 0);
2469 *q|=((pixel & 0x01) << 0);
2470 p+=(ptrdiff_t) GetPixelChannels(image);
2473 if ((number_pixels % 4) != 0)
2476 for (bit=3; bit >= (ssize_t) (4-(number_pixels % 4)); bit-=2)
2478 pixel=(
unsigned char) ((ssize_t) GetPixelIndex(image,p));
2479 *q|=((pixel & 0x01) << (
unsigned char) (bit+4));
2480 pixel=(
unsigned char) (GetPixelAlpha(image,p) == (Quantum)
2481 TransparentAlpha ? 1 : 0);
2482 *q|=((pixel & 0x01) << (
unsigned char) (bit+4-1));
2483 p+=(ptrdiff_t) GetPixelChannels(image);
2494 for (x=0; x < (ssize_t) number_pixels ; x++)
2496 pixel=(
unsigned char) ((ssize_t) GetPixelIndex(image,p));
2497 *q=((pixel & 0xf) << 4);
2498 pixel=(
unsigned char) (16.0*QuantumScale*(
double)
2499 GetPixelAlpha(image,p)+0.5);
2500 *q|=((pixel & 0xf) << 0);
2501 p+=(ptrdiff_t) GetPixelChannels(image);
2511 for (x=0; x < (ssize_t) number_pixels; x++)
2513 q=PopCharPixel((
unsigned char) ((ssize_t) GetPixelIndex(image,p)),q);
2514 pixel=ScaleQuantumToChar(GetPixelAlpha(image,p));
2515 q=PopCharPixel(pixel,q);
2516 p+=(ptrdiff_t) GetPixelChannels(image);
2517 q+=(ptrdiff_t) quantum_info->pad;
2526 if (quantum_info->format == FloatingPointQuantumFormat)
2528 for (x=0; x < (ssize_t) number_pixels; x++)
2530 q=PopShortPixel(quantum_info->endian,(
unsigned short)
2531 ((ssize_t) GetPixelIndex(image,p)),q);
2532 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
2533 GetPixelAlpha(image,p));
2534 q=PopShortPixel(quantum_info->endian,pixel,q);
2535 p+=(ptrdiff_t) GetPixelChannels(image);
2536 q+=(ptrdiff_t) quantum_info->pad;
2540 for (x=0; x < (ssize_t) number_pixels; x++)
2542 q=PopShortPixel(quantum_info->endian,(
unsigned short)
2543 ((ssize_t) GetPixelIndex(image,p)),q);
2544 pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
2545 q=PopShortPixel(quantum_info->endian,pixel,q);
2546 p+=(ptrdiff_t) GetPixelChannels(image);
2547 q+=(ptrdiff_t) quantum_info->pad;
2556 if (quantum_info->format == FloatingPointQuantumFormat)
2558 for (x=0; x < (ssize_t) number_pixels; x++)
2563 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelIndex(image,p),q);
2564 float_pixel=(float) GetPixelAlpha(image,p);
2565 q=PopQuantumFloatPixel(quantum_info,float_pixel,q);
2566 p+=(ptrdiff_t) GetPixelChannels(image);
2567 q+=(ptrdiff_t) quantum_info->pad;
2571 for (x=0; x < (ssize_t) number_pixels; x++)
2573 q=PopLongPixel(quantum_info->endian,(
unsigned int)
2574 GetPixelIndex(image,p),q);
2575 pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
2576 q=PopLongPixel(quantum_info->endian,pixel,q);
2577 p+=(ptrdiff_t) GetPixelChannels(image);
2578 q+=(ptrdiff_t) quantum_info->pad;
2584 if (quantum_info->format == FloatingPointQuantumFormat)
2586 for (x=0; x < (ssize_t) number_pixels; x++)
2591 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelIndex(image,p),q);
2592 pixel=(double) GetPixelAlpha(image,p);
2593 q=PopQuantumDoublePixel(quantum_info,pixel,q);
2594 p+=(ptrdiff_t) GetPixelChannels(image);
2595 q+=(ptrdiff_t) quantum_info->pad;
2606 range=GetQuantumRange(quantum_info->depth);
2607 for (x=0; x < (ssize_t) number_pixels; x++)
2609 q=PopQuantumPixel(quantum_info,(QuantumAny) GetPixelIndex(image,p),q);
2610 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
2612 p+=(ptrdiff_t) GetPixelChannels(image);
2613 q+=(ptrdiff_t) quantum_info->pad;
2620static void ExportMultispectralQuantum(
const Image *image,
2621 QuantumInfo *quantum_info,
const MagickSizeType number_pixels,
2622 const Quantum *magick_restrict p,
unsigned char *magick_restrict q,
2623 ExceptionInfo *exception)
2629 if (image->number_meta_channels == 0)
2631 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2632 "MultispectralImageRequired",
"`%s'",image->filename);
2635 if (quantum_info->meta_channel != 0)
2637 ExportPixelChannel(image,quantum_info,number_pixels,p,q,
2638 (PixelChannel) (MetaPixelChannels+quantum_info->meta_channel-1));
2641 switch (quantum_info->depth)
2648 for (x=0; x < (ssize_t) number_pixels; x++)
2650 for (i=0; i < (ssize_t) GetImageChannels(image); i++)
2652 pixel=ScaleQuantumToChar(p[i]);
2653 q=PopCharPixel(pixel,q);
2655 p+=(ptrdiff_t) GetPixelChannels(image);
2656 q+=(ptrdiff_t) quantum_info->pad;
2665 if (quantum_info->format == FloatingPointQuantumFormat)
2667 for (x=0; x < (ssize_t) number_pixels; x++)
2669 for (i=0; i < (ssize_t) GetImageChannels(image); i++)
2671 pixel=SinglePrecisionToHalf(QuantumScale*(
double) p[i]);
2672 q=PopShortPixel(quantum_info->endian,pixel,q);
2674 p+=(ptrdiff_t) GetPixelChannels(image);
2675 q+=(ptrdiff_t) quantum_info->pad;
2679 for (x=0; x < (ssize_t) number_pixels; x++)
2681 for (i=0; i < (ssize_t) GetImageChannels(image); i++)
2683 pixel=ScaleQuantumToShort(p[i]);
2684 q=PopShortPixel(quantum_info->endian,pixel,q);
2686 p+=(ptrdiff_t) GetPixelChannels(image);
2687 q+=(ptrdiff_t) quantum_info->pad;
2696 if (quantum_info->format == FloatingPointQuantumFormat)
2698 for (x=0; x < (ssize_t) number_pixels; x++)
2700 for (i=0; i < (ssize_t) GetImageChannels(image); i++)
2701 q=PopQuantumFloatPixel(quantum_info,(
float) p[i],q);
2702 p+=(ptrdiff_t) GetPixelChannels(image);
2703 q+=(ptrdiff_t) quantum_info->pad;
2707 for (x=0; x < (ssize_t) number_pixels; x++)
2709 for (i=0; i < (ssize_t) GetImageChannels(image); i++)
2711 pixel=ScaleQuantumToLong(p[i]);
2712 q=PopLongPixel(quantum_info->endian,pixel,q);
2714 p+=(ptrdiff_t) GetPixelChannels(image);
2715 q+=(ptrdiff_t) quantum_info->pad;
2721 if (quantum_info->format == FloatingPointQuantumFormat)
2723 for (x=0; x < (ssize_t) number_pixels; x++)
2725 for (i=0; i < (ssize_t) GetImageChannels(image); i++)
2726 q=PopQuantumDoublePixel(quantum_info,(
double) p[i],q);
2727 p+=(ptrdiff_t) GetPixelChannels(image);
2728 q+=(ptrdiff_t) quantum_info->pad;
2739 range=GetQuantumRange(quantum_info->depth);
2740 for (x=0; x < (ssize_t) number_pixels; x++)
2742 for (i=0; i < (ssize_t) GetImageChannels(image); i++)
2743 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(p[i],range),q);
2744 p+=(ptrdiff_t) GetPixelChannels(image);
2745 q+=(ptrdiff_t) quantum_info->pad;
2752static void ExportOpacityQuantum(
const Image *image,QuantumInfo *quantum_info,
2753 const MagickSizeType number_pixels,
const Quantum *magick_restrict p,
2754 unsigned char *magick_restrict q,ExceptionInfo *exception)
2762 if (image->alpha_trait == UndefinedPixelTrait)
2764 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2765 "ImageDoesNotHaveAnAlphaChannel",
"`%s'",image->filename);
2768 switch (quantum_info->depth)
2775 for (x=0; x < (ssize_t) number_pixels; x++)
2777 pixel=ScaleQuantumToChar(GetPixelOpacity(image,p));
2778 q=PopCharPixel(pixel,q);
2779 p+=(ptrdiff_t) GetPixelChannels(image);
2780 q+=(ptrdiff_t) quantum_info->pad;
2789 if (quantum_info->format == FloatingPointQuantumFormat)
2791 for (x=0; x < (ssize_t) number_pixels; x++)
2793 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
2794 GetPixelOpacity(image,p));
2795 q=PopShortPixel(quantum_info->endian,pixel,q);
2796 p+=(ptrdiff_t) GetPixelChannels(image);
2797 q+=(ptrdiff_t) quantum_info->pad;
2801 for (x=0; x < (ssize_t) number_pixels; x++)
2803 pixel=ScaleQuantumToShort(GetPixelOpacity(image,p));
2804 q=PopShortPixel(quantum_info->endian,pixel,q);
2805 p+=(ptrdiff_t) GetPixelChannels(image);
2806 q+=(ptrdiff_t) quantum_info->pad;
2815 if (quantum_info->format == FloatingPointQuantumFormat)
2817 for (x=0; x < (ssize_t) number_pixels; x++)
2819 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelOpacity(image,p),q);
2820 p+=(ptrdiff_t) GetPixelChannels(image);
2821 q+=(ptrdiff_t) quantum_info->pad;
2825 for (x=0; x < (ssize_t) number_pixels; x++)
2827 pixel=ScaleQuantumToLong(GetPixelOpacity(image,p));
2828 q=PopLongPixel(quantum_info->endian,pixel,q);
2829 p+=(ptrdiff_t) GetPixelChannels(image);
2830 q+=(ptrdiff_t) quantum_info->pad;
2836 if (quantum_info->format == FloatingPointQuantumFormat)
2838 for (x=0; x < (ssize_t) number_pixels; x++)
2840 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelOpacity(image,p),q);
2841 p+=(ptrdiff_t) GetPixelChannels(image);
2842 q+=(ptrdiff_t) quantum_info->pad;
2850 range=GetQuantumRange(quantum_info->depth);
2851 for (x=0; x < (ssize_t) number_pixels; x++)
2853 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(
2854 GetPixelOpacity(image,p),range),q);
2855 p+=(ptrdiff_t) GetPixelChannels(image);
2856 q+=(ptrdiff_t) quantum_info->pad;
2863static void ExportRGBQuantum(
const Image *image,QuantumInfo *quantum_info,
2864 const MagickSizeType number_pixels,
const Quantum *magick_restrict p,
2865 unsigned char *magick_restrict q)
2876 switch (quantum_info->depth)
2880 for (x=0; x < (ssize_t) number_pixels; x++)
2882 q=PopCharPixel(ScaleQuantumToChar(GetPixelRed(image,p)),q);
2883 q=PopCharPixel(ScaleQuantumToChar(GetPixelGreen(image,p)),q);
2884 q=PopCharPixel(ScaleQuantumToChar(GetPixelBlue(image,p)),q);
2885 p+=(ptrdiff_t) GetPixelChannels(image);
2886 q+=(ptrdiff_t) quantum_info->pad;
2895 range=GetQuantumRange(quantum_info->depth);
2896 if (quantum_info->pack == MagickFalse)
2898 for (x=0; x < (ssize_t) number_pixels; x++)
2900 pixel=(
unsigned int) (
2901 ScaleQuantumToAny(GetPixelRed(image,p),range) << 22 |
2902 ScaleQuantumToAny(GetPixelGreen(image,p),range) << 12 |
2903 ScaleQuantumToAny(GetPixelBlue(image,p),range) << 2);
2904 q=PopLongPixel(quantum_info->endian,pixel,q);
2905 p+=(ptrdiff_t) GetPixelChannels(image);
2906 q+=(ptrdiff_t) quantum_info->pad;
2910 if (quantum_info->quantum == 32UL)
2912 for (x=0; x < (ssize_t) number_pixels; x++)
2914 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
2915 q=PopQuantumLongPixel(quantum_info,pixel,q);
2916 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
2918 q=PopQuantumLongPixel(quantum_info,pixel,q);
2919 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
2920 q=PopQuantumLongPixel(quantum_info,pixel,q);
2921 p+=(ptrdiff_t) GetPixelChannels(image);
2922 q+=(ptrdiff_t) quantum_info->pad;
2926 for (x=0; x < (ssize_t) number_pixels; x++)
2928 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
2929 q=PopQuantumPixel(quantum_info,pixel,q);
2930 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
2931 q=PopQuantumPixel(quantum_info,pixel,q);
2932 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
2933 q=PopQuantumPixel(quantum_info,pixel,q);
2934 p+=(ptrdiff_t) GetPixelChannels(image);
2935 q+=(ptrdiff_t) quantum_info->pad;
2944 range=GetQuantumRange(quantum_info->depth);
2945 if (quantum_info->pack == MagickFalse)
2947 for (x=0; x < (3*(ssize_t) number_pixels-1); x+=2)
2954 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),
2960 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
2966 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),
2968 p+=(ptrdiff_t) GetPixelChannels(image);
2972 q=PopShortPixel(quantum_info->endian,(
unsigned short) (pixel << 4),
2979 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),
2985 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
2991 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),
2993 p+=(ptrdiff_t) GetPixelChannels(image);
2997 q=PopShortPixel(quantum_info->endian,(
unsigned short) (pixel << 4),
2999 q+=(ptrdiff_t) quantum_info->pad;
3001 for (bit=0; bit < (ssize_t) (3*number_pixels % 2); bit++)
3003 switch ((x+bit) % 3)
3008 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),
3014 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
3020 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),
3022 p+=(ptrdiff_t) GetPixelChannels(image);
3026 q=PopShortPixel(quantum_info->endian,(
unsigned short) (pixel << 4),
3028 q+=(ptrdiff_t) quantum_info->pad;
3031 p+=(ptrdiff_t) GetPixelChannels(image);
3034 if (quantum_info->quantum == 32UL)
3036 for (x=0; x < (ssize_t) number_pixels; x++)
3038 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
3039 q=PopQuantumLongPixel(quantum_info,pixel,q);
3040 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
3042 q=PopQuantumLongPixel(quantum_info,pixel,q);
3043 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
3044 q=PopQuantumLongPixel(quantum_info,pixel,q);
3045 p+=(ptrdiff_t) GetPixelChannels(image);
3046 q+=(ptrdiff_t) quantum_info->pad;
3050 for (x=0; x < (ssize_t) number_pixels; x++)
3052 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
3053 q=PopQuantumPixel(quantum_info,pixel,q);
3054 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
3055 q=PopQuantumPixel(quantum_info,pixel,q);
3056 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
3057 q=PopQuantumPixel(quantum_info,pixel,q);
3058 p+=(ptrdiff_t) GetPixelChannels(image);
3059 q+=(ptrdiff_t) quantum_info->pad;
3068 if (quantum_info->format == FloatingPointQuantumFormat)
3070 for (x=0; x < (ssize_t) number_pixels; x++)
3072 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
3073 GetPixelRed(image,p));
3074 q=PopShortPixel(quantum_info->endian,pixel,q);
3075 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
3076 GetPixelGreen(image,p));
3077 q=PopShortPixel(quantum_info->endian,pixel,q);
3078 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
3079 GetPixelBlue(image,p));
3080 q=PopShortPixel(quantum_info->endian,pixel,q);
3081 p+=(ptrdiff_t) GetPixelChannels(image);
3082 q+=(ptrdiff_t) quantum_info->pad;
3086 for (x=0; x < (ssize_t) number_pixels; x++)
3088 pixel=ScaleQuantumToShort(GetPixelRed(image,p));
3089 q=PopShortPixel(quantum_info->endian,pixel,q);
3090 pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
3091 q=PopShortPixel(quantum_info->endian,pixel,q);
3092 pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
3093 q=PopShortPixel(quantum_info->endian,pixel,q);
3094 p+=(ptrdiff_t) GetPixelChannels(image);
3095 q+=(ptrdiff_t) quantum_info->pad;
3104 if (quantum_info->format == FloatingPointQuantumFormat)
3106 for (x=0; x < (ssize_t) number_pixels; x++)
3108 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelRed(image,p),
3110 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelGreen(image,p),
3112 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelBlue(image,p),
3114 p+=(ptrdiff_t) GetPixelChannels(image);
3115 q+=(ptrdiff_t) quantum_info->pad;
3119 for (x=0; x < (ssize_t) number_pixels; x++)
3121 pixel=ScaleQuantumToLong(GetPixelRed(image,p));
3122 q=PopLongPixel(quantum_info->endian,pixel,q);
3123 pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
3124 q=PopLongPixel(quantum_info->endian,pixel,q);
3125 pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
3126 q=PopLongPixel(quantum_info->endian,pixel,q);
3127 p+=(ptrdiff_t) GetPixelChannels(image);
3128 q+=(ptrdiff_t) quantum_info->pad;
3134 if (quantum_info->format == FloatingPointQuantumFormat)
3136 for (x=0; x < (ssize_t) number_pixels; x++)
3138 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelRed(image,p),q);
3139 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelGreen(image,p),q);
3140 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelBlue(image,p),q);
3141 p+=(ptrdiff_t) GetPixelChannels(image);
3142 q+=(ptrdiff_t) quantum_info->pad;
3150 range=GetQuantumRange(quantum_info->depth);
3151 for (x=0; x < (ssize_t) number_pixels; x++)
3153 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
3155 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
3157 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
3159 p+=(ptrdiff_t) GetPixelChannels(image);
3160 q+=(ptrdiff_t) quantum_info->pad;
3167static void ExportRGBAQuantum(
const Image *image,QuantumInfo *quantum_info,
3168 const MagickSizeType number_pixels,
const Quantum *magick_restrict p,
3169 unsigned char *magick_restrict q)
3177 switch (quantum_info->depth)
3184 for (x=0; x < (ssize_t) number_pixels; x++)
3186 pixel=ScaleQuantumToChar(GetPixelRed(image,p));
3187 q=PopCharPixel(pixel,q);
3188 pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
3189 q=PopCharPixel(pixel,q);
3190 pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
3191 q=PopCharPixel(pixel,q);
3192 pixel=ScaleQuantumToChar(GetPixelAlpha(image,p));
3193 q=PopCharPixel(pixel,q);
3194 p+=(ptrdiff_t) GetPixelChannels(image);
3195 q+=(ptrdiff_t) quantum_info->pad;
3204 range=GetQuantumRange(quantum_info->depth);
3205 if (quantum_info->pack == MagickFalse)
3219 for (x=0; x < (ssize_t) number_pixels; x++)
3221 for (i=0; i < 4; i++)
3225 case 0: quantum=(size_t) GetPixelRed(image,p);
break;
3226 case 1: quantum=(size_t) GetPixelGreen(image,p);
break;
3227 case 2: quantum=(size_t) GetPixelBlue(image,p);
break;
3228 case 3: quantum=(size_t) GetPixelAlpha(image,p);
break;
3234 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
3240 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
3246 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
3248 q=PopLongPixel(quantum_info->endian,pixel,q);
3255 p+=(ptrdiff_t) GetPixelChannels(image);
3256 q+=(ptrdiff_t) quantum_info->pad;
3260 if (quantum_info->quantum == 32UL)
3262 for (x=0; x < (ssize_t) number_pixels; x++)
3264 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
3265 q=PopQuantumLongPixel(quantum_info,pixel,q);
3266 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
3268 q=PopQuantumLongPixel(quantum_info,pixel,q);
3269 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
3270 q=PopQuantumLongPixel(quantum_info,pixel,q);
3271 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelAlpha(image,p),
3273 q=PopQuantumLongPixel(quantum_info,pixel,q);
3274 p+=(ptrdiff_t) GetPixelChannels(image);
3275 q+=(ptrdiff_t) quantum_info->pad;
3279 for (x=0; x < (ssize_t) number_pixels; x++)
3281 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
3282 q=PopQuantumPixel(quantum_info,pixel,q);
3283 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
3284 q=PopQuantumPixel(quantum_info,pixel,q);
3285 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
3286 q=PopQuantumPixel(quantum_info,pixel,q);
3287 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelAlpha(image,p),range);
3288 q=PopQuantumPixel(quantum_info,pixel,q);
3289 p+=(ptrdiff_t) GetPixelChannels(image);
3290 q+=(ptrdiff_t) quantum_info->pad;
3299 if (quantum_info->format == FloatingPointQuantumFormat)
3301 for (x=0; x < (ssize_t) number_pixels; x++)
3303 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
3304 GetPixelRed(image,p));
3305 q=PopShortPixel(quantum_info->endian,pixel,q);
3306 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
3307 GetPixelGreen(image,p));
3308 q=PopShortPixel(quantum_info->endian,pixel,q);
3309 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
3310 GetPixelBlue(image,p));
3311 q=PopShortPixel(quantum_info->endian,pixel,q);
3312 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
3313 GetPixelAlpha(image,p));
3314 q=PopShortPixel(quantum_info->endian,pixel,q);
3315 p+=(ptrdiff_t) GetPixelChannels(image);
3316 q+=(ptrdiff_t) quantum_info->pad;
3320 for (x=0; x < (ssize_t) number_pixels; x++)
3322 pixel=ScaleQuantumToShort(GetPixelRed(image,p));
3323 q=PopShortPixel(quantum_info->endian,pixel,q);
3324 pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
3325 q=PopShortPixel(quantum_info->endian,pixel,q);
3326 pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
3327 q=PopShortPixel(quantum_info->endian,pixel,q);
3328 pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
3329 q=PopShortPixel(quantum_info->endian,pixel,q);
3330 p+=(ptrdiff_t) GetPixelChannels(image);
3331 q+=(ptrdiff_t) quantum_info->pad;
3340 if (quantum_info->format == FloatingPointQuantumFormat)
3342 for (x=0; x < (ssize_t) number_pixels; x++)
3347 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelRed(image,p),q);
3348 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelGreen(image,p),q);
3349 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelBlue(image,p),q);
3350 float_pixel=(float) GetPixelAlpha(image,p);
3351 q=PopQuantumFloatPixel(quantum_info,float_pixel,q);
3352 p+=(ptrdiff_t) GetPixelChannels(image);
3353 q+=(ptrdiff_t) quantum_info->pad;
3357 for (x=0; x < (ssize_t) number_pixels; x++)
3359 pixel=ScaleQuantumToLong(GetPixelRed(image,p));
3360 q=PopLongPixel(quantum_info->endian,pixel,q);
3361 pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
3362 q=PopLongPixel(quantum_info->endian,pixel,q);
3363 pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
3364 q=PopLongPixel(quantum_info->endian,pixel,q);
3365 pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
3366 q=PopLongPixel(quantum_info->endian,pixel,q);
3367 p+=(ptrdiff_t) GetPixelChannels(image);
3368 q+=(ptrdiff_t) quantum_info->pad;
3374 if (quantum_info->format == FloatingPointQuantumFormat)
3379 for (x=0; x < (ssize_t) number_pixels; x++)
3381 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelRed(image,p),q);
3382 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelGreen(image,p),q);
3383 q=PopQuantumDoublePixel(quantum_info,(
double) GetPixelBlue(image,p),q);
3384 pixel=(double) GetPixelAlpha(image,p);
3385 q=PopQuantumDoublePixel(quantum_info,pixel,q);
3386 p+=(ptrdiff_t) GetPixelChannels(image);
3387 q+=(ptrdiff_t) quantum_info->pad;
3395 range=GetQuantumRange(quantum_info->depth);
3396 for (x=0; x < (ssize_t) number_pixels; x++)
3398 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
3400 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
3402 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
3404 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
3406 p+=(ptrdiff_t) GetPixelChannels(image);
3407 q+=(ptrdiff_t) quantum_info->pad;
3414static void ExportRGBOQuantum(
const Image *image,QuantumInfo *quantum_info,
3415 const MagickSizeType number_pixels,
const Quantum *magick_restrict p,
3416 unsigned char *magick_restrict q)
3424 switch (quantum_info->depth)
3431 for (x=0; x < (ssize_t) number_pixels; x++)
3433 pixel=ScaleQuantumToChar(GetPixelRed(image,p));
3434 q=PopCharPixel(pixel,q);
3435 pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
3436 q=PopCharPixel(pixel,q);
3437 pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
3438 q=PopCharPixel(pixel,q);
3439 pixel=ScaleQuantumToChar(GetPixelOpacity(image,p));
3440 q=PopCharPixel(pixel,q);
3441 p+=(ptrdiff_t) GetPixelChannels(image);
3442 q+=(ptrdiff_t) quantum_info->pad;
3451 range=GetQuantumRange(quantum_info->depth);
3452 if (quantum_info->pack == MagickFalse)
3466 for (x=0; x < (ssize_t) number_pixels; x++)
3468 for (i=0; i < 4; i++)
3472 case 0: quantum=(size_t) GetPixelRed(image,p);
break;
3473 case 1: quantum=(size_t) GetPixelGreen(image,p);
break;
3474 case 2: quantum=(size_t) GetPixelBlue(image,p);
break;
3475 case 3: quantum=(size_t) GetPixelOpacity(image,p);
break;
3481 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
3487 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
3493 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
3495 q=PopLongPixel(quantum_info->endian,pixel,q);
3502 p+=(ptrdiff_t) GetPixelChannels(image);
3503 q+=(ptrdiff_t) quantum_info->pad;
3507 if (quantum_info->quantum == 32UL)
3509 for (x=0; x < (ssize_t) number_pixels; x++)
3511 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
3512 q=PopQuantumLongPixel(quantum_info,pixel,q);
3513 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
3515 q=PopQuantumLongPixel(quantum_info,pixel,q);
3516 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
3517 q=PopQuantumLongPixel(quantum_info,pixel,q);
3518 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelOpacity(image,p),
3520 q=PopQuantumLongPixel(quantum_info,pixel,q);
3521 p+=(ptrdiff_t) GetPixelChannels(image);
3522 q+=(ptrdiff_t) quantum_info->pad;
3526 for (x=0; x < (ssize_t) number_pixels; x++)
3528 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
3529 q=PopQuantumPixel(quantum_info,pixel,q);
3530 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
3531 q=PopQuantumPixel(quantum_info,pixel,q);
3532 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
3533 q=PopQuantumPixel(quantum_info,pixel,q);
3534 pixel=(
unsigned int) ScaleQuantumToAny(GetPixelOpacity(image,p),range);
3535 q=PopQuantumPixel(quantum_info,pixel,q);
3536 p+=(ptrdiff_t) GetPixelChannels(image);
3537 q+=(ptrdiff_t) quantum_info->pad;
3546 if (quantum_info->format == FloatingPointQuantumFormat)
3548 for (x=0; x < (ssize_t) number_pixels; x++)
3550 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
3551 GetPixelRed(image,p));
3552 q=PopShortPixel(quantum_info->endian,pixel,q);
3553 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
3554 GetPixelGreen(image,p));
3555 q=PopShortPixel(quantum_info->endian,pixel,q);
3556 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
3557 GetPixelBlue(image,p));
3558 q=PopShortPixel(quantum_info->endian,pixel,q);
3559 pixel=SinglePrecisionToHalf(QuantumScale*(
double)
3560 GetPixelOpacity(image,p));
3561 q=PopShortPixel(quantum_info->endian,pixel,q);
3562 p+=(ptrdiff_t) GetPixelChannels(image);
3563 q+=(ptrdiff_t) quantum_info->pad;
3567 for (x=0; x < (ssize_t) number_pixels; x++)
3569 pixel=ScaleQuantumToShort(GetPixelRed(image,p));
3570 q=PopShortPixel(quantum_info->endian,pixel,q);
3571 pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
3572 q=PopShortPixel(quantum_info->endian,pixel,q);
3573 pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
3574 q=PopShortPixel(quantum_info->endian,pixel,q);
3575 pixel=ScaleQuantumToShort(GetPixelOpacity(image,p));
3576 q=PopShortPixel(quantum_info->endian,pixel,q);
3577 p+=(ptrdiff_t) GetPixelChannels(image);
3578 q+=(ptrdiff_t) quantum_info->pad;
3587 if (quantum_info->format == FloatingPointQuantumFormat)
3589 for (x=0; x < (ssize_t) number_pixels; x++)
3594 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelRed(image,p),
3596 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelGreen(image,p),
3598 q=PopQuantumFloatPixel(quantum_info,(
float) GetPixelBlue(image,p),
3600 float_pixel=(float) GetPixelOpacity(image,p);
3601 q=PopQuantumFloatPixel(quantum_info,float_pixel,q);
3602 p+=(ptrdiff_t) GetPixelChannels(image);
3603 q+=(ptrdiff_t) quantum_info->pad;
3607 for (x=0; x < (ssize_t) number_pixels; x++)
3609 pixel=ScaleQuantumToLong(GetPixelRed(image,p));
3610 q=PopLongPixel(quantum_info->endian,pixel,q);
3611 pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
3612 q=PopLongPixel(quantum_info->endian,pixel,q);
3613 pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
3614 q=PopLongPixel(quantum_info->endian,pixel,q);
3615 pixel=ScaleQuantumToLong(GetPixelOpacity(image,p));
3616 q=PopLongPixel(quantum_info->endian,pixel,q);
3617 p+=(ptrdiff_t) GetPixelChannels(image);
3618 q+=(ptrdiff_t) quantum_info->pad;
3624 if (quantum_info->format == FloatingPointQuantumFormat)
3629 for (x=0; x < (ssize_t) number_pixels; x++)
3631 q=PopQuantumDoublePixel(quantum_info,(
double)
3632 GetPixelRed(image,p),q);
3633 q=PopQuantumDoublePixel(quantum_info,(
double)
3634 GetPixelGreen(image,p),q);
3635 q=PopQuantumDoublePixel(quantum_info,(
double)
3636 GetPixelBlue(image,p),q);
3637 pixel=(double) GetPixelOpacity(image,p);
3638 q=PopQuantumDoublePixel(quantum_info,pixel,q);
3639 p+=(ptrdiff_t) GetPixelChannels(image);
3640 q+=(ptrdiff_t) quantum_info->pad;
3648 range=GetQuantumRange(quantum_info->depth);
3649 for (x=0; x < (ssize_t) number_pixels; x++)
3651 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
3653 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
3655 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
3657 q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelOpacity(image,p),
3659 p+=(ptrdiff_t) GetPixelChannels(image);
3660 q+=(ptrdiff_t) quantum_info->pad;
3667MagickExport
size_t ExportQuantumPixels(
const Image *image,
3668 CacheView *image_view,QuantumInfo *quantum_info,
3669 const QuantumType quantum_type,
unsigned char *magick_restrict pixels,
3670 ExceptionInfo *exception)
3687 assert(image != (Image *) NULL);
3688 assert(image->signature == MagickCoreSignature);
3689 assert(quantum_info != (QuantumInfo *) NULL);
3690 assert(quantum_info->signature == MagickCoreSignature);
3691 assert(exception != (ExceptionInfo *) NULL);
3692 assert(exception->signature == MagickCoreSignature);
3693 if (IsEventLogging() != MagickFalse)
3694 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",image->filename);
3695 if (pixels == (
unsigned char *) NULL)
3696 pixels=(
unsigned char *) GetQuantumPixels(quantum_info);
3697 if (image_view == (CacheView *) NULL)
3699 number_pixels=GetImageExtent(image);
3700 p=GetVirtualPixelQueue(image);
3704 number_pixels=GetCacheViewExtent(image_view);
3705 p=GetCacheViewVirtualPixelQueue(image_view);
3707 if (p == (Quantum *) NULL)
3709 if (quantum_info->alpha_type == AssociatedQuantumAlpha)
3720 if (image_view == (CacheView *) NULL)
3721 r=GetAuthenticPixelQueue(image);
3723 r=GetCacheViewAuthenticPixelQueue(image_view);
3724 for (x=0; x < (ssize_t) image->columns; x++)
3729 Sa=QuantumScale*(double) GetPixelAlpha(image,r);
3730 for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
3732 PixelChannel channel = GetPixelChannelChannel(image,i);
3733 PixelTrait traits = GetPixelChannelTraits(image,channel);
3734 if ((traits & UpdatePixelTrait) == 0)
3736 r[i]=ClampToQuantum(Sa*(
double) r[i]);
3738 r+=(ptrdiff_t) GetPixelChannels(image);
3741 if ((quantum_type == CbYCrQuantum) || (quantum_type == CbYCrAQuantum))
3749 if (image_view == (CacheView *) NULL)
3750 r=GetAuthenticPixelQueue(image);
3752 r=GetCacheViewAuthenticPixelQueue(image_view);
3753 for (x=0; x < (ssize_t) number_pixels; x++)
3755 quantum=GetPixelRed(image,r);
3756 SetPixelRed(image,GetPixelGreen(image,r),r);
3757 SetPixelGreen(image,quantum,r);
3758 r+=(ptrdiff_t) GetPixelChannels(image);
3762 ResetQuantumState(quantum_info);
3763 extent=GetQuantumExtent(image,quantum_info,quantum_type);
3764 switch (quantum_type)
3768 ExportAlphaQuantum(image,quantum_info,number_pixels,p,q,exception);
3773 ExportBGRQuantum(image,quantum_info,number_pixels,p,q);
3778 ExportBGRAQuantum(image,quantum_info,number_pixels,p,q);
3783 ExportBGROQuantum(image,quantum_info,number_pixels,p,q);
3788 ExportBlackQuantum(image,quantum_info,number_pixels,p,q,exception);
3794 ExportPixelChannel(image,quantum_info,number_pixels,p,q,BluePixelChannel);
3799 ExportCMYKQuantum(image,quantum_info,number_pixels,p,q,exception);
3804 ExportCMYKAQuantum(image,quantum_info,number_pixels,p,q,exception);
3807 case MultispectralQuantum:
3809 ExportMultispectralQuantum(image,quantum_info,number_pixels,p,q,exception);
3814 ExportCMYKOQuantum(image,quantum_info,number_pixels,p,q,exception);
3819 ExportCbYCrYQuantum(image,quantum_info,number_pixels,p,q);
3824 ExportGrayQuantum(image,quantum_info,number_pixels,p,q);
3827 case GrayAlphaQuantum:
3829 ExportGrayAlphaQuantum(image,quantum_info,number_pixels,p,q);
3833 case MagentaQuantum:
3835 ExportPixelChannel(image,quantum_info,number_pixels,p,q,
3841 ExportIndexQuantum(image,quantum_info,number_pixels,p,q,exception);
3844 case IndexAlphaQuantum:
3846 ExportIndexAlphaQuantum(image,quantum_info,number_pixels,p,q,exception);
3852 ExportPixelChannel(image,quantum_info,number_pixels,p,q,RedPixelChannel);
3855 case OpacityQuantum:
3857 ExportOpacityQuantum(image,quantum_info,number_pixels,p,q,exception);
3863 ExportRGBQuantum(image,quantum_info,number_pixels,p,q);
3869 ExportRGBAQuantum(image,quantum_info,number_pixels,p,q);
3874 ExportRGBOQuantum(image,quantum_info,number_pixels,p,q);
3880 if ((quantum_type == CbYCrQuantum) || (quantum_type == CbYCrAQuantum))
3888 if (image_view == (CacheView *) NULL)
3889 r=GetAuthenticPixelQueue(image);
3891 r=GetCacheViewAuthenticPixelQueue(image_view);
3892 for (x=0; x < (ssize_t) number_pixels; x++)
3894 quantum=GetPixelRed(image,r);
3895 SetPixelRed(image,GetPixelGreen(image,r),r);
3896 SetPixelGreen(image,quantum,r);
3897 r+=(ptrdiff_t) GetPixelChannels(image);