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 Quantum PushColormapIndex(
const Image *image,
const size_t index,
113 MagickBooleanType *range_exception)
115 if (index < image->colors)
116 return((Quantum) index);
117 *range_exception=MagickTrue;
121static inline const unsigned char *PushDoublePixel(QuantumInfo *quantum_info,
122 const unsigned char *magick_restrict pixels,
double *pixel)
130 if (quantum_info->endian == LSBEndian)
132 quantum[0]=(*pixels++);
133 quantum[1]=(*pixels++);
134 quantum[2]=(*pixels++);
135 quantum[3]=(*pixels++);
136 quantum[4]=(*pixels++);
137 quantum[5]=(*pixels++);
138 quantum[6]=(*pixels++);
139 quantum[7]=(*pixels++);
143 quantum[7]=(*pixels++);
144 quantum[6]=(*pixels++);
145 quantum[5]=(*pixels++);
146 quantum[4]=(*pixels++);
147 quantum[3]=(*pixels++);
148 quantum[2]=(*pixels++);
149 quantum[1]=(*pixels++);
150 quantum[0]=(*pixels++);
152 p=(
double *) quantum;
154 *pixel-=quantum_info->minimum;
155 *pixel*=quantum_info->scale;
159static inline float ScaleFloatPixel(
const QuantumInfo *quantum_info,
160 const unsigned char *quantum)
165 pixel=(double) (*((
float *) quantum));
166 pixel-=quantum_info->minimum;
167 pixel*=quantum_info->scale;
168 if (pixel < (
double) -FLT_MAX)
170 if (pixel > (
double) FLT_MAX)
172 return((
float) pixel);
175static inline const unsigned char *PushQuantumFloatPixel(
176 const QuantumInfo *quantum_info,
const unsigned char *magick_restrict pixels,
182 if (quantum_info->endian == LSBEndian)
184 quantum[0]=(*pixels++);
185 quantum[1]=(*pixels++);
186 quantum[2]=(*pixels++);
187 quantum[3]=(*pixels++);
191 quantum[3]=(*pixels++);
192 quantum[2]=(*pixels++);
193 quantum[1]=(*pixels++);
194 quantum[0]=(*pixels++);
196 *pixel=ScaleFloatPixel(quantum_info,quantum);
200static inline const unsigned char *PushQuantumFloat24Pixel(
201 const QuantumInfo *quantum_info,
const unsigned char *magick_restrict pixels,
207 if (quantum_info->endian == LSBEndian)
209 quantum[0]=(*pixels++);
210 quantum[1]=(*pixels++);
211 quantum[2]=(*pixels++);
215 quantum[2]=(*pixels++);
216 quantum[1]=(*pixels++);
217 quantum[0]=(*pixels++);
219 if ((quantum[0] | quantum[1] | quantum[2]) == 0U)
227 sign_bit=(quantum[2] & 0x80);
228 exponent=(quantum[2] & 0x7F);
230 exponent=exponent-63+127;
231 quantum[3]=sign_bit | (exponent >> 1);
232 quantum[2]=((exponent & 1) << 7) | ((quantum[1] & 0xFE) >> 1);
233 quantum[1]=((quantum[1] & 0x01) << 7) | ((quantum[0] & 0xFE) >> 1);
234 quantum[0]=(quantum[0] & 0x01) << 7;
236 *pixel=ScaleFloatPixel(quantum_info,quantum);
240static inline const unsigned char *PushQuantumPixel(QuantumInfo *quantum_info,
241 const unsigned char *magick_restrict pixels,
unsigned int *quantum)
249 *quantum=(QuantumAny) 0;
250 for (i=(ssize_t) quantum_info->depth; i > 0L; )
252 if (quantum_info->state.bits == 0UL)
254 quantum_info->state.pixel=(*pixels++);
255 quantum_info->state.bits=8UL;
257 quantum_bits=(size_t) i;
258 if (quantum_bits > quantum_info->state.bits)
259 quantum_bits=quantum_info->state.bits;
260 i-=(ssize_t) quantum_bits;
261 quantum_info->state.bits-=quantum_bits;
262 if (quantum_bits < 64)
263 *quantum=(
unsigned int) (((MagickSizeType) *quantum << quantum_bits) |
264 ((quantum_info->state.pixel >> quantum_info->state.bits) &~
265 ((~0UL) << quantum_bits)));
270static inline const unsigned char *PushQuantumLongPixel(
271 QuantumInfo *quantum_info,
const unsigned char *magick_restrict pixels,
272 unsigned int *quantum)
281 for (i=(ssize_t) quantum_info->depth; i > 0; )
283 if (quantum_info->state.bits == 0)
285 pixels=PushLongPixel(quantum_info->endian,pixels,
286 &quantum_info->state.pixel);
287 quantum_info->state.bits=32U;
289 quantum_bits=(size_t) i;
290 if (quantum_bits > quantum_info->state.bits)
291 quantum_bits=quantum_info->state.bits;
292 *quantum|=(((quantum_info->state.pixel >> (32U-quantum_info->state.bits)) &
293 quantum_info->state.mask[quantum_bits]) << ((ssize_t)
294 quantum_info->depth-i));
295 i-=(ssize_t) quantum_bits;
296 quantum_info->state.bits-=quantum_bits;
301static void ImportAlphaQuantum(
const Image *image,QuantumInfo *quantum_info,
302 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
303 Quantum *magick_restrict q)
311 assert(image != (Image *) NULL);
312 assert(image->signature == MagickCoreSignature);
313 switch (quantum_info->depth)
320 for (x=0; x < (ssize_t) number_pixels; x++)
322 p=PushCharPixel(p,&pixel);
323 SetPixelAlpha(image,ScaleCharToQuantum(pixel),q);
324 p+=(ptrdiff_t) quantum_info->pad;
325 q+=(ptrdiff_t) GetPixelChannels(image);
334 if (quantum_info->format == FloatingPointQuantumFormat)
336 for (x=0; x < (ssize_t) number_pixels; x++)
338 p=PushShortPixel(quantum_info->endian,p,&pixel);
339 SetPixelAlpha(image,ClampToQuantum((
double) QuantumRange*(
double)
340 HalfToSinglePrecision(pixel)),q);
341 p+=(ptrdiff_t) quantum_info->pad;
342 q+=(ptrdiff_t) GetPixelChannels(image);
346 for (x=0; x < (ssize_t) number_pixels; x++)
348 p=PushShortPixel(quantum_info->endian,p,&pixel);
349 SetPixelAlpha(image,ScaleShortToQuantum(pixel),q);
350 p+=(ptrdiff_t) quantum_info->pad;
351 q+=(ptrdiff_t) GetPixelChannels(image);
357 if (quantum_info->format == FloatingPointQuantumFormat)
362 for (x=0; x < (ssize_t) number_pixels; x++)
364 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
365 SetPixelAlpha(image,ClampToQuantum(pixel),q);
366 p+=(ptrdiff_t) quantum_info->pad;
367 q+=(ptrdiff_t) GetPixelChannels(image);
376 for (x=0; x < (ssize_t) number_pixels; x++)
378 p=PushLongPixel(quantum_info->endian,p,&pixel);
379 SetPixelAlpha(image,ScaleLongToQuantum(pixel),q);
380 p+=(ptrdiff_t) quantum_info->pad;
381 q+=(ptrdiff_t) GetPixelChannels(image);
388 if (quantum_info->format == FloatingPointQuantumFormat)
393 for (x=0; x < (ssize_t) number_pixels; x++)
395 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
396 SetPixelAlpha(image,ClampToQuantum(pixel),q);
397 p+=(ptrdiff_t) quantum_info->pad;
398 q+=(ptrdiff_t) GetPixelChannels(image);
406 if (quantum_info->format == FloatingPointQuantumFormat)
411 for (x=0; x < (ssize_t) number_pixels; x++)
413 p=PushDoublePixel(quantum_info,p,&pixel);
414 SetPixelAlpha(image,ClampToQuantum(pixel),q);
415 p+=(ptrdiff_t) quantum_info->pad;
416 q+=(ptrdiff_t) GetPixelChannels(image);
427 range=GetQuantumRange(quantum_info->depth);
428 for (x=0; x < (ssize_t) number_pixels; x++)
430 p=PushQuantumPixel(quantum_info,p,&pixel);
431 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
432 p+=(ptrdiff_t) quantum_info->pad;
433 q+=(ptrdiff_t) GetPixelChannels(image);
440static void ImportBGRQuantum(
const Image *image,QuantumInfo *quantum_info,
441 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
442 Quantum *magick_restrict q)
453 assert(image != (Image *) NULL);
454 assert(image->signature == MagickCoreSignature);
455 switch (quantum_info->depth)
462 for (x=0; x < (ssize_t) number_pixels; x++)
464 p=PushCharPixel(p,&pixel);
465 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
466 p=PushCharPixel(p,&pixel);
467 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
468 p=PushCharPixel(p,&pixel);
469 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
470 SetPixelAlpha(image,OpaqueAlpha,q);
471 p+=(ptrdiff_t) quantum_info->pad;
472 q+=(ptrdiff_t) GetPixelChannels(image);
481 range=GetQuantumRange(quantum_info->depth);
482 if (quantum_info->pack == MagickFalse)
484 for (x=0; x < (ssize_t) number_pixels; x++)
486 p=PushLongPixel(quantum_info->endian,p,&pixel);
487 SetPixelRed(image,ScaleAnyToQuantum((pixel >> 22) & 0x3ff,range),q);
488 SetPixelGreen(image,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,range),
490 SetPixelBlue(image,ScaleAnyToQuantum((pixel >> 2) & 0x3ff,range),q);
491 p+=(ptrdiff_t) quantum_info->pad;
492 q+=(ptrdiff_t) GetPixelChannels(image);
496 if (quantum_info->quantum == 32U)
498 for (x=0; x < (ssize_t) number_pixels; x++)
500 p=PushQuantumLongPixel(quantum_info,p,&pixel);
501 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
502 p=PushQuantumLongPixel(quantum_info,p,&pixel);
503 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
504 p=PushQuantumLongPixel(quantum_info,p,&pixel);
505 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
506 q+=(ptrdiff_t) GetPixelChannels(image);
510 for (x=0; x < (ssize_t) number_pixels; x++)
512 p=PushQuantumPixel(quantum_info,p,&pixel);
513 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
514 p=PushQuantumPixel(quantum_info,p,&pixel);
515 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
516 p=PushQuantumPixel(quantum_info,p,&pixel);
517 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
518 q+=(ptrdiff_t) GetPixelChannels(image);
524 range=GetQuantumRange(quantum_info->depth);
525 if (quantum_info->pack == MagickFalse)
530 for (x=0; x < (ssize_t) (3*number_pixels-1); x+=2)
532 p=PushShortPixel(quantum_info->endian,p,&pixel);
538 SetPixelRed(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
544 SetPixelGreen(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
550 SetPixelBlue(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
552 q+=(ptrdiff_t) GetPixelChannels(image);
556 p=PushShortPixel(quantum_info->endian,p,&pixel);
562 SetPixelRed(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
568 SetPixelGreen(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
574 SetPixelBlue(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
576 q+=(ptrdiff_t) GetPixelChannels(image);
580 p+=(ptrdiff_t) quantum_info->pad;
582 for (bit=0; bit < (ssize_t) (3*number_pixels % 2); bit++)
584 p=PushShortPixel(quantum_info->endian,p,&pixel);
590 SetPixelRed(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
596 SetPixelGreen(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
602 SetPixelBlue(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
604 q+=(ptrdiff_t) GetPixelChannels(image);
608 p+=(ptrdiff_t) quantum_info->pad;
619 if (quantum_info->quantum == 32U)
621 for (x=0; x < (ssize_t) number_pixels; x++)
623 p=PushQuantumLongPixel(quantum_info,p,&pixel);
624 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
625 p=PushQuantumLongPixel(quantum_info,p,&pixel);
626 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
627 p=PushQuantumLongPixel(quantum_info,p,&pixel);
628 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
629 q+=(ptrdiff_t) GetPixelChannels(image);
633 for (x=0; x < (ssize_t) number_pixels; x++)
635 p=PushQuantumPixel(quantum_info,p,&pixel);
636 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
637 p=PushQuantumPixel(quantum_info,p,&pixel);
638 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
639 p=PushQuantumPixel(quantum_info,p,&pixel);
640 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
641 q+=(ptrdiff_t) GetPixelChannels(image);
651 if (quantum_info->format == FloatingPointQuantumFormat)
653 for (x=0; x < (ssize_t) number_pixels; x++)
655 p=PushShortPixel(quantum_info->endian,p,&pixel);
656 SetPixelRed(image,ClampToQuantum((
double) QuantumRange*(
double)
657 HalfToSinglePrecision(pixel)),q);
658 p=PushShortPixel(quantum_info->endian,p,&pixel);
659 SetPixelGreen(image,ClampToQuantum((
double) QuantumRange*(
double)
660 HalfToSinglePrecision(pixel)),q);
661 p=PushShortPixel(quantum_info->endian,p,&pixel);
662 SetPixelBlue(image,ClampToQuantum((
double) QuantumRange*(
double)
663 HalfToSinglePrecision(pixel)),q);
664 p+=(ptrdiff_t) quantum_info->pad;
665 q+=(ptrdiff_t) GetPixelChannels(image);
669 for (x=0; x < (ssize_t) number_pixels; x++)
671 p=PushShortPixel(quantum_info->endian,p,&pixel);
672 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
673 p=PushShortPixel(quantum_info->endian,p,&pixel);
674 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
675 p=PushShortPixel(quantum_info->endian,p,&pixel);
676 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
677 p+=(ptrdiff_t) quantum_info->pad;
678 q+=(ptrdiff_t) GetPixelChannels(image);
684 if (quantum_info->format == FloatingPointQuantumFormat)
689 for (x=0; x < (ssize_t) number_pixels; x++)
691 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
692 SetPixelRed(image,ClampToQuantum(pixel),q);
693 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
694 SetPixelGreen(image,ClampToQuantum(pixel),q);
695 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
696 SetPixelBlue(image,ClampToQuantum(pixel),q);
697 p+=(ptrdiff_t) quantum_info->pad;
698 q+=(ptrdiff_t) GetPixelChannels(image);
707 for (x=0; x < (ssize_t) number_pixels; x++)
709 p=PushLongPixel(quantum_info->endian,p,&pixel);
710 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
711 p=PushLongPixel(quantum_info->endian,p,&pixel);
712 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
713 p=PushLongPixel(quantum_info->endian,p,&pixel);
714 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
715 p+=(ptrdiff_t) quantum_info->pad;
716 q+=(ptrdiff_t) GetPixelChannels(image);
723 if (quantum_info->format == FloatingPointQuantumFormat)
728 for (x=0; x < (ssize_t) number_pixels; x++)
730 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
731 SetPixelRed(image,ClampToQuantum(pixel),q);
732 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
733 SetPixelGreen(image,ClampToQuantum(pixel),q);
734 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
735 SetPixelBlue(image,ClampToQuantum(pixel),q);
736 p+=(ptrdiff_t) quantum_info->pad;
737 q+=(ptrdiff_t) GetPixelChannels(image);
745 if (quantum_info->format == FloatingPointQuantumFormat)
750 for (x=0; x < (ssize_t) number_pixels; x++)
752 p=PushDoublePixel(quantum_info,p,&pixel);
753 SetPixelRed(image,ClampToQuantum(pixel),q);
754 p=PushDoublePixel(quantum_info,p,&pixel);
755 SetPixelGreen(image,ClampToQuantum(pixel),q);
756 p=PushDoublePixel(quantum_info,p,&pixel);
757 SetPixelBlue(image,ClampToQuantum(pixel),q);
758 p+=(ptrdiff_t) quantum_info->pad;
759 q+=(ptrdiff_t) GetPixelChannels(image);
770 range=GetQuantumRange(quantum_info->depth);
771 for (x=0; x < (ssize_t) number_pixels; x++)
773 p=PushQuantumPixel(quantum_info,p,&pixel);
774 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
775 p=PushQuantumPixel(quantum_info,p,&pixel);
776 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
777 p=PushQuantumPixel(quantum_info,p,&pixel);
778 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
779 q+=(ptrdiff_t) GetPixelChannels(image);
786static void ImportBGRAQuantum(
const Image *image,QuantumInfo *quantum_info,
787 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
788 Quantum *magick_restrict q)
796 assert(image != (Image *) NULL);
797 assert(image->signature == MagickCoreSignature);
798 switch (quantum_info->depth)
805 for (x=0; x < (ssize_t) number_pixels; x++)
807 p=PushCharPixel(p,&pixel);
808 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
809 p=PushCharPixel(p,&pixel);
810 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
811 p=PushCharPixel(p,&pixel);
812 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
813 p=PushCharPixel(p,&pixel);
814 SetPixelAlpha(image,ScaleCharToQuantum(pixel),q);
815 p+=(ptrdiff_t) quantum_info->pad;
816 q+=(ptrdiff_t) GetPixelChannels(image);
826 if (quantum_info->pack == MagickFalse)
839 for (x=0; x < (ssize_t) number_pixels; x++)
841 for (i=0; i < 4; i++)
847 p=PushLongPixel(quantum_info->endian,p,&pixel);
848 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
849 (((pixel >> 22) & 0x3ff) << 6)));
854 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
855 (((pixel >> 12) & 0x3ff) << 6)));
860 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
861 (((pixel >> 2) & 0x3ff) << 6)));
867 case 0: SetPixelRed(image,(Quantum) quantum,q);
break;
868 case 1: SetPixelGreen(image,(Quantum) quantum,q);
break;
869 case 2: SetPixelBlue(image,(Quantum) quantum,q);
break;
870 case 3: SetPixelAlpha(image,(Quantum) quantum,q);
break;
874 p+=(ptrdiff_t) quantum_info->pad;
875 q+=(ptrdiff_t) GetPixelChannels(image);
879 for (x=0; x < (ssize_t) number_pixels; x++)
881 p=PushQuantumPixel(quantum_info,p,&pixel);
882 SetPixelRed(image,ScaleShortToQuantum((
unsigned short) (pixel << 6)),q);
883 p=PushQuantumPixel(quantum_info,p,&pixel);
884 SetPixelGreen(image,ScaleShortToQuantum((
unsigned short) (pixel << 6)),
886 p=PushQuantumPixel(quantum_info,p,&pixel);
887 SetPixelBlue(image,ScaleShortToQuantum((
unsigned short) (pixel << 6)),
889 p=PushQuantumPixel(quantum_info,p,&pixel);
890 SetPixelAlpha(image,ScaleShortToQuantum((
unsigned short) (pixel << 6)),
892 q+=(ptrdiff_t) GetPixelChannels(image);
901 if (quantum_info->format == FloatingPointQuantumFormat)
903 for (x=0; x < (ssize_t) number_pixels; x++)
905 p=PushShortPixel(quantum_info->endian,p,&pixel);
906 SetPixelRed(image,ClampToQuantum((
double) QuantumRange*(
double)
907 HalfToSinglePrecision(pixel)),q);
908 p=PushShortPixel(quantum_info->endian,p,&pixel);
909 SetPixelGreen(image,ClampToQuantum((
double) QuantumRange*(
double)
910 HalfToSinglePrecision(pixel)),q);
911 p=PushShortPixel(quantum_info->endian,p,&pixel);
912 SetPixelBlue(image,ClampToQuantum((
double) QuantumRange*(
double)
913 HalfToSinglePrecision(pixel)),q);
914 p=PushShortPixel(quantum_info->endian,p,&pixel);
915 SetPixelAlpha(image,ClampToQuantum((
double) QuantumRange*(
double)
916 HalfToSinglePrecision(pixel)),q);
917 p+=(ptrdiff_t) quantum_info->pad;
918 q+=(ptrdiff_t) GetPixelChannels(image);
922 for (x=0; x < (ssize_t) number_pixels; x++)
924 p=PushShortPixel(quantum_info->endian,p,&pixel);
925 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
926 p=PushShortPixel(quantum_info->endian,p,&pixel);
927 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
928 p=PushShortPixel(quantum_info->endian,p,&pixel);
929 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
930 p=PushShortPixel(quantum_info->endian,p,&pixel);
931 SetPixelAlpha(image,ScaleShortToQuantum(pixel),q);
932 p+=(ptrdiff_t) quantum_info->pad;
933 q+=(ptrdiff_t) GetPixelChannels(image);
939 if (quantum_info->format == FloatingPointQuantumFormat)
944 for (x=0; x < (ssize_t) number_pixels; x++)
946 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
947 SetPixelRed(image,ClampToQuantum(pixel),q);
948 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
949 SetPixelGreen(image,ClampToQuantum(pixel),q);
950 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
951 SetPixelBlue(image,ClampToQuantum(pixel),q);
952 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
953 SetPixelAlpha(image,ClampToQuantum(pixel),q);
954 p+=(ptrdiff_t) quantum_info->pad;
955 q+=(ptrdiff_t) GetPixelChannels(image);
964 for (x=0; x < (ssize_t) number_pixels; x++)
966 p=PushLongPixel(quantum_info->endian,p,&pixel);
967 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
968 p=PushLongPixel(quantum_info->endian,p,&pixel);
969 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
970 p=PushLongPixel(quantum_info->endian,p,&pixel);
971 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
972 p=PushLongPixel(quantum_info->endian,p,&pixel);
973 SetPixelAlpha(image,ScaleLongToQuantum(pixel),q);
974 p+=(ptrdiff_t) quantum_info->pad;
975 q+=(ptrdiff_t) GetPixelChannels(image);
982 if (quantum_info->format == FloatingPointQuantumFormat)
987 for (x=0; x < (ssize_t) number_pixels; x++)
989 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
990 SetPixelRed(image,ClampToQuantum(pixel),q);
991 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
992 SetPixelGreen(image,ClampToQuantum(pixel),q);
993 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
994 SetPixelBlue(image,ClampToQuantum(pixel),q);
995 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
996 SetPixelAlpha(image,ClampToQuantum(pixel),q);
997 p+=(ptrdiff_t) quantum_info->pad;
998 q+=(ptrdiff_t) GetPixelChannels(image);
1006 if (quantum_info->format == FloatingPointQuantumFormat)
1011 for (x=0; x < (ssize_t) number_pixels; x++)
1013 p=PushDoublePixel(quantum_info,p,&pixel);
1014 SetPixelRed(image,ClampToQuantum(pixel),q);
1015 p=PushDoublePixel(quantum_info,p,&pixel);
1016 SetPixelGreen(image,ClampToQuantum(pixel),q);
1017 p=PushDoublePixel(quantum_info,p,&pixel);
1018 SetPixelBlue(image,ClampToQuantum(pixel),q);
1019 p=PushDoublePixel(quantum_info,p,&pixel);
1020 SetPixelAlpha(image,ClampToQuantum(pixel),q);
1021 p+=(ptrdiff_t) quantum_info->pad;
1022 q+=(ptrdiff_t) GetPixelChannels(image);
1033 range=GetQuantumRange(quantum_info->depth);
1034 for (x=0; x < (ssize_t) number_pixels; x++)
1036 p=PushQuantumPixel(quantum_info,p,&pixel);
1037 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
1038 p=PushQuantumPixel(quantum_info,p,&pixel);
1039 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
1040 p=PushQuantumPixel(quantum_info,p,&pixel);
1041 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
1042 p=PushQuantumPixel(quantum_info,p,&pixel);
1043 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
1044 q+=(ptrdiff_t) GetPixelChannels(image);
1051static void ImportBGROQuantum(
const Image *image,QuantumInfo *quantum_info,
1052 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
1053 Quantum *magick_restrict q)
1061 assert(image != (Image *) NULL);
1062 assert(image->signature == MagickCoreSignature);
1063 switch (quantum_info->depth)
1070 for (x=0; x < (ssize_t) number_pixels; x++)
1072 p=PushCharPixel(p,&pixel);
1073 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
1074 p=PushCharPixel(p,&pixel);
1075 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
1076 p=PushCharPixel(p,&pixel);
1077 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
1078 p=PushCharPixel(p,&pixel);
1079 SetPixelOpacity(image,ScaleCharToQuantum(pixel),q);
1080 p+=(ptrdiff_t) quantum_info->pad;
1081 q+=(ptrdiff_t) GetPixelChannels(image);
1091 if (quantum_info->pack == MagickFalse)
1104 for (x=0; x < (ssize_t) number_pixels; x++)
1106 for (i=0; i < 4; i++)
1112 p=PushLongPixel(quantum_info->endian,p,&pixel);
1113 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
1114 (((pixel >> 22) & 0x3ff) << 6)));
1119 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
1120 (((pixel >> 12) & 0x3ff) << 6)));
1125 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
1126 (((pixel >> 2) & 0x3ff) << 6)));
1132 case 0: SetPixelRed(image,(Quantum) quantum,q);
break;
1133 case 1: SetPixelGreen(image,(Quantum) quantum,q);
break;
1134 case 2: SetPixelBlue(image,(Quantum) quantum,q);
break;
1135 case 3: SetPixelOpacity(image,(Quantum) quantum,q);
break;
1139 p+=(ptrdiff_t) quantum_info->pad;
1140 q+=(ptrdiff_t) GetPixelChannels(image);
1144 for (x=0; x < (ssize_t) number_pixels; x++)
1146 p=PushQuantumPixel(quantum_info,p,&pixel);
1147 SetPixelRed(image,ScaleShortToQuantum((
unsigned short) (pixel << 6)),q);
1148 p=PushQuantumPixel(quantum_info,p,&pixel);
1149 SetPixelGreen(image,ScaleShortToQuantum((
unsigned short) (pixel << 6)),
1151 p=PushQuantumPixel(quantum_info,p,&pixel);
1152 SetPixelBlue(image,ScaleShortToQuantum((
unsigned short) (pixel << 6)),
1154 p=PushQuantumPixel(quantum_info,p,&pixel);
1155 SetPixelOpacity(image,ScaleShortToQuantum((
unsigned short) (pixel << 6)),
1157 q+=(ptrdiff_t) GetPixelChannels(image);
1166 if (quantum_info->format == FloatingPointQuantumFormat)
1168 for (x=0; x < (ssize_t) number_pixels; x++)
1170 p=PushShortPixel(quantum_info->endian,p,&pixel);
1171 SetPixelRed(image,ClampToQuantum((
double) QuantumRange*(
double)
1172 HalfToSinglePrecision(pixel)),q);
1173 p=PushShortPixel(quantum_info->endian,p,&pixel);
1174 SetPixelGreen(image,ClampToQuantum((
double) QuantumRange*(
double)
1175 HalfToSinglePrecision(pixel)),q);
1176 p=PushShortPixel(quantum_info->endian,p,&pixel);
1177 SetPixelBlue(image,ClampToQuantum((
double) QuantumRange*(
double)
1178 HalfToSinglePrecision(pixel)),q);
1179 p=PushShortPixel(quantum_info->endian,p,&pixel);
1180 SetPixelOpacity(image,ClampToQuantum((
double) QuantumRange*(
double)
1181 HalfToSinglePrecision(pixel)),q);
1182 p+=(ptrdiff_t) quantum_info->pad;
1183 q+=(ptrdiff_t) GetPixelChannels(image);
1187 for (x=0; x < (ssize_t) number_pixels; x++)
1189 p=PushShortPixel(quantum_info->endian,p,&pixel);
1190 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
1191 p=PushShortPixel(quantum_info->endian,p,&pixel);
1192 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
1193 p=PushShortPixel(quantum_info->endian,p,&pixel);
1194 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
1195 p=PushShortPixel(quantum_info->endian,p,&pixel);
1196 SetPixelOpacity(image,ScaleShortToQuantum(pixel),q);
1197 p+=(ptrdiff_t) quantum_info->pad;
1198 q+=(ptrdiff_t) GetPixelChannels(image);
1204 if (quantum_info->format == FloatingPointQuantumFormat)
1209 for (x=0; x < (ssize_t) number_pixels; x++)
1211 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1212 SetPixelRed(image,ClampToQuantum(pixel),q);
1213 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1214 SetPixelGreen(image,ClampToQuantum(pixel),q);
1215 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1216 SetPixelBlue(image,ClampToQuantum(pixel),q);
1217 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1218 SetPixelOpacity(image,ClampToQuantum(pixel),q);
1219 p+=(ptrdiff_t) quantum_info->pad;
1220 q+=(ptrdiff_t) GetPixelChannels(image);
1229 for (x=0; x < (ssize_t) number_pixels; x++)
1231 p=PushLongPixel(quantum_info->endian,p,&pixel);
1232 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
1233 p=PushLongPixel(quantum_info->endian,p,&pixel);
1234 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
1235 p=PushLongPixel(quantum_info->endian,p,&pixel);
1236 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
1237 p=PushLongPixel(quantum_info->endian,p,&pixel);
1238 SetPixelOpacity(image,ScaleLongToQuantum(pixel),q);
1239 p+=(ptrdiff_t) quantum_info->pad;
1240 q+=(ptrdiff_t) GetPixelChannels(image);
1247 if (quantum_info->format == FloatingPointQuantumFormat)
1252 for (x=0; x < (ssize_t) number_pixels; x++)
1254 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1255 SetPixelRed(image,ClampToQuantum(pixel),q);
1256 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1257 SetPixelGreen(image,ClampToQuantum(pixel),q);
1258 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1259 SetPixelBlue(image,ClampToQuantum(pixel),q);
1260 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1261 SetPixelOpacity(image,ClampToQuantum(pixel),q);
1262 p+=(ptrdiff_t) quantum_info->pad;
1263 q+=(ptrdiff_t) GetPixelChannels(image);
1271 if (quantum_info->format == FloatingPointQuantumFormat)
1276 for (x=0; x < (ssize_t) number_pixels; x++)
1278 p=PushDoublePixel(quantum_info,p,&pixel);
1279 SetPixelRed(image,ClampToQuantum(pixel),q);
1280 p=PushDoublePixel(quantum_info,p,&pixel);
1281 SetPixelGreen(image,ClampToQuantum(pixel),q);
1282 p=PushDoublePixel(quantum_info,p,&pixel);
1283 SetPixelBlue(image,ClampToQuantum(pixel),q);
1284 p=PushDoublePixel(quantum_info,p,&pixel);
1285 SetPixelOpacity(image,ClampToQuantum(pixel),q);
1286 p+=(ptrdiff_t) quantum_info->pad;
1287 q+=(ptrdiff_t) GetPixelChannels(image);
1298 range=GetQuantumRange(quantum_info->depth);
1299 for (x=0; x < (ssize_t) number_pixels; x++)
1301 p=PushQuantumPixel(quantum_info,p,&pixel);
1302 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
1303 p=PushQuantumPixel(quantum_info,p,&pixel);
1304 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
1305 p=PushQuantumPixel(quantum_info,p,&pixel);
1306 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
1307 p=PushQuantumPixel(quantum_info,p,&pixel);
1308 SetPixelOpacity(image,ScaleAnyToQuantum(pixel,range),q);
1309 q+=(ptrdiff_t) GetPixelChannels(image);
1316static void ImportBlackQuantum(
const Image *image,QuantumInfo *quantum_info,
1317 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
1318 Quantum *magick_restrict q,ExceptionInfo *exception)
1326 if (image->colorspace != CMYKColorspace)
1328 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1329 "ColorSeparatedImageRequired",
"`%s'",image->filename);
1332 switch (quantum_info->depth)
1339 for (x=0; x < (ssize_t) number_pixels; x++)
1341 p=PushCharPixel(p,&pixel);
1342 SetPixelBlack(image,ScaleCharToQuantum(pixel),q);
1343 p+=(ptrdiff_t) quantum_info->pad;
1344 q+=(ptrdiff_t) GetPixelChannels(image);
1353 if (quantum_info->format == FloatingPointQuantumFormat)
1355 for (x=0; x < (ssize_t) number_pixels; x++)
1357 p=PushShortPixel(quantum_info->endian,p,&pixel);
1358 SetPixelBlack(image,ClampToQuantum((
double) QuantumRange*(
double)
1359 HalfToSinglePrecision(pixel)),q);
1360 p+=(ptrdiff_t) quantum_info->pad;
1361 q+=(ptrdiff_t) GetPixelChannels(image);
1365 for (x=0; x < (ssize_t) number_pixels; x++)
1367 p=PushShortPixel(quantum_info->endian,p,&pixel);
1368 SetPixelBlack(image,ScaleShortToQuantum(pixel),q);
1369 p+=(ptrdiff_t) quantum_info->pad;
1370 q+=(ptrdiff_t) GetPixelChannels(image);
1376 if (quantum_info->format == FloatingPointQuantumFormat)
1381 for (x=0; x < (ssize_t) number_pixels; x++)
1383 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1384 SetPixelBlack(image,ClampToQuantum(pixel),q);
1385 p+=(ptrdiff_t) quantum_info->pad;
1386 q+=(ptrdiff_t) GetPixelChannels(image);
1395 for (x=0; x < (ssize_t) number_pixels; x++)
1397 p=PushLongPixel(quantum_info->endian,p,&pixel);
1398 SetPixelBlack(image,ScaleLongToQuantum(pixel),q);
1399 p+=(ptrdiff_t) quantum_info->pad;
1400 q+=(ptrdiff_t) GetPixelChannels(image);
1407 if (quantum_info->format == FloatingPointQuantumFormat)
1412 for (x=0; x < (ssize_t) number_pixels; x++)
1414 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1415 SetPixelBlack(image,ClampToQuantum(pixel),q);
1416 p+=(ptrdiff_t) quantum_info->pad;
1417 q+=(ptrdiff_t) GetPixelChannels(image);
1425 if (quantum_info->format == FloatingPointQuantumFormat)
1430 for (x=0; x < (ssize_t) number_pixels; x++)
1432 p=PushDoublePixel(quantum_info,p,&pixel);
1433 SetPixelBlack(image,ClampToQuantum(pixel),q);
1434 p+=(ptrdiff_t) quantum_info->pad;
1435 q+=(ptrdiff_t) GetPixelChannels(image);
1446 range=GetQuantumRange(quantum_info->depth);
1447 for (x=0; x < (ssize_t) number_pixels; x++)
1449 p=PushQuantumPixel(quantum_info,p,&pixel);
1450 SetPixelBlack(image,ScaleAnyToQuantum(pixel,range),q);
1451 p+=(ptrdiff_t) quantum_info->pad;
1452 q+=(ptrdiff_t) GetPixelChannels(image);
1459static void ImportBlueQuantum(
const Image *image,QuantumInfo *quantum_info,
1460 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
1461 Quantum *magick_restrict q)
1469 assert(image != (Image *) NULL);
1470 assert(image->signature == MagickCoreSignature);
1471 switch (quantum_info->depth)
1478 for (x=0; x < (ssize_t) number_pixels; x++)
1480 p=PushCharPixel(p,&pixel);
1481 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
1482 p+=(ptrdiff_t) quantum_info->pad;
1483 q+=(ptrdiff_t) GetPixelChannels(image);
1492 if (quantum_info->format == FloatingPointQuantumFormat)
1494 for (x=0; x < (ssize_t) number_pixels; x++)
1496 p=PushShortPixel(quantum_info->endian,p,&pixel);
1497 SetPixelBlue(image,ClampToQuantum((
double) QuantumRange*(
double)
1498 HalfToSinglePrecision(pixel)),q);
1499 p+=(ptrdiff_t) quantum_info->pad;
1500 q+=(ptrdiff_t) GetPixelChannels(image);
1504 for (x=0; x < (ssize_t) number_pixels; x++)
1506 p=PushShortPixel(quantum_info->endian,p,&pixel);
1507 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
1508 p+=(ptrdiff_t) quantum_info->pad;
1509 q+=(ptrdiff_t) GetPixelChannels(image);
1515 if (quantum_info->format == FloatingPointQuantumFormat)
1520 for (x=0; x < (ssize_t) number_pixels; x++)
1522 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1523 SetPixelBlue(image,ClampToQuantum(pixel),q);
1524 p+=(ptrdiff_t) quantum_info->pad;
1525 q+=(ptrdiff_t) GetPixelChannels(image);
1534 for (x=0; x < (ssize_t) number_pixels; x++)
1536 p=PushLongPixel(quantum_info->endian,p,&pixel);
1537 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
1538 p+=(ptrdiff_t) quantum_info->pad;
1539 q+=(ptrdiff_t) GetPixelChannels(image);
1546 if (quantum_info->format == FloatingPointQuantumFormat)
1551 for (x=0; x < (ssize_t) number_pixels; x++)
1553 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1554 SetPixelBlue(image,ClampToQuantum(pixel),q);
1555 p+=(ptrdiff_t) quantum_info->pad;
1556 q+=(ptrdiff_t) GetPixelChannels(image);
1564 if (quantum_info->format == FloatingPointQuantumFormat)
1569 for (x=0; x < (ssize_t) number_pixels; x++)
1571 p=PushDoublePixel(quantum_info,p,&pixel);
1572 SetPixelBlue(image,ClampToQuantum(pixel),q);
1573 p+=(ptrdiff_t) quantum_info->pad;
1574 q+=(ptrdiff_t) GetPixelChannels(image);
1585 range=GetQuantumRange(quantum_info->depth);
1586 for (x=0; x < (ssize_t) number_pixels; x++)
1588 p=PushQuantumPixel(quantum_info,p,&pixel);
1589 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
1590 p+=(ptrdiff_t) quantum_info->pad;
1591 q+=(ptrdiff_t) GetPixelChannels(image);
1598static void ImportCbYCrYQuantum(
const Image *image,QuantumInfo *quantum_info,
1599 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
1600 Quantum *magick_restrict q)
1611 assert(image != (Image *) NULL);
1612 assert(image->signature == MagickCoreSignature);
1613 switch (quantum_info->depth)
1621 if (quantum_info->pack == MagickFalse)
1634 for (x=0; x < (ssize_t) (number_pixels-3); x+=4)
1636 for (i=0; i < 4; i++)
1642 p=PushLongPixel(quantum_info->endian,p,&pixel);
1643 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
1644 (((pixel >> 22) & 0x3ff) << 6)));
1649 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
1650 (((pixel >> 12) & 0x3ff) << 6)));
1655 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
1656 (((pixel >> 2) & 0x3ff) << 6)));
1660 cbcr[i]=(Quantum) (quantum);
1663 p+=(ptrdiff_t) quantum_info->pad;
1664 SetPixelRed(image,cbcr[1],q);
1665 SetPixelGreen(image,cbcr[0],q);
1666 SetPixelBlue(image,cbcr[2],q);
1667 q+=(ptrdiff_t) GetPixelChannels(image);
1668 SetPixelRed(image,cbcr[3],q);
1669 SetPixelGreen(image,cbcr[0],q);
1670 SetPixelBlue(image,cbcr[2],q);
1671 q+=(ptrdiff_t) GetPixelChannels(image);
1679 range=GetQuantumRange(quantum_info->depth);
1680 for (x=0; x < (ssize_t) number_pixels; x++)
1682 p=PushQuantumPixel(quantum_info,p,&pixel);
1683 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
1684 p=PushQuantumPixel(quantum_info,p,&pixel);
1685 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
1686 q+=(ptrdiff_t) GetPixelChannels(image);
1693static void ImportCMYKQuantum(
const Image *image,QuantumInfo *quantum_info,
1694 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
1695 Quantum *magick_restrict q,ExceptionInfo *exception)
1703 if (image->colorspace != CMYKColorspace)
1705 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1706 "ColorSeparatedImageRequired",
"`%s'",image->filename);
1709 switch (quantum_info->depth)
1716 for (x=0; x < (ssize_t) number_pixels; x++)
1718 p=PushCharPixel(p,&pixel);
1719 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
1720 p=PushCharPixel(p,&pixel);
1721 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
1722 p=PushCharPixel(p,&pixel);
1723 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
1724 p=PushCharPixel(p,&pixel);
1725 SetPixelBlack(image,ScaleCharToQuantum(pixel),q);
1726 p+=(ptrdiff_t) quantum_info->pad;
1727 q+=(ptrdiff_t) GetPixelChannels(image);
1736 if (quantum_info->format == FloatingPointQuantumFormat)
1738 for (x=0; x < (ssize_t) number_pixels; x++)
1740 p=PushShortPixel(quantum_info->endian,p,&pixel);
1741 SetPixelRed(image,ClampToQuantum((
double) QuantumRange*(
double)
1742 HalfToSinglePrecision(pixel)),q);
1743 p=PushShortPixel(quantum_info->endian,p,&pixel);
1744 SetPixelGreen(image,ClampToQuantum((
double) QuantumRange*(
double)
1745 HalfToSinglePrecision(pixel)),q);
1746 p=PushShortPixel(quantum_info->endian,p,&pixel);
1747 SetPixelBlue(image,ClampToQuantum((
double) QuantumRange*(
double)
1748 HalfToSinglePrecision(pixel)),q);
1749 p=PushShortPixel(quantum_info->endian,p,&pixel);
1750 SetPixelBlack(image,ClampToQuantum((
double) QuantumRange*(
double)
1751 HalfToSinglePrecision(pixel)),q);
1752 p+=(ptrdiff_t) quantum_info->pad;
1753 q+=(ptrdiff_t) GetPixelChannels(image);
1757 for (x=0; x < (ssize_t) number_pixels; x++)
1759 p=PushShortPixel(quantum_info->endian,p,&pixel);
1760 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
1761 p=PushShortPixel(quantum_info->endian,p,&pixel);
1762 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
1763 p=PushShortPixel(quantum_info->endian,p,&pixel);
1764 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
1765 p=PushShortPixel(quantum_info->endian,p,&pixel);
1766 SetPixelBlack(image,ScaleShortToQuantum(pixel),q);
1767 p+=(ptrdiff_t) quantum_info->pad;
1768 q+=(ptrdiff_t) GetPixelChannels(image);
1774 if (quantum_info->format == FloatingPointQuantumFormat)
1779 for (x=0; x < (ssize_t) number_pixels; x++)
1781 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1782 SetPixelRed(image,ClampToQuantum(pixel),q);
1783 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1784 SetPixelGreen(image,ClampToQuantum(pixel),q);
1785 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1786 SetPixelBlue(image,ClampToQuantum(pixel),q);
1787 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1788 SetPixelBlack(image,ClampToQuantum(pixel),q);
1789 p+=(ptrdiff_t) quantum_info->pad;
1790 q+=(ptrdiff_t) GetPixelChannels(image);
1799 for (x=0; x < (ssize_t) number_pixels; x++)
1801 p=PushLongPixel(quantum_info->endian,p,&pixel);
1802 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
1803 p=PushLongPixel(quantum_info->endian,p,&pixel);
1804 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
1805 p=PushLongPixel(quantum_info->endian,p,&pixel);
1806 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
1807 p=PushLongPixel(quantum_info->endian,p,&pixel);
1808 SetPixelBlack(image,ScaleLongToQuantum(pixel),q);
1809 p+=(ptrdiff_t) quantum_info->pad;
1810 q+=(ptrdiff_t) GetPixelChannels(image);
1817 if (quantum_info->format == FloatingPointQuantumFormat)
1822 for (x=0; x < (ssize_t) number_pixels; x++)
1824 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1825 SetPixelRed(image,ClampToQuantum(pixel),q);
1826 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1827 SetPixelGreen(image,ClampToQuantum(pixel),q);
1828 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1829 SetPixelBlue(image,ClampToQuantum(pixel),q);
1830 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1831 SetPixelBlack(image,ClampToQuantum(pixel),q);
1832 p+=(ptrdiff_t) quantum_info->pad;
1833 q+=(ptrdiff_t) GetPixelChannels(image);
1841 if (quantum_info->format == FloatingPointQuantumFormat)
1846 for (x=0; x < (ssize_t) number_pixels; x++)
1848 p=PushDoublePixel(quantum_info,p,&pixel);
1849 SetPixelRed(image,ClampToQuantum(pixel),q);
1850 p=PushDoublePixel(quantum_info,p,&pixel);
1851 SetPixelGreen(image,ClampToQuantum(pixel),q);
1852 p=PushDoublePixel(quantum_info,p,&pixel);
1853 SetPixelBlue(image,ClampToQuantum(pixel),q);
1854 p=PushDoublePixel(quantum_info,p,&pixel);
1855 SetPixelBlack(image,ClampToQuantum(pixel),q);
1856 p+=(ptrdiff_t) quantum_info->pad;
1857 q+=(ptrdiff_t) GetPixelChannels(image);
1868 range=GetQuantumRange(quantum_info->depth);
1869 for (x=0; x < (ssize_t) number_pixels; x++)
1871 p=PushQuantumPixel(quantum_info,p,&pixel);
1872 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
1873 p=PushQuantumPixel(quantum_info,p,&pixel);
1874 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
1875 p=PushQuantumPixel(quantum_info,p,&pixel);
1876 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
1877 p=PushQuantumPixel(quantum_info,p,&pixel);
1878 SetPixelBlack(image,ScaleAnyToQuantum(pixel,range),q);
1879 q+=(ptrdiff_t) GetPixelChannels(image);
1886static void ImportCMYKAQuantum(
const Image *image,QuantumInfo *quantum_info,
1887 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
1888 Quantum *magick_restrict q,ExceptionInfo *exception)
1896 if (image->colorspace != CMYKColorspace)
1898 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1899 "ColorSeparatedImageRequired",
"`%s'",image->filename);
1902 switch (quantum_info->depth)
1909 for (x=0; x < (ssize_t) number_pixels; x++)
1911 p=PushCharPixel(p,&pixel);
1912 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
1913 p=PushCharPixel(p,&pixel);
1914 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
1915 p=PushCharPixel(p,&pixel);
1916 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
1917 p=PushCharPixel(p,&pixel);
1918 SetPixelBlack(image,ScaleCharToQuantum(pixel),q);
1919 p=PushCharPixel(p,&pixel);
1920 SetPixelAlpha(image,ScaleCharToQuantum(pixel),q);
1921 p+=(ptrdiff_t) quantum_info->pad;
1922 q+=(ptrdiff_t) GetPixelChannels(image);
1931 if (quantum_info->format == FloatingPointQuantumFormat)
1933 for (x=0; x < (ssize_t) number_pixels; x++)
1935 p=PushShortPixel(quantum_info->endian,p,&pixel);
1936 SetPixelRed(image,ClampToQuantum((
double) QuantumRange*(
double)
1937 HalfToSinglePrecision(pixel)),q);
1938 p=PushShortPixel(quantum_info->endian,p,&pixel);
1939 SetPixelGreen(image,ClampToQuantum((
double) QuantumRange*(
double)
1940 HalfToSinglePrecision(pixel)),q);
1941 p=PushShortPixel(quantum_info->endian,p,&pixel);
1942 SetPixelBlue(image,ClampToQuantum((
double) QuantumRange*(
double)
1943 HalfToSinglePrecision(pixel)),q);
1944 p=PushShortPixel(quantum_info->endian,p,&pixel);
1945 SetPixelBlack(image,ClampToQuantum((
double) QuantumRange*(
double)
1946 HalfToSinglePrecision(pixel)),q);
1947 p=PushShortPixel(quantum_info->endian,p,&pixel);
1948 SetPixelAlpha(image,ClampToQuantum((
double) QuantumRange*(
double)
1949 HalfToSinglePrecision(pixel)),q);
1950 p+=(ptrdiff_t) quantum_info->pad;
1951 q+=(ptrdiff_t) GetPixelChannels(image);
1955 for (x=0; x < (ssize_t) number_pixels; x++)
1957 p=PushShortPixel(quantum_info->endian,p,&pixel);
1958 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
1959 p=PushShortPixel(quantum_info->endian,p,&pixel);
1960 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
1961 p=PushShortPixel(quantum_info->endian,p,&pixel);
1962 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
1963 p=PushShortPixel(quantum_info->endian,p,&pixel);
1964 SetPixelBlack(image,ScaleShortToQuantum(pixel),q);
1965 p=PushShortPixel(quantum_info->endian,p,&pixel);
1966 SetPixelAlpha(image,ScaleShortToQuantum(pixel),q);
1967 p+=(ptrdiff_t) quantum_info->pad;
1968 q+=(ptrdiff_t) GetPixelChannels(image);
1974 if (quantum_info->format == FloatingPointQuantumFormat)
1979 for (x=0; x < (ssize_t) number_pixels; x++)
1981 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1982 SetPixelRed(image,ClampToQuantum(pixel),q);
1983 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1984 SetPixelGreen(image,ClampToQuantum(pixel),q);
1985 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1986 SetPixelBlue(image,ClampToQuantum(pixel),q);
1987 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1988 SetPixelBlack(image,ClampToQuantum(pixel),q);
1989 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1990 SetPixelAlpha(image,ClampToQuantum(pixel),q);
1991 p+=(ptrdiff_t) quantum_info->pad;
1992 q+=(ptrdiff_t) GetPixelChannels(image);
2001 for (x=0; x < (ssize_t) number_pixels; x++)
2003 p=PushLongPixel(quantum_info->endian,p,&pixel);
2004 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
2005 p=PushLongPixel(quantum_info->endian,p,&pixel);
2006 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
2007 p=PushLongPixel(quantum_info->endian,p,&pixel);
2008 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
2009 p=PushLongPixel(quantum_info->endian,p,&pixel);
2010 SetPixelBlack(image,ScaleLongToQuantum(pixel),q);
2011 p=PushLongPixel(quantum_info->endian,p,&pixel);
2012 SetPixelAlpha(image,ScaleLongToQuantum(pixel),q);
2013 p+=(ptrdiff_t) quantum_info->pad;
2014 q+=(ptrdiff_t) GetPixelChannels(image);
2021 if (quantum_info->format == FloatingPointQuantumFormat)
2026 for (x=0; x < (ssize_t) number_pixels; x++)
2028 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
2029 SetPixelRed(image,ClampToQuantum(pixel),q);
2030 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
2031 SetPixelGreen(image,ClampToQuantum(pixel),q);
2032 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
2033 SetPixelBlue(image,ClampToQuantum(pixel),q);
2034 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
2035 SetPixelBlack(image,ClampToQuantum(pixel),q);
2036 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
2037 SetPixelAlpha(image,ClampToQuantum(pixel),q);
2038 p+=(ptrdiff_t) quantum_info->pad;
2039 q+=(ptrdiff_t) GetPixelChannels(image);
2047 if (quantum_info->format == FloatingPointQuantumFormat)
2052 for (x=0; x < (ssize_t) number_pixels; x++)
2054 p=PushDoublePixel(quantum_info,p,&pixel);
2055 SetPixelRed(image,ClampToQuantum(pixel),q);
2056 p=PushDoublePixel(quantum_info,p,&pixel);
2057 SetPixelGreen(image,ClampToQuantum(pixel),q);
2058 p=PushDoublePixel(quantum_info,p,&pixel);
2059 SetPixelBlue(image,ClampToQuantum(pixel),q);
2060 p=PushDoublePixel(quantum_info,p,&pixel);
2061 SetPixelBlack(image,ClampToQuantum(pixel),q);
2062 p=PushDoublePixel(quantum_info,p,&pixel);
2063 SetPixelAlpha(image,ClampToQuantum(pixel),q);
2064 p+=(ptrdiff_t) quantum_info->pad;
2065 q+=(ptrdiff_t) GetPixelChannels(image);
2076 range=GetQuantumRange(quantum_info->depth);
2077 for (x=0; x < (ssize_t) number_pixels; x++)
2079 p=PushQuantumPixel(quantum_info,p,&pixel);
2080 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
2081 p=PushQuantumPixel(quantum_info,p,&pixel);
2082 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
2083 p=PushQuantumPixel(quantum_info,p,&pixel);
2084 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
2085 p=PushQuantumPixel(quantum_info,p,&pixel);
2086 SetPixelBlack(image,ScaleAnyToQuantum(pixel,range),q);
2087 p=PushQuantumPixel(quantum_info,p,&pixel);
2088 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
2089 q+=(ptrdiff_t) GetPixelChannels(image);
2096static void ImportCMYKOQuantum(
const Image *image,QuantumInfo *quantum_info,
2097 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
2098 Quantum *magick_restrict q,ExceptionInfo *exception)
2106 if (image->colorspace != CMYKColorspace)
2108 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2109 "ColorSeparatedImageRequired",
"`%s'",image->filename);
2112 switch (quantum_info->depth)
2119 for (x=0; x < (ssize_t) number_pixels; x++)
2121 p=PushCharPixel(p,&pixel);
2122 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
2123 p=PushCharPixel(p,&pixel);
2124 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
2125 p=PushCharPixel(p,&pixel);
2126 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
2127 p=PushCharPixel(p,&pixel);
2128 SetPixelBlack(image,ScaleCharToQuantum(pixel),q);
2129 p=PushCharPixel(p,&pixel);
2130 SetPixelOpacity(image,ScaleCharToQuantum(pixel),q);
2131 p+=(ptrdiff_t) quantum_info->pad;
2132 q+=(ptrdiff_t) GetPixelChannels(image);
2141 if (quantum_info->format == FloatingPointQuantumFormat)
2143 for (x=0; x < (ssize_t) number_pixels; x++)
2145 p=PushShortPixel(quantum_info->endian,p,&pixel);
2146 SetPixelRed(image,ClampToQuantum((
double) QuantumRange*(
double)
2147 HalfToSinglePrecision(pixel)),q);
2148 p=PushShortPixel(quantum_info->endian,p,&pixel);
2149 SetPixelGreen(image,ClampToQuantum((
double) QuantumRange*(
double)
2150 HalfToSinglePrecision(pixel)),q);
2151 p=PushShortPixel(quantum_info->endian,p,&pixel);
2152 SetPixelBlue(image,ClampToQuantum((
double) QuantumRange*(
double)
2153 HalfToSinglePrecision(pixel)),q);
2154 p=PushShortPixel(quantum_info->endian,p,&pixel);
2155 SetPixelBlack(image,ClampToQuantum((
double) QuantumRange*(
double)
2156 HalfToSinglePrecision(pixel)),q);
2157 p=PushShortPixel(quantum_info->endian,p,&pixel);
2158 SetPixelOpacity(image,ClampToQuantum((
double) QuantumRange*(
double)
2159 HalfToSinglePrecision(pixel)),q);
2160 p+=(ptrdiff_t) quantum_info->pad;
2161 q+=(ptrdiff_t) GetPixelChannels(image);
2165 for (x=0; x < (ssize_t) number_pixels; x++)
2167 p=PushShortPixel(quantum_info->endian,p,&pixel);
2168 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
2169 p=PushShortPixel(quantum_info->endian,p,&pixel);
2170 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
2171 p=PushShortPixel(quantum_info->endian,p,&pixel);
2172 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
2173 p=PushShortPixel(quantum_info->endian,p,&pixel);
2174 SetPixelBlack(image,ScaleShortToQuantum(pixel),q);
2175 p=PushShortPixel(quantum_info->endian,p,&pixel);
2176 SetPixelOpacity(image,ScaleShortToQuantum(pixel),q);
2177 p+=(ptrdiff_t) quantum_info->pad;
2178 q+=(ptrdiff_t) GetPixelChannels(image);
2184 if (quantum_info->format == FloatingPointQuantumFormat)
2189 for (x=0; x < (ssize_t) number_pixels; x++)
2191 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
2192 SetPixelRed(image,ClampToQuantum(pixel),q);
2193 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
2194 SetPixelGreen(image,ClampToQuantum(pixel),q);
2195 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
2196 SetPixelBlue(image,ClampToQuantum(pixel),q);
2197 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
2198 SetPixelBlack(image,ClampToQuantum(pixel),q);
2199 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
2200 SetPixelOpacity(image,ClampToQuantum(pixel),q);
2201 p+=(ptrdiff_t) quantum_info->pad;
2202 q+=(ptrdiff_t) GetPixelChannels(image);
2211 for (x=0; x < (ssize_t) number_pixels; x++)
2213 p=PushLongPixel(quantum_info->endian,p,&pixel);
2214 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
2215 p=PushLongPixel(quantum_info->endian,p,&pixel);
2216 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
2217 p=PushLongPixel(quantum_info->endian,p,&pixel);
2218 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
2219 p=PushLongPixel(quantum_info->endian,p,&pixel);
2220 SetPixelBlack(image,ScaleLongToQuantum(pixel),q);
2221 p=PushLongPixel(quantum_info->endian,p,&pixel);
2222 SetPixelOpacity(image,ScaleLongToQuantum(pixel),q);
2223 p+=(ptrdiff_t) quantum_info->pad;
2224 q+=(ptrdiff_t) GetPixelChannels(image);
2231 if (quantum_info->format == FloatingPointQuantumFormat)
2236 for (x=0; x < (ssize_t) number_pixels; x++)
2238 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
2239 SetPixelRed(image,ClampToQuantum(pixel),q);
2240 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
2241 SetPixelGreen(image,ClampToQuantum(pixel),q);
2242 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
2243 SetPixelBlue(image,ClampToQuantum(pixel),q);
2244 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
2245 SetPixelBlack(image,ClampToQuantum(pixel),q);
2246 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
2247 SetPixelOpacity(image,ClampToQuantum(pixel),q);
2248 p+=(ptrdiff_t) quantum_info->pad;
2249 q+=(ptrdiff_t) GetPixelChannels(image);
2257 if (quantum_info->format == FloatingPointQuantumFormat)
2262 for (x=0; x < (ssize_t) number_pixels; x++)
2264 p=PushDoublePixel(quantum_info,p,&pixel);
2265 SetPixelRed(image,ClampToQuantum(pixel),q);
2266 p=PushDoublePixel(quantum_info,p,&pixel);
2267 SetPixelGreen(image,ClampToQuantum(pixel),q);
2268 p=PushDoublePixel(quantum_info,p,&pixel);
2269 SetPixelBlue(image,ClampToQuantum(pixel),q);
2270 p=PushDoublePixel(quantum_info,p,&pixel);
2271 SetPixelBlack(image,ClampToQuantum(pixel),q);
2272 p=PushDoublePixel(quantum_info,p,&pixel);
2273 SetPixelOpacity(image,ClampToQuantum(pixel),q);
2274 p+=(ptrdiff_t) quantum_info->pad;
2275 q+=(ptrdiff_t) GetPixelChannels(image);
2286 range=GetQuantumRange(quantum_info->depth);
2287 for (x=0; x < (ssize_t) number_pixels; x++)
2289 p=PushQuantumPixel(quantum_info,p,&pixel);
2290 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
2291 p=PushQuantumPixel(quantum_info,p,&pixel);
2292 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
2293 p=PushQuantumPixel(quantum_info,p,&pixel);
2294 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
2295 p=PushQuantumPixel(quantum_info,p,&pixel);
2296 SetPixelBlack(image,ScaleAnyToQuantum(pixel,range),q);
2297 p=PushQuantumPixel(quantum_info,p,&pixel);
2298 SetPixelOpacity(image,ScaleAnyToQuantum(pixel,range),q);
2299 q+=(ptrdiff_t) GetPixelChannels(image);
2306static void ImportGrayQuantum(
const Image *image,QuantumInfo *quantum_info,
2307 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
2308 Quantum *magick_restrict q)
2319 assert(image != (Image *) NULL);
2320 assert(image->signature == MagickCoreSignature);
2321 switch (quantum_info->depth)
2331 if (quantum_info->min_is_white != MagickFalse)
2336 for (x=0; x < ((ssize_t) number_pixels-7); x+=8)
2338 for (bit=0; bit < 8; bit++)
2340 SetPixelGray(image,((*p) & (1 << (7-bit))) == 0 ? black : white,q);
2341 q+=(ptrdiff_t) GetPixelChannels(image);
2345 for (bit=0; bit < (ssize_t) (number_pixels % 8); bit++)
2347 SetPixelGray(image,((*p) & (0x01 << (7-bit))) == 0 ? black : white,q);
2348 q+=(ptrdiff_t) GetPixelChannels(image);
2359 range=GetQuantumRange(quantum_info->depth);
2360 for (x=0; x < ((ssize_t) number_pixels-1); x+=2)
2362 pixel=(
unsigned char) ((*p >> 4) & 0xf);
2363 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
2364 q+=(ptrdiff_t) GetPixelChannels(image);
2365 pixel=(
unsigned char) ((*p) & 0xf);
2366 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
2368 q+=(ptrdiff_t) GetPixelChannels(image);
2370 for (bit=0; bit < (ssize_t) (number_pixels % 2); bit++)
2372 pixel=(
unsigned char) (*p++ >> 4);
2373 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
2374 q+=(ptrdiff_t) GetPixelChannels(image);
2383 if (quantum_info->min_is_white != MagickFalse)
2385 for (x=0; x < (ssize_t) number_pixels; x++)
2387 p=PushCharPixel(p,&pixel);
2388 SetPixelGray(image,QuantumRange-ScaleCharToQuantum(pixel),q);
2389 SetPixelAlpha(image,OpaqueAlpha,q);
2390 p+=(ptrdiff_t) quantum_info->pad;
2391 q+=(ptrdiff_t) GetPixelChannels(image);
2395 for (x=0; x < (ssize_t) number_pixels; x++)
2397 p=PushCharPixel(p,&pixel);
2398 SetPixelGray(image,ScaleCharToQuantum(pixel),q);
2399 SetPixelAlpha(image,OpaqueAlpha,q);
2400 p+=(ptrdiff_t) quantum_info->pad;
2401 q+=(ptrdiff_t) GetPixelChannels(image);
2411 range=GetQuantumRange(quantum_info->depth);
2412 if (quantum_info->pack == MagickFalse)
2414 if (image->endian == LSBEndian)
2416 for (x=0; x < (ssize_t) (number_pixels-2); x+=3)
2418 p=PushLongPixel(quantum_info->endian,p,&pixel);
2419 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 22) & 0x3ff,
2421 q+=(ptrdiff_t) GetPixelChannels(image);
2422 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,
2424 q+=(ptrdiff_t) GetPixelChannels(image);
2425 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 2) & 0x3ff,
2427 p+=(ptrdiff_t) quantum_info->pad;
2428 q+=(ptrdiff_t) GetPixelChannels(image);
2430 if (x++ < (ssize_t) (number_pixels-1))
2432 p=PushLongPixel(quantum_info->endian,p,&pixel);
2433 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 22) & 0x3ff,
2435 q+=(ptrdiff_t) GetPixelChannels(image);
2437 if (x++ < (ssize_t) number_pixels)
2439 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,
2441 q+=(ptrdiff_t) GetPixelChannels(image);
2445 for (x=0; x < (ssize_t) (number_pixels-2); x+=3)
2447 p=PushLongPixel(quantum_info->endian,p,&pixel);
2448 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 2) & 0x3ff,range),
2450 q+=(ptrdiff_t) GetPixelChannels(image);
2451 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,range),
2453 q+=(ptrdiff_t) GetPixelChannels(image);
2454 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 22) & 0x3ff,range),
2456 p+=(ptrdiff_t) quantum_info->pad;
2457 q+=(ptrdiff_t) GetPixelChannels(image);
2459 if (x++ < (ssize_t) (number_pixels-1))
2461 p=PushLongPixel(quantum_info->endian,p,&pixel);
2462 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 2) & 0x3ff,
2464 q+=(ptrdiff_t) GetPixelChannels(image);
2466 if (x++ < (ssize_t) number_pixels)
2468 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,
2470 q+=(ptrdiff_t) GetPixelChannels(image);
2474 for (x=0; x < (ssize_t) number_pixels; x++)
2476 p=PushQuantumPixel(quantum_info,p,&pixel);
2477 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
2478 p+=(ptrdiff_t) quantum_info->pad;
2479 q+=(ptrdiff_t) GetPixelChannels(image);
2485 range=GetQuantumRange(quantum_info->depth);
2486 if (quantum_info->pack == MagickFalse)
2491 for (x=0; x < (ssize_t) (number_pixels-1); x+=2)
2493 p=PushShortPixel(quantum_info->endian,p,&pixel);
2494 SetPixelGray(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
2496 q+=(ptrdiff_t) GetPixelChannels(image);
2497 p=PushShortPixel(quantum_info->endian,p,&pixel);
2498 SetPixelGray(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
2500 p+=(ptrdiff_t) quantum_info->pad;
2501 q+=(ptrdiff_t) GetPixelChannels(image);
2503 for (bit=0; bit < (ssize_t) (number_pixels % 2); bit++)
2505 p=PushShortPixel(quantum_info->endian,p,&pixel);
2506 SetPixelGray(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
2508 p+=(ptrdiff_t) quantum_info->pad;
2509 q+=(ptrdiff_t) GetPixelChannels(image);
2520 for (x=0; x < (ssize_t) number_pixels; x++)
2522 p=PushQuantumPixel(quantum_info,p,&pixel);
2523 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
2524 p+=(ptrdiff_t) quantum_info->pad;
2525 q+=(ptrdiff_t) GetPixelChannels(image);
2535 if (quantum_info->min_is_white != MagickFalse)
2537 for (x=0; x < (ssize_t) number_pixels; x++)
2539 p=PushShortPixel(quantum_info->endian,p,&pixel);
2540 SetPixelGray(image,QuantumRange-ScaleShortToQuantum(pixel),q);
2541 p+=(ptrdiff_t) quantum_info->pad;
2542 q+=(ptrdiff_t) GetPixelChannels(image);
2546 if (quantum_info->format == FloatingPointQuantumFormat)
2548 for (x=0; x < (ssize_t) number_pixels; x++)
2550 p=PushShortPixel(quantum_info->endian,p,&pixel);
2551 SetPixelGray(image,ClampToQuantum((
double) QuantumRange*(
double)
2552 HalfToSinglePrecision(pixel)),q);
2553 p+=(ptrdiff_t) quantum_info->pad;
2554 q+=(ptrdiff_t) GetPixelChannels(image);
2558 for (x=0; x < (ssize_t) number_pixels; x++)
2560 p=PushShortPixel(quantum_info->endian,p,&pixel);
2561 SetPixelGray(image,ScaleShortToQuantum(pixel),q);
2562 p+=(ptrdiff_t) quantum_info->pad;
2563 q+=(ptrdiff_t) GetPixelChannels(image);
2569 if (quantum_info->format == FloatingPointQuantumFormat)
2574 for (x=0; x < (ssize_t) number_pixels; x++)
2576 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
2577 SetPixelGray(image,ClampToQuantum(pixel),q);
2578 p+=(ptrdiff_t) quantum_info->pad;
2579 q+=(ptrdiff_t) GetPixelChannels(image);
2588 for (x=0; x < (ssize_t) number_pixels; x++)
2590 p=PushLongPixel(quantum_info->endian,p,&pixel);
2591 SetPixelGray(image,ScaleLongToQuantum(pixel),q);
2592 p+=(ptrdiff_t) quantum_info->pad;
2593 q+=(ptrdiff_t) GetPixelChannels(image);
2600 if (quantum_info->format == FloatingPointQuantumFormat)
2605 for (x=0; x < (ssize_t) number_pixels; x++)
2607 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
2608 SetPixelGray(image,ClampToQuantum(pixel),q);
2609 p+=(ptrdiff_t) quantum_info->pad;
2610 q+=(ptrdiff_t) GetPixelChannels(image);
2618 if (quantum_info->format == FloatingPointQuantumFormat)
2623 for (x=0; x < (ssize_t) number_pixels; x++)
2625 p=PushDoublePixel(quantum_info,p,&pixel);
2626 SetPixelGray(image,ClampToQuantum(pixel),q);
2627 p+=(ptrdiff_t) quantum_info->pad;
2628 q+=(ptrdiff_t) GetPixelChannels(image);
2639 range=GetQuantumRange(quantum_info->depth);
2640 for (x=0; x < (ssize_t) number_pixels; x++)
2642 p=PushQuantumPixel(quantum_info,p,&pixel);
2643 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
2644 p+=(ptrdiff_t) quantum_info->pad;
2645 q+=(ptrdiff_t) GetPixelChannels(image);
2652static void ImportGrayAlphaQuantum(
const Image *image,QuantumInfo *quantum_info,
2653 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
2654 Quantum *magick_restrict q)
2665 assert(image != (Image *) NULL);
2666 assert(image->signature == MagickCoreSignature);
2667 switch (quantum_info->depth)
2675 for (x=((ssize_t) number_pixels-3); x > 0; x-=4)
2677 for (bit=0; bit < 8; bit+=2)
2679 pixel=(
unsigned char) (((*p) & (1 << (7-bit))) != 0 ? 0x00 : 0x01);
2680 SetPixelGray(image,(Quantum) (pixel == 0 ? 0 : QuantumRange),q);
2681 SetPixelAlpha(image,((*p) & (1UL << (
unsigned char) (6-bit))) == 0 ?
2682 TransparentAlpha : OpaqueAlpha,q);
2683 q+=(ptrdiff_t) GetPixelChannels(image);
2687 if ((number_pixels % 4) != 0)
2688 for (bit=3; bit >= (ssize_t) (4-(number_pixels % 4)); bit-=2)
2690 pixel=(
unsigned char) (((*p) & (1 << (7-bit))) != 0 ? 0x00 : 0x01);
2691 SetPixelGray(image,(Quantum) (pixel != 0 ? 0 : QuantumRange),q);
2692 SetPixelAlpha(image,((*p) & (1UL << (
unsigned char) (6-bit))) == 0 ?
2693 TransparentAlpha : OpaqueAlpha,q);
2694 q+=(ptrdiff_t) GetPixelChannels(image);
2705 range=GetQuantumRange(quantum_info->depth);
2706 for (x=0; x < (ssize_t) number_pixels; x++)
2708 pixel=(
unsigned char) ((*p >> 4) & 0xf);
2709 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
2710 pixel=(
unsigned char) ((*p) & 0xf);
2711 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
2713 q+=(ptrdiff_t) GetPixelChannels(image);
2722 for (x=0; x < (ssize_t) number_pixels; x++)
2724 p=PushCharPixel(p,&pixel);
2725 SetPixelGray(image,ScaleCharToQuantum(pixel),q);
2726 p=PushCharPixel(p,&pixel);
2727 SetPixelAlpha(image,ScaleCharToQuantum(pixel),q);
2728 p+=(ptrdiff_t) quantum_info->pad;
2729 q+=(ptrdiff_t) GetPixelChannels(image);
2738 range=GetQuantumRange(quantum_info->depth);
2739 for (x=0; x < (ssize_t) number_pixels; x++)
2741 p=PushQuantumPixel(quantum_info,p,&pixel);
2742 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
2743 p=PushQuantumPixel(quantum_info,p,&pixel);
2744 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
2745 p+=(ptrdiff_t) quantum_info->pad;
2746 q+=(ptrdiff_t) GetPixelChannels(image);
2755 range=GetQuantumRange(quantum_info->depth);
2756 for (x=0; x < (ssize_t) number_pixels; x++)
2758 p=PushQuantumPixel(quantum_info,p,&pixel);
2759 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
2760 p=PushQuantumPixel(quantum_info,p,&pixel);
2761 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
2762 p+=(ptrdiff_t) quantum_info->pad;
2763 q+=(ptrdiff_t) GetPixelChannels(image);
2772 if (quantum_info->format == FloatingPointQuantumFormat)
2774 for (x=0; x < (ssize_t) number_pixels; x++)
2776 p=PushShortPixel(quantum_info->endian,p,&pixel);
2777 SetPixelGray(image,ClampToQuantum((
double) QuantumRange*(
double)
2778 HalfToSinglePrecision(pixel)),q);
2779 p=PushShortPixel(quantum_info->endian,p,&pixel);
2780 SetPixelAlpha(image,ClampToQuantum((
double) QuantumRange*(
double)
2781 HalfToSinglePrecision(pixel)),q);
2782 p+=(ptrdiff_t) quantum_info->pad;
2783 q+=(ptrdiff_t) GetPixelChannels(image);
2787 for (x=0; x < (ssize_t) number_pixels; x++)
2789 p=PushShortPixel(quantum_info->endian,p,&pixel);
2790 SetPixelGray(image,ScaleShortToQuantum(pixel),q);
2791 p=PushShortPixel(quantum_info->endian,p,&pixel);
2792 SetPixelAlpha(image,ScaleShortToQuantum(pixel),q);
2793 p+=(ptrdiff_t) quantum_info->pad;
2794 q+=(ptrdiff_t) GetPixelChannels(image);
2800 if (quantum_info->format == FloatingPointQuantumFormat)
2805 for (x=0; x < (ssize_t) number_pixels; x++)
2807 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
2808 SetPixelGray(image,ClampToQuantum(pixel),q);
2809 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
2810 SetPixelAlpha(image,ClampToQuantum(pixel),q);
2811 p+=(ptrdiff_t) quantum_info->pad;
2812 q+=(ptrdiff_t) GetPixelChannels(image);
2821 for (x=0; x < (ssize_t) number_pixels; x++)
2823 p=PushLongPixel(quantum_info->endian,p,&pixel);
2824 SetPixelGray(image,ScaleLongToQuantum(pixel),q);
2825 p=PushLongPixel(quantum_info->endian,p,&pixel);
2826 SetPixelAlpha(image,ScaleLongToQuantum(pixel),q);
2827 p+=(ptrdiff_t) quantum_info->pad;
2828 q+=(ptrdiff_t) GetPixelChannels(image);
2835 if (quantum_info->format == FloatingPointQuantumFormat)
2840 for (x=0; x < (ssize_t) number_pixels; x++)
2842 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
2843 SetPixelGray(image,ClampToQuantum(pixel),q);
2844 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
2845 SetPixelAlpha(image,ClampToQuantum(pixel),q);
2846 p+=(ptrdiff_t) quantum_info->pad;
2847 q+=(ptrdiff_t) GetPixelChannels(image);
2855 if (quantum_info->format == FloatingPointQuantumFormat)
2860 for (x=0; x < (ssize_t) number_pixels; x++)
2862 p=PushDoublePixel(quantum_info,p,&pixel);
2863 SetPixelGray(image,ClampToQuantum(pixel),q);
2864 p=PushDoublePixel(quantum_info,p,&pixel);
2865 SetPixelAlpha(image,ClampToQuantum(pixel),q);
2866 p+=(ptrdiff_t) quantum_info->pad;
2867 q+=(ptrdiff_t) GetPixelChannels(image);
2878 range=GetQuantumRange(quantum_info->depth);
2879 for (x=0; x < (ssize_t) number_pixels; x++)
2881 p=PushQuantumPixel(quantum_info,p,&pixel);
2882 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
2883 p=PushQuantumPixel(quantum_info,p,&pixel);
2884 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
2885 p+=(ptrdiff_t) quantum_info->pad;
2886 q+=(ptrdiff_t) GetPixelChannels(image);
2893static void ImportGreenQuantum(
const Image *image,QuantumInfo *quantum_info,
2894 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
2895 Quantum *magick_restrict q)
2903 assert(image != (Image *) NULL);
2904 assert(image->signature == MagickCoreSignature);
2905 switch (quantum_info->depth)
2912 for (x=0; x < (ssize_t) number_pixels; x++)
2914 p=PushCharPixel(p,&pixel);
2915 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
2916 p+=(ptrdiff_t) quantum_info->pad;
2917 q+=(ptrdiff_t) GetPixelChannels(image);
2926 if (quantum_info->format == FloatingPointQuantumFormat)
2928 for (x=0; x < (ssize_t) number_pixels; x++)
2930 p=PushShortPixel(quantum_info->endian,p,&pixel);
2931 SetPixelGreen(image,ClampToQuantum((
double) QuantumRange*(
double)
2932 HalfToSinglePrecision(pixel)),q);
2933 p+=(ptrdiff_t) quantum_info->pad;
2934 q+=(ptrdiff_t) GetPixelChannels(image);
2938 for (x=0; x < (ssize_t) number_pixels; x++)
2940 p=PushShortPixel(quantum_info->endian,p,&pixel);
2941 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
2942 p+=(ptrdiff_t) quantum_info->pad;
2943 q+=(ptrdiff_t) GetPixelChannels(image);
2949 if (quantum_info->format == FloatingPointQuantumFormat)
2954 for (x=0; x < (ssize_t) number_pixels; x++)
2956 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
2957 SetPixelGreen(image,ClampToQuantum(pixel),q);
2958 p+=(ptrdiff_t) quantum_info->pad;
2959 q+=(ptrdiff_t) GetPixelChannels(image);
2968 for (x=0; x < (ssize_t) number_pixels; x++)
2970 p=PushLongPixel(quantum_info->endian,p,&pixel);
2971 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
2972 p+=(ptrdiff_t) quantum_info->pad;
2973 q+=(ptrdiff_t) GetPixelChannels(image);
2980 if (quantum_info->format == FloatingPointQuantumFormat)
2985 for (x=0; x < (ssize_t) number_pixels; x++)
2987 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
2988 SetPixelGreen(image,ClampToQuantum(pixel),q);
2989 p+=(ptrdiff_t) quantum_info->pad;
2990 q+=(ptrdiff_t) GetPixelChannels(image);
2998 if (quantum_info->format == FloatingPointQuantumFormat)
3003 for (x=0; x < (ssize_t) number_pixels; x++)
3005 p=PushDoublePixel(quantum_info,p,&pixel);
3006 SetPixelGreen(image,ClampToQuantum(pixel),q);
3007 p+=(ptrdiff_t) quantum_info->pad;
3008 q+=(ptrdiff_t) GetPixelChannels(image);
3019 range=GetQuantumRange(quantum_info->depth);
3020 for (x=0; x < (ssize_t) number_pixels; x++)
3022 p=PushQuantumPixel(quantum_info,p,&pixel);
3023 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
3024 p+=(ptrdiff_t) quantum_info->pad;
3025 q+=(ptrdiff_t) GetPixelChannels(image);
3032static void ImportIndexQuantum(
const Image *image,QuantumInfo *quantum_info,
3033 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
3034 Quantum *magick_restrict q,ExceptionInfo *exception)
3045 if (image->storage_class != PseudoClass)
3047 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
3048 "ColormappedImageRequired",
"`%s'",image->filename);
3051 range_exception=MagickFalse;
3052 switch (quantum_info->depth)
3059 for (x=0; x < ((ssize_t) number_pixels-7); x+=8)
3061 for (bit=0; bit < 8; bit++)
3063 if (quantum_info->min_is_white == MagickFalse)
3064 pixel=(
unsigned char) (((*p) & (1 << (7-bit))) == 0 ?
3067 pixel=(
unsigned char) (((*p) & (1 << (7-bit))) != 0 ?
3069 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),
3071 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
3072 GetPixelIndex(image,q),q);
3073 q+=(ptrdiff_t) GetPixelChannels(image);
3077 for (bit=0; bit < (ssize_t) (number_pixels % 8); bit++)
3079 if (quantum_info->min_is_white == MagickFalse)
3080 pixel=(
unsigned char) (((*p) & (1 << (7-bit))) == 0 ? 0x00 : 0x01);
3082 pixel=(
unsigned char) (((*p) & (1 << (7-bit))) != 0 ? 0x00 : 0x01);
3083 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
3084 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
3085 GetPixelIndex(image,q),q);
3086 q+=(ptrdiff_t) GetPixelChannels(image);
3095 for (x=0; x < ((ssize_t) number_pixels-1); x+=2)
3097 pixel=(
unsigned char) ((*p >> 4) & 0xf);
3098 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
3099 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
3100 GetPixelIndex(image,q),q);
3101 q+=(ptrdiff_t) GetPixelChannels(image);
3102 pixel=(
unsigned char) ((*p) & 0xf);
3103 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
3104 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
3105 GetPixelIndex(image,q),q);
3107 q+=(ptrdiff_t) GetPixelChannels(image);
3109 for (bit=0; bit < (ssize_t) (number_pixels % 2); bit++)
3111 pixel=(
unsigned char) ((*p++ >> 4) & 0xf);
3112 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
3113 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
3114 GetPixelIndex(image,q),q);
3115 q+=(ptrdiff_t) GetPixelChannels(image);
3124 for (x=0; x < (ssize_t) number_pixels; x++)
3126 p=PushCharPixel(p,&pixel);
3127 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
3128 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
3129 GetPixelIndex(image,q),q);
3130 p+=(ptrdiff_t) quantum_info->pad;
3131 q+=(ptrdiff_t) GetPixelChannels(image);
3140 if (quantum_info->format == FloatingPointQuantumFormat)
3142 for (x=0; x < (ssize_t) number_pixels; x++)
3144 p=PushShortPixel(quantum_info->endian,p,&pixel);
3145 SetPixelIndex(image,PushColormapIndex(image,(
size_t)
3146 ClampToQuantum((
double) QuantumRange*(
double)
3147 HalfToSinglePrecision(pixel)),&range_exception),q);
3148 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
3149 GetPixelIndex(image,q),q);
3150 p+=(ptrdiff_t) quantum_info->pad;
3151 q+=(ptrdiff_t) GetPixelChannels(image);
3155 for (x=0; x < (ssize_t) number_pixels; x++)
3157 p=PushShortPixel(quantum_info->endian,p,&pixel);
3158 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
3159 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
3160 GetPixelIndex(image,q),q);
3161 p+=(ptrdiff_t) quantum_info->pad;
3162 q+=(ptrdiff_t) GetPixelChannels(image);
3168 if (quantum_info->format == FloatingPointQuantumFormat)
3173 for (x=0; x < (ssize_t) number_pixels; x++)
3175 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
3176 SetPixelIndex(image,PushColormapIndex(image,(
size_t)
3177 ClampToQuantum(pixel),&range_exception),q);
3178 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
3179 GetPixelIndex(image,q),q);
3180 p+=(ptrdiff_t) quantum_info->pad;
3181 q+=(ptrdiff_t) GetPixelChannels(image);
3190 for (x=0; x < (ssize_t) number_pixels; x++)
3192 p=PushLongPixel(quantum_info->endian,p,&pixel);
3193 SetPixelIndex(image,PushColormapIndex(image,pixel,
3194 &range_exception),q);
3195 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
3196 GetPixelIndex(image,q),q);
3197 p+=(ptrdiff_t) quantum_info->pad;
3198 q+=(ptrdiff_t) GetPixelChannels(image);
3205 if (quantum_info->format == FloatingPointQuantumFormat)
3210 for (x=0; x < (ssize_t) number_pixels; x++)
3212 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
3213 SetPixelIndex(image,PushColormapIndex(image,(
size_t)
3214 ClampToQuantum(pixel),&range_exception),q);
3215 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
3216 GetPixelIndex(image,q),q);
3217 p+=(ptrdiff_t) quantum_info->pad;
3218 q+=(ptrdiff_t) GetPixelChannels(image);
3226 if (quantum_info->format == FloatingPointQuantumFormat)
3231 for (x=0; x < (ssize_t) number_pixels; x++)
3233 p=PushDoublePixel(quantum_info,p,&pixel);
3234 SetPixelIndex(image,PushColormapIndex(image,(
size_t)
3235 ClampToQuantum(pixel),&range_exception),q);
3236 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
3237 GetPixelIndex(image,q),q);
3238 p+=(ptrdiff_t) quantum_info->pad;
3239 q+=(ptrdiff_t) GetPixelChannels(image);
3250 for (x=0; x < (ssize_t) number_pixels; x++)
3252 p=PushQuantumPixel(quantum_info,p,&pixel);
3253 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
3254 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
3255 GetPixelIndex(image,q),q);
3256 p+=(ptrdiff_t) quantum_info->pad;
3257 q+=(ptrdiff_t) GetPixelChannels(image);
3262 if (range_exception != MagickFalse)
3263 (void) ThrowMagickException(exception,GetMagickModule(),CorruptImageError,
3264 "InvalidColormapIndex",
"`%s'",image->filename);
3267static void ImportIndexAlphaQuantum(
const Image *image,
3268 QuantumInfo *quantum_info,
const MagickSizeType number_pixels,
3269 const unsigned char *magick_restrict p,Quantum *magick_restrict q,
3270 ExceptionInfo *exception)
3284 if (image->storage_class != PseudoClass)
3286 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
3287 "ColormappedImageRequired",
"`%s'",image->filename);
3290 range_exception=MagickFalse;
3291 switch (quantum_info->depth)
3298 for (x=((ssize_t) number_pixels-3); x > 0; x-=4)
3300 for (bit=0; bit < 8; bit+=2)
3302 if (quantum_info->min_is_white == MagickFalse)
3303 pixel=(
unsigned char) (((*p) & (1 << (7-bit))) == 0 ? 0x00 : 0x01);
3305 pixel=(
unsigned char) (((*p) & (1 << (7-bit))) != 0 ? 0x00 : 0x01);
3306 SetPixelGray(image,(Quantum) (pixel == 0 ? 0 : QuantumRange),q);
3307 SetPixelAlpha(image,((*p) & (1UL << (
unsigned char) (6-bit))) == 0 ?
3308 TransparentAlpha : OpaqueAlpha,q);
3309 SetPixelIndex(image,(Quantum) (pixel == 0 ? 0 : 1),q);
3310 q+=(ptrdiff_t) GetPixelChannels(image);
3313 if ((number_pixels % 4) != 0)
3314 for (bit=3; bit >= (ssize_t) (4-(number_pixels % 4)); bit-=2)
3316 if (quantum_info->min_is_white == MagickFalse)
3317 pixel=(
unsigned char) (((*p) & (1 << (7-bit))) == 0 ? 0x00 : 0x01);
3319 pixel=(
unsigned char) (((*p) & (1 << (7-bit))) != 0 ? 0x00 : 0x01);
3320 SetPixelIndex(image,(Quantum) (pixel == 0 ? 0 : 1),q);
3321 SetPixelGray(image,(Quantum) (pixel == 0 ? 0 : QuantumRange),q);
3322 SetPixelAlpha(image,((*p) & (1UL << (
unsigned char) (6-bit))) == 0 ?
3323 TransparentAlpha : OpaqueAlpha,q);
3324 q+=(ptrdiff_t) GetPixelChannels(image);
3333 range=GetQuantumRange(quantum_info->depth);
3334 for (x=0; x < (ssize_t) number_pixels; x++)
3336 pixel=(
unsigned char) ((*p >> 4) & 0xf);
3337 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
3338 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
3339 GetPixelIndex(image,q),q);
3340 pixel=(
unsigned char) ((*p) & 0xf);
3341 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
3343 q+=(ptrdiff_t) GetPixelChannels(image);
3352 for (x=0; x < (ssize_t) number_pixels; x++)
3354 p=PushCharPixel(p,&pixel);
3355 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
3356 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
3357 GetPixelIndex(image,q),q);
3358 p=PushCharPixel(p,&pixel);
3359 SetPixelAlpha(image,ScaleCharToQuantum(pixel),q);
3360 p+=(ptrdiff_t) quantum_info->pad;
3361 q+=(ptrdiff_t) GetPixelChannels(image);
3370 if (quantum_info->format == FloatingPointQuantumFormat)
3372 for (x=0; x < (ssize_t) number_pixels; x++)
3374 p=PushShortPixel(quantum_info->endian,p,&pixel);
3375 SetPixelIndex(image,PushColormapIndex(image,(
size_t)
3376 ClampToQuantum((
double) QuantumRange*(
double)
3377 HalfToSinglePrecision(pixel)),&range_exception),q);
3378 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
3379 GetPixelIndex(image,q),q);
3380 p=PushShortPixel(quantum_info->endian,p,&pixel);
3381 SetPixelAlpha(image,ClampToQuantum((
double) QuantumRange*(
double)
3382 HalfToSinglePrecision(pixel)),q);
3383 p+=(ptrdiff_t) quantum_info->pad;
3384 q+=(ptrdiff_t) GetPixelChannels(image);
3388 for (x=0; x < (ssize_t) number_pixels; x++)
3390 p=PushShortPixel(quantum_info->endian,p,&pixel);
3391 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
3392 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
3393 GetPixelIndex(image,q),q);
3394 p=PushShortPixel(quantum_info->endian,p,&pixel);
3395 SetPixelAlpha(image,ScaleShortToQuantum(pixel),q);
3396 p+=(ptrdiff_t) quantum_info->pad;
3397 q+=(ptrdiff_t) GetPixelChannels(image);
3403 if (quantum_info->format == FloatingPointQuantumFormat)
3408 for (x=0; x < (ssize_t) number_pixels; x++)
3410 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
3411 SetPixelIndex(image,PushColormapIndex(image,(
size_t)
3412 ClampToQuantum(pixel),&range_exception),q);
3413 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
3414 GetPixelIndex(image,q),q);
3415 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
3416 SetPixelAlpha(image,ClampToQuantum(pixel),q);
3417 p+=(ptrdiff_t) quantum_info->pad;
3418 q+=(ptrdiff_t) GetPixelChannels(image);
3427 for (x=0; x < (ssize_t) number_pixels; x++)
3429 p=PushLongPixel(quantum_info->endian,p,&pixel);
3430 SetPixelIndex(image,PushColormapIndex(image,pixel,
3431 &range_exception),q);
3432 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
3433 GetPixelIndex(image,q),q);
3434 p=PushLongPixel(quantum_info->endian,p,&pixel);
3435 SetPixelAlpha(image,ScaleLongToQuantum(pixel),q);
3436 p+=(ptrdiff_t) quantum_info->pad;
3437 q+=(ptrdiff_t) GetPixelChannels(image);
3444 if (quantum_info->format == FloatingPointQuantumFormat)
3449 for (x=0; x < (ssize_t) number_pixels; x++)
3451 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
3452 SetPixelIndex(image,PushColormapIndex(image,(
size_t)
3453 ClampToQuantum(pixel),&range_exception),q);
3454 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
3455 GetPixelIndex(image,q),q);
3456 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
3457 SetPixelAlpha(image,ClampToQuantum(pixel),q);
3458 p+=(ptrdiff_t) quantum_info->pad;
3459 q+=(ptrdiff_t) GetPixelChannels(image);
3467 if (quantum_info->format == FloatingPointQuantumFormat)
3472 for (x=0; x < (ssize_t) number_pixels; x++)
3474 p=PushDoublePixel(quantum_info,p,&pixel);
3475 SetPixelIndex(image,PushColormapIndex(image,(
size_t)
3476 ClampToQuantum(pixel),&range_exception),q);
3477 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
3478 GetPixelIndex(image,q),q);
3479 p=PushDoublePixel(quantum_info,p,&pixel);
3480 SetPixelAlpha(image,ClampToQuantum(pixel),q);
3481 p+=(ptrdiff_t) quantum_info->pad;
3482 q+=(ptrdiff_t) GetPixelChannels(image);
3493 range=GetQuantumRange(quantum_info->depth);
3494 for (x=0; x < (ssize_t) number_pixels; x++)
3496 p=PushQuantumPixel(quantum_info,p,&pixel);
3497 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
3498 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
3499 GetPixelIndex(image,q),q);
3500 p=PushQuantumPixel(quantum_info,p,&pixel);
3501 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
3502 p+=(ptrdiff_t) quantum_info->pad;
3503 q+=(ptrdiff_t) GetPixelChannels(image);
3508 if (range_exception != MagickFalse)
3509 (void) ThrowMagickException(exception,GetMagickModule(),CorruptImageError,
3510 "InvalidColormapIndex",
"`%s'",image->filename);
3513static void ImportMultispectralQuantum(
const Image *image,
3514 QuantumInfo *quantum_info,
const MagickSizeType number_pixels,
3515 const unsigned char *magick_restrict p,Quantum *magick_restrict q,
3516 ExceptionInfo *exception)
3525 if (image->number_meta_channels == 0)
3527 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
3528 "MultispectralImageRequired",
"`%s'",image->filename);
3531 switch (quantum_info->depth)
3538 for (x=0; x < (ssize_t) number_pixels; x++)
3540 for (i=0; i < (ssize_t) GetImageChannels(image); i++)
3542 p=PushCharPixel(p,&pixel);
3543 q[i]=ScaleCharToQuantum(pixel);
3545 p+=(ptrdiff_t) quantum_info->pad;
3546 q+=(ptrdiff_t) GetPixelChannels(image);
3555 if (quantum_info->format == FloatingPointQuantumFormat)
3557 for (x=0; x < (ssize_t) number_pixels; x++)
3559 for (i=0; i < (ssize_t) GetImageChannels(image); i++)
3561 p=PushShortPixel(quantum_info->endian,p,&pixel);
3562 q[i]=ClampToQuantum((
double) QuantumRange*(
double)HalfToSinglePrecision(pixel));
3564 p+=(ptrdiff_t) quantum_info->pad;
3565 q+=(ptrdiff_t) GetPixelChannels(image);
3569 for (x=0; x < (ssize_t) number_pixels; x++)
3571 for (i=0; i < (ssize_t) GetImageChannels(image); i++)
3573 p=PushShortPixel(quantum_info->endian,p,&pixel);
3574 q[i]=ScaleShortToQuantum(pixel);
3576 p+=(ptrdiff_t) quantum_info->pad;
3577 q+=(ptrdiff_t) GetPixelChannels(image);
3583 if (quantum_info->format == FloatingPointQuantumFormat)
3588 for (x=0; x < (ssize_t) number_pixels; x++)
3590 for (i=0; i < (ssize_t) GetImageChannels(image); i++)
3592 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
3593 q[i]=ClampToQuantum(pixel);
3595 p+=(ptrdiff_t) quantum_info->pad;
3596 q+=(ptrdiff_t) GetPixelChannels(image);
3605 for (x=0; x < (ssize_t) number_pixels; x++)
3607 for (i=0; i < (ssize_t) GetImageChannels(image); i++)
3609 p=PushLongPixel(quantum_info->endian,p,&pixel);
3610 q[i]=ScaleLongToQuantum(pixel);
3612 p+=(ptrdiff_t) quantum_info->pad;
3613 q+=(ptrdiff_t) GetPixelChannels(image);
3620 if (quantum_info->format == FloatingPointQuantumFormat)
3625 for (x=0; x < (ssize_t) number_pixels; x++)
3627 for (i=0; i < (ssize_t) GetImageChannels(image); i++)
3629 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
3630 q[i]=ClampToQuantum(pixel);
3632 p+=(ptrdiff_t) quantum_info->pad;
3633 q+=(ptrdiff_t) GetPixelChannels(image);
3641 if (quantum_info->format == FloatingPointQuantumFormat)
3646 for (x=0; x < (ssize_t) number_pixels; x++)
3648 for (i=0; i < (ssize_t) GetImageChannels(image); i++)
3650 p=PushDoublePixel(quantum_info,p,&pixel);
3651 q[i]=ClampToQuantum(pixel);
3653 p+=(ptrdiff_t) quantum_info->pad;
3654 q+=(ptrdiff_t) GetPixelChannels(image);
3665 range=GetQuantumRange(quantum_info->depth);
3666 for (x=0; x < (ssize_t) number_pixels; x++)
3668 for (i=0; i < (ssize_t) GetImageChannels(image); i++)
3670 p=PushQuantumPixel(quantum_info,p,&pixel);
3671 q[i]=ScaleAnyToQuantum(pixel,range);
3673 q+=(ptrdiff_t) GetPixelChannels(image);
3680static void ImportOpacityQuantum(
const Image *image,QuantumInfo *quantum_info,
3681 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
3682 Quantum *magick_restrict q)
3690 assert(image != (Image *) NULL);
3691 assert(image->signature == MagickCoreSignature);
3692 switch (quantum_info->depth)
3699 for (x=0; x < (ssize_t) number_pixels; x++)
3701 p=PushCharPixel(p,&pixel);
3702 SetPixelOpacity(image,ScaleCharToQuantum(pixel),q);
3703 p+=(ptrdiff_t) quantum_info->pad;
3704 q+=(ptrdiff_t) GetPixelChannels(image);
3713 if (quantum_info->format == FloatingPointQuantumFormat)
3715 for (x=0; x < (ssize_t) number_pixels; x++)
3717 p=PushShortPixel(quantum_info->endian,p,&pixel);
3718 SetPixelOpacity(image,ClampToQuantum((
double) QuantumRange*(
double)
3719 HalfToSinglePrecision(pixel)),q);
3720 p+=(ptrdiff_t) quantum_info->pad;
3721 q+=(ptrdiff_t) GetPixelChannels(image);
3725 for (x=0; x < (ssize_t) number_pixels; x++)
3727 p=PushShortPixel(quantum_info->endian,p,&pixel);
3728 SetPixelOpacity(image,ScaleShortToQuantum(pixel),q);
3729 p+=(ptrdiff_t) quantum_info->pad;
3730 q+=(ptrdiff_t) GetPixelChannels(image);
3736 if (quantum_info->format == FloatingPointQuantumFormat)
3741 for (x=0; x < (ssize_t) number_pixels; x++)
3743 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
3744 SetPixelOpacity(image,ClampToQuantum(pixel),q);
3745 p+=(ptrdiff_t) quantum_info->pad;
3746 q+=(ptrdiff_t) GetPixelChannels(image);
3755 for (x=0; x < (ssize_t) number_pixels; x++)
3757 p=PushLongPixel(quantum_info->endian,p,&pixel);
3758 SetPixelOpacity(image,ScaleLongToQuantum(pixel),q);
3759 p+=(ptrdiff_t) quantum_info->pad;
3760 q+=(ptrdiff_t) GetPixelChannels(image);
3767 if (quantum_info->format == FloatingPointQuantumFormat)
3772 for (x=0; x < (ssize_t) number_pixels; x++)
3774 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
3775 SetPixelOpacity(image,ClampToQuantum(pixel),q);
3776 p+=(ptrdiff_t) quantum_info->pad;
3777 q+=(ptrdiff_t) GetPixelChannels(image);
3785 if (quantum_info->format == FloatingPointQuantumFormat)
3790 for (x=0; x < (ssize_t) number_pixels; x++)
3792 p=PushDoublePixel(quantum_info,p,&pixel);
3793 SetPixelOpacity(image,ClampToQuantum(pixel),q);
3794 p+=(ptrdiff_t) quantum_info->pad;
3795 q+=(ptrdiff_t) GetPixelChannels(image);
3806 range=GetQuantumRange(quantum_info->depth);
3807 for (x=0; x < (ssize_t) number_pixels; x++)
3809 p=PushQuantumPixel(quantum_info,p,&pixel);
3810 SetPixelOpacity(image,ScaleAnyToQuantum(pixel,range),q);
3811 p+=(ptrdiff_t) quantum_info->pad;
3812 q+=(ptrdiff_t) GetPixelChannels(image);
3819static void ImportRedQuantum(
const Image *image,QuantumInfo *quantum_info,
3820 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
3821 Quantum *magick_restrict q)
3829 assert(image != (Image *) NULL);
3830 assert(image->signature == MagickCoreSignature);
3831 switch (quantum_info->depth)
3838 for (x=0; x < (ssize_t) number_pixels; x++)
3840 p=PushCharPixel(p,&pixel);
3841 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
3842 p+=(ptrdiff_t) quantum_info->pad;
3843 q+=(ptrdiff_t) GetPixelChannels(image);
3852 if (quantum_info->format == FloatingPointQuantumFormat)
3854 for (x=0; x < (ssize_t) number_pixels; x++)
3856 p=PushShortPixel(quantum_info->endian,p,&pixel);
3857 SetPixelRed(image,ClampToQuantum((
double) QuantumRange*(
double)
3858 HalfToSinglePrecision(pixel)),q);
3859 p+=(ptrdiff_t) quantum_info->pad;
3860 q+=(ptrdiff_t) GetPixelChannels(image);
3864 for (x=0; x < (ssize_t) number_pixels; x++)
3866 p=PushShortPixel(quantum_info->endian,p,&pixel);
3867 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
3868 p+=(ptrdiff_t) quantum_info->pad;
3869 q+=(ptrdiff_t) GetPixelChannels(image);
3875 if (quantum_info->format == FloatingPointQuantumFormat)
3880 for (x=0; x < (ssize_t) number_pixels; x++)
3882 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
3883 SetPixelRed(image,ClampToQuantum(pixel),q);
3884 p+=(ptrdiff_t) quantum_info->pad;
3885 q+=(ptrdiff_t) GetPixelChannels(image);
3894 for (x=0; x < (ssize_t) number_pixels; x++)
3896 p=PushLongPixel(quantum_info->endian,p,&pixel);
3897 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
3898 p+=(ptrdiff_t) quantum_info->pad;
3899 q+=(ptrdiff_t) GetPixelChannels(image);
3906 if (quantum_info->format == FloatingPointQuantumFormat)
3911 for (x=0; x < (ssize_t) number_pixels; x++)
3913 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
3914 SetPixelRed(image,ClampToQuantum(pixel),q);
3915 p+=(ptrdiff_t) quantum_info->pad;
3916 q+=(ptrdiff_t) GetPixelChannels(image);
3924 if (quantum_info->format == FloatingPointQuantumFormat)
3929 for (x=0; x < (ssize_t) number_pixels; x++)
3931 p=PushDoublePixel(quantum_info,p,&pixel);
3932 SetPixelRed(image,ClampToQuantum(pixel),q);
3933 p+=(ptrdiff_t) quantum_info->pad;
3934 q+=(ptrdiff_t) GetPixelChannels(image);
3945 range=GetQuantumRange(quantum_info->depth);
3946 for (x=0; x < (ssize_t) number_pixels; x++)
3948 p=PushQuantumPixel(quantum_info,p,&pixel);
3949 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
3950 p+=(ptrdiff_t) quantum_info->pad;
3951 q+=(ptrdiff_t) GetPixelChannels(image);
3958static void ImportRGBQuantum(
const Image *image,QuantumInfo *quantum_info,
3959 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
3960 Quantum *magick_restrict q)
3971 assert(image != (Image *) NULL);
3972 assert(image->signature == MagickCoreSignature);
3973 switch (quantum_info->depth)
3980 for (x=0; x < (ssize_t) number_pixels; x++)
3982 p=PushCharPixel(p,&pixel);
3983 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
3984 p=PushCharPixel(p,&pixel);
3985 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
3986 p=PushCharPixel(p,&pixel);
3987 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
3988 SetPixelAlpha(image,OpaqueAlpha,q);
3989 p+=(ptrdiff_t) quantum_info->pad;
3990 q+=(ptrdiff_t) GetPixelChannels(image);
3999 range=GetQuantumRange(quantum_info->depth);
4000 if (quantum_info->pack == MagickFalse)
4002 for (x=0; x < (ssize_t) number_pixels; x++)
4004 p=PushLongPixel(quantum_info->endian,p,&pixel);
4005 SetPixelRed(image,ScaleAnyToQuantum((pixel >> 22) & 0x3ff,range),q);
4006 SetPixelGreen(image,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,range),
4008 SetPixelBlue(image,ScaleAnyToQuantum((pixel >> 2) & 0x3ff,range),q);
4009 p+=(ptrdiff_t) quantum_info->pad;
4010 q+=(ptrdiff_t) GetPixelChannels(image);
4014 if (quantum_info->quantum == 32U)
4016 for (x=0; x < (ssize_t) number_pixels; x++)
4018 p=PushQuantumLongPixel(quantum_info,p,&pixel);
4019 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
4020 p=PushQuantumLongPixel(quantum_info,p,&pixel);
4021 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
4022 p=PushQuantumLongPixel(quantum_info,p,&pixel);
4023 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
4024 q+=(ptrdiff_t) GetPixelChannels(image);
4028 for (x=0; x < (ssize_t) number_pixels; x++)
4030 p=PushQuantumPixel(quantum_info,p,&pixel);
4031 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
4032 p=PushQuantumPixel(quantum_info,p,&pixel);
4033 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
4034 p=PushQuantumPixel(quantum_info,p,&pixel);
4035 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
4036 q+=(ptrdiff_t) GetPixelChannels(image);
4042 range=GetQuantumRange(quantum_info->depth);
4043 if (quantum_info->pack == MagickFalse)
4048 for (x=0; x < (ssize_t) (3*number_pixels-1); x+=2)
4050 p=PushShortPixel(quantum_info->endian,p,&pixel);
4056 SetPixelRed(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
4062 SetPixelGreen(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
4068 SetPixelBlue(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
4070 q+=(ptrdiff_t) GetPixelChannels(image);
4074 p=PushShortPixel(quantum_info->endian,p,&pixel);
4080 SetPixelRed(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
4086 SetPixelGreen(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
4092 SetPixelBlue(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
4094 q+=(ptrdiff_t) GetPixelChannels(image);
4098 p+=(ptrdiff_t) quantum_info->pad;
4100 for (bit=0; bit < (ssize_t) (3*number_pixels % 2); bit++)
4102 p=PushShortPixel(quantum_info->endian,p,&pixel);
4103 switch ((x+bit) % 3)
4108 SetPixelRed(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
4114 SetPixelGreen(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
4120 SetPixelBlue(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
4122 q+=(ptrdiff_t) GetPixelChannels(image);
4126 p+=(ptrdiff_t) quantum_info->pad;
4137 if (quantum_info->quantum == 32U)
4139 for (x=0; x < (ssize_t) number_pixels; x++)
4141 p=PushQuantumLongPixel(quantum_info,p,&pixel);
4142 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
4143 p=PushQuantumLongPixel(quantum_info,p,&pixel);
4144 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
4145 p=PushQuantumLongPixel(quantum_info,p,&pixel);
4146 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
4147 q+=(ptrdiff_t) GetPixelChannels(image);
4151 for (x=0; x < (ssize_t) number_pixels; x++)
4153 p=PushQuantumPixel(quantum_info,p,&pixel);
4154 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
4155 p=PushQuantumPixel(quantum_info,p,&pixel);
4156 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
4157 p=PushQuantumPixel(quantum_info,p,&pixel);
4158 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
4159 q+=(ptrdiff_t) GetPixelChannels(image);
4169 if (quantum_info->format == FloatingPointQuantumFormat)
4171 for (x=0; x < (ssize_t) number_pixels; x++)
4173 p=PushShortPixel(quantum_info->endian,p,&pixel);
4174 SetPixelRed(image,ClampToQuantum((
double) QuantumRange*(
double)
4175 HalfToSinglePrecision(pixel)),q);
4176 p=PushShortPixel(quantum_info->endian,p,&pixel);
4177 SetPixelGreen(image,ClampToQuantum((
double) QuantumRange*(
double)
4178 HalfToSinglePrecision(pixel)),q);
4179 p=PushShortPixel(quantum_info->endian,p,&pixel);
4180 SetPixelBlue(image,ClampToQuantum((
double) QuantumRange*(
double)
4181 HalfToSinglePrecision(pixel)),q);
4182 p+=(ptrdiff_t) quantum_info->pad;
4183 q+=(ptrdiff_t) GetPixelChannels(image);
4187 for (x=0; x < (ssize_t) number_pixels; x++)
4189 p=PushShortPixel(quantum_info->endian,p,&pixel);
4190 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
4191 p=PushShortPixel(quantum_info->endian,p,&pixel);
4192 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
4193 p=PushShortPixel(quantum_info->endian,p,&pixel);
4194 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
4195 p+=(ptrdiff_t) quantum_info->pad;
4196 q+=(ptrdiff_t) GetPixelChannels(image);
4202 if (quantum_info->format == FloatingPointQuantumFormat)
4207 for (x=0; x < (ssize_t) number_pixels; x++)
4209 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
4210 SetPixelRed(image,ClampToQuantum(pixel),q);
4211 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
4212 SetPixelGreen(image,ClampToQuantum(pixel),q);
4213 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
4214 SetPixelBlue(image,ClampToQuantum(pixel),q);
4215 p+=(ptrdiff_t) quantum_info->pad;
4216 q+=(ptrdiff_t) GetPixelChannels(image);
4225 for (x=0; x < (ssize_t) number_pixels; x++)
4227 p=PushLongPixel(quantum_info->endian,p,&pixel);
4228 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
4229 p=PushLongPixel(quantum_info->endian,p,&pixel);
4230 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
4231 p=PushLongPixel(quantum_info->endian,p,&pixel);
4232 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
4233 p+=(ptrdiff_t) quantum_info->pad;
4234 q+=(ptrdiff_t) GetPixelChannels(image);
4241 if (quantum_info->format == FloatingPointQuantumFormat)
4246 for (x=0; x < (ssize_t) number_pixels; x++)
4248 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
4249 SetPixelRed(image,ClampToQuantum(pixel),q);
4250 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
4251 SetPixelGreen(image,ClampToQuantum(pixel),q);
4252 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
4253 SetPixelBlue(image,ClampToQuantum(pixel),q);
4254 p+=(ptrdiff_t) quantum_info->pad;
4255 q+=(ptrdiff_t) GetPixelChannels(image);
4263 if (quantum_info->format == FloatingPointQuantumFormat)
4268 for (x=0; x < (ssize_t) number_pixels; x++)
4270 p=PushDoublePixel(quantum_info,p,&pixel);
4271 SetPixelRed(image,ClampToQuantum(pixel),q);
4272 p=PushDoublePixel(quantum_info,p,&pixel);
4273 SetPixelGreen(image,ClampToQuantum(pixel),q);
4274 p=PushDoublePixel(quantum_info,p,&pixel);
4275 SetPixelBlue(image,ClampToQuantum(pixel),q);
4276 p+=(ptrdiff_t) quantum_info->pad;
4277 q+=(ptrdiff_t) GetPixelChannels(image);
4288 range=GetQuantumRange(quantum_info->depth);
4289 for (x=0; x < (ssize_t) number_pixels; x++)
4291 p=PushQuantumPixel(quantum_info,p,&pixel);
4292 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
4293 p=PushQuantumPixel(quantum_info,p,&pixel);
4294 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
4295 p=PushQuantumPixel(quantum_info,p,&pixel);
4296 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
4297 q+=(ptrdiff_t) GetPixelChannels(image);
4304static void ImportRGBAQuantum(
const Image *image,QuantumInfo *quantum_info,
4305 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
4306 Quantum *magick_restrict q)
4314 assert(image != (Image *) NULL);
4315 assert(image->signature == MagickCoreSignature);
4316 switch (quantum_info->depth)
4323 for (x=0; x < (ssize_t) number_pixels; x++)
4325 p=PushCharPixel(p,&pixel);
4326 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
4327 p=PushCharPixel(p,&pixel);
4328 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
4329 p=PushCharPixel(p,&pixel);
4330 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
4331 p=PushCharPixel(p,&pixel);
4332 SetPixelAlpha(image,ScaleCharToQuantum(pixel),q);
4333 p+=(ptrdiff_t) quantum_info->pad;
4334 q+=(ptrdiff_t) GetPixelChannels(image);
4344 if (quantum_info->pack == MagickFalse)
4357 for (x=0; x < (ssize_t) number_pixels; x++)
4359 for (i=0; i < 4; i++)
4365 p=PushLongPixel(quantum_info->endian,p,&pixel);
4366 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
4367 (((pixel >> 22) & 0x3ff) << 6)));
4372 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
4373 (((pixel >> 12) & 0x3ff) << 6)));
4378 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
4379 (((pixel >> 2) & 0x3ff) << 6)));
4385 case 0: SetPixelRed(image,(Quantum) quantum,q);
break;
4386 case 1: SetPixelGreen(image,(Quantum) quantum,q);
break;
4387 case 2: SetPixelBlue(image,(Quantum) quantum,q);
break;
4388 case 3: SetPixelAlpha(image,(Quantum) quantum,q);
break;
4392 p+=(ptrdiff_t) quantum_info->pad;
4393 q+=(ptrdiff_t) GetPixelChannels(image);
4397 for (x=0; x < (ssize_t) number_pixels; x++)
4399 p=PushQuantumPixel(quantum_info,p,&pixel);
4400 SetPixelRed(image,ScaleShortToQuantum((
unsigned short) (pixel << 6)),q);
4401 p=PushQuantumPixel(quantum_info,p,&pixel);
4402 SetPixelGreen(image,ScaleShortToQuantum((
unsigned short) (pixel << 6)),
4404 p=PushQuantumPixel(quantum_info,p,&pixel);
4405 SetPixelBlue(image,ScaleShortToQuantum((
unsigned short) (pixel << 6)),
4407 p=PushQuantumPixel(quantum_info,p,&pixel);
4408 SetPixelAlpha(image,ScaleShortToQuantum((
unsigned short) (pixel << 6)),
4410 q+=(ptrdiff_t) GetPixelChannels(image);
4419 if (quantum_info->format == FloatingPointQuantumFormat)
4421 for (x=0; x < (ssize_t) number_pixels; x++)
4423 p=PushShortPixel(quantum_info->endian,p,&pixel);
4424 SetPixelRed(image,ClampToQuantum((
double) QuantumRange*(
double)
4425 HalfToSinglePrecision(pixel)),q);
4426 p=PushShortPixel(quantum_info->endian,p,&pixel);
4427 SetPixelGreen(image,ClampToQuantum((
double) QuantumRange*(
double)
4428 HalfToSinglePrecision(pixel)),q);
4429 p=PushShortPixel(quantum_info->endian,p,&pixel);
4430 SetPixelBlue(image,ClampToQuantum((
double) QuantumRange*(
double)
4431 HalfToSinglePrecision(pixel)),q);
4432 p=PushShortPixel(quantum_info->endian,p,&pixel);
4433 SetPixelAlpha(image,ClampToQuantum((
double) QuantumRange*(
double)
4434 HalfToSinglePrecision(pixel)),q);
4435 p+=(ptrdiff_t) quantum_info->pad;
4436 q+=(ptrdiff_t) GetPixelChannels(image);
4440 for (x=0; x < (ssize_t) number_pixels; x++)
4442 p=PushShortPixel(quantum_info->endian,p,&pixel);
4443 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
4444 p=PushShortPixel(quantum_info->endian,p,&pixel);
4445 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
4446 p=PushShortPixel(quantum_info->endian,p,&pixel);
4447 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
4448 p=PushShortPixel(quantum_info->endian,p,&pixel);
4449 SetPixelAlpha(image,ScaleShortToQuantum(pixel),q);
4450 p+=(ptrdiff_t) quantum_info->pad;
4451 q+=(ptrdiff_t) GetPixelChannels(image);
4457 if (quantum_info->format == FloatingPointQuantumFormat)
4462 for (x=0; x < (ssize_t) number_pixels; x++)
4464 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
4465 SetPixelRed(image,ClampToQuantum(pixel),q);
4466 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
4467 SetPixelGreen(image,ClampToQuantum(pixel),q);
4468 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
4469 SetPixelBlue(image,ClampToQuantum(pixel),q);
4470 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
4471 SetPixelAlpha(image,ClampToQuantum(pixel),q);
4472 p+=(ptrdiff_t) quantum_info->pad;
4473 q+=(ptrdiff_t) GetPixelChannels(image);
4482 for (x=0; x < (ssize_t) number_pixels; x++)
4484 p=PushLongPixel(quantum_info->endian,p,&pixel);
4485 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
4486 p=PushLongPixel(quantum_info->endian,p,&pixel);
4487 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
4488 p=PushLongPixel(quantum_info->endian,p,&pixel);
4489 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
4490 p=PushLongPixel(quantum_info->endian,p,&pixel);
4491 SetPixelAlpha(image,ScaleLongToQuantum(pixel),q);
4492 p+=(ptrdiff_t) quantum_info->pad;
4493 q+=(ptrdiff_t) GetPixelChannels(image);
4500 if (quantum_info->format == FloatingPointQuantumFormat)
4505 for (x=0; x < (ssize_t) number_pixels; x++)
4507 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
4508 SetPixelRed(image,ClampToQuantum(pixel),q);
4509 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
4510 SetPixelGreen(image,ClampToQuantum(pixel),q);
4511 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
4512 SetPixelBlue(image,ClampToQuantum(pixel),q);
4513 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
4514 SetPixelAlpha(image,ClampToQuantum(pixel),q);
4515 p+=(ptrdiff_t) quantum_info->pad;
4516 q+=(ptrdiff_t) GetPixelChannels(image);
4524 if (quantum_info->format == FloatingPointQuantumFormat)
4529 for (x=0; x < (ssize_t) number_pixels; x++)
4531 p=PushDoublePixel(quantum_info,p,&pixel);
4532 SetPixelRed(image,ClampToQuantum(pixel),q);
4533 p=PushDoublePixel(quantum_info,p,&pixel);
4534 SetPixelGreen(image,ClampToQuantum(pixel),q);
4535 p=PushDoublePixel(quantum_info,p,&pixel);
4536 SetPixelBlue(image,ClampToQuantum(pixel),q);
4537 p=PushDoublePixel(quantum_info,p,&pixel);
4538 SetPixelAlpha(image,ClampToQuantum(pixel),q);
4539 p+=(ptrdiff_t) quantum_info->pad;
4540 q+=(ptrdiff_t) GetPixelChannels(image);
4551 range=GetQuantumRange(quantum_info->depth);
4552 for (x=0; x < (ssize_t) number_pixels; x++)
4554 p=PushQuantumPixel(quantum_info,p,&pixel);
4555 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
4556 p=PushQuantumPixel(quantum_info,p,&pixel);
4557 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
4558 p=PushQuantumPixel(quantum_info,p,&pixel);
4559 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
4560 p=PushQuantumPixel(quantum_info,p,&pixel);
4561 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
4562 q+=(ptrdiff_t) GetPixelChannels(image);
4569static void ImportRGBOQuantum(
const Image *image,QuantumInfo *quantum_info,
4570 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
4571 Quantum *magick_restrict q)
4579 assert(image != (Image *) NULL);
4580 assert(image->signature == MagickCoreSignature);
4581 switch (quantum_info->depth)
4588 for (x=0; x < (ssize_t) number_pixels; x++)
4590 p=PushCharPixel(p,&pixel);
4591 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
4592 p=PushCharPixel(p,&pixel);
4593 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
4594 p=PushCharPixel(p,&pixel);
4595 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
4596 p=PushCharPixel(p,&pixel);
4597 SetPixelOpacity(image,ScaleCharToQuantum(pixel),q);
4598 p+=(ptrdiff_t) quantum_info->pad;
4599 q+=(ptrdiff_t) GetPixelChannels(image);
4609 if (quantum_info->pack == MagickFalse)
4622 for (x=0; x < (ssize_t) number_pixels; x++)
4624 for (i=0; i < 4; i++)
4630 p=PushLongPixel(quantum_info->endian,p,&pixel);
4631 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
4632 (((pixel >> 22) & 0x3ff) << 6)));
4637 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
4638 (((pixel >> 12) & 0x3ff) << 6)));
4643 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
4644 (((pixel >> 2) & 0x3ff) << 6)));
4650 case 0: SetPixelRed(image,(Quantum) quantum,q);
break;
4651 case 1: SetPixelGreen(image,(Quantum) quantum,q);
break;
4652 case 2: SetPixelBlue(image,(Quantum) quantum,q);
break;
4653 case 3: SetPixelOpacity(image,(Quantum) quantum,q);
break;
4657 p+=(ptrdiff_t) quantum_info->pad;
4658 q+=(ptrdiff_t) GetPixelChannels(image);
4662 for (x=0; x < (ssize_t) number_pixels; x++)
4664 p=PushQuantumPixel(quantum_info,p,&pixel);
4665 SetPixelRed(image,ScaleShortToQuantum((
unsigned short) (pixel << 6)),q);
4666 p=PushQuantumPixel(quantum_info,p,&pixel);
4667 SetPixelGreen(image,ScaleShortToQuantum((
unsigned short) (pixel << 6)),
4669 p=PushQuantumPixel(quantum_info,p,&pixel);
4670 SetPixelBlue(image,ScaleShortToQuantum((
unsigned short) (pixel << 6)),
4672 p=PushQuantumPixel(quantum_info,p,&pixel);
4673 SetPixelOpacity(image,ScaleShortToQuantum((
unsigned short) (pixel << 6)),
4675 q+=(ptrdiff_t) GetPixelChannels(image);
4684 if (quantum_info->format == FloatingPointQuantumFormat)
4686 for (x=0; x < (ssize_t) number_pixels; x++)
4688 p=PushShortPixel(quantum_info->endian,p,&pixel);
4689 SetPixelRed(image,ClampToQuantum((
double) QuantumRange*(
double)
4690 HalfToSinglePrecision(pixel)),q);
4691 p=PushShortPixel(quantum_info->endian,p,&pixel);
4692 SetPixelGreen(image,ClampToQuantum((
double) QuantumRange*(
double)
4693 HalfToSinglePrecision(pixel)),q);
4694 p=PushShortPixel(quantum_info->endian,p,&pixel);
4695 SetPixelBlue(image,ClampToQuantum((
double) QuantumRange*(
double)
4696 HalfToSinglePrecision(pixel)),q);
4697 p=PushShortPixel(quantum_info->endian,p,&pixel);
4698 SetPixelOpacity(image,ClampToQuantum((
double) QuantumRange*(
double)
4699 HalfToSinglePrecision(pixel)),q);
4700 p+=(ptrdiff_t) quantum_info->pad;
4701 q+=(ptrdiff_t) GetPixelChannels(image);
4705 for (x=0; x < (ssize_t) number_pixels; x++)
4707 p=PushShortPixel(quantum_info->endian,p,&pixel);
4708 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
4709 p=PushShortPixel(quantum_info->endian,p,&pixel);
4710 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
4711 p=PushShortPixel(quantum_info->endian,p,&pixel);
4712 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
4713 p=PushShortPixel(quantum_info->endian,p,&pixel);
4714 SetPixelOpacity(image,ScaleShortToQuantum(pixel),q);
4715 p+=(ptrdiff_t) quantum_info->pad;
4716 q+=(ptrdiff_t) GetPixelChannels(image);
4722 if (quantum_info->format == FloatingPointQuantumFormat)
4727 for (x=0; x < (ssize_t) number_pixels; x++)
4729 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
4730 SetPixelRed(image,ClampToQuantum(pixel),q);
4731 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
4732 SetPixelGreen(image,ClampToQuantum(pixel),q);
4733 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
4734 SetPixelBlue(image,ClampToQuantum(pixel),q);
4735 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
4736 SetPixelOpacity(image,ClampToQuantum(pixel),q);
4737 p+=(ptrdiff_t) quantum_info->pad;
4738 q+=(ptrdiff_t) GetPixelChannels(image);
4747 for (x=0; x < (ssize_t) number_pixels; x++)
4749 p=PushLongPixel(quantum_info->endian,p,&pixel);
4750 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
4751 p=PushLongPixel(quantum_info->endian,p,&pixel);
4752 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
4753 p=PushLongPixel(quantum_info->endian,p,&pixel);
4754 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
4755 p=PushLongPixel(quantum_info->endian,p,&pixel);
4756 SetPixelOpacity(image,ScaleLongToQuantum(pixel),q);
4757 p+=(ptrdiff_t) quantum_info->pad;
4758 q+=(ptrdiff_t) GetPixelChannels(image);
4765 if (quantum_info->format == FloatingPointQuantumFormat)
4770 for (x=0; x < (ssize_t) number_pixels; x++)
4772 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
4773 SetPixelRed(image,ClampToQuantum(pixel),q);
4774 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
4775 SetPixelGreen(image,ClampToQuantum(pixel),q);
4776 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
4777 SetPixelBlue(image,ClampToQuantum(pixel),q);
4778 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
4779 SetPixelOpacity(image,ClampToQuantum(pixel),q);
4780 p+=(ptrdiff_t) quantum_info->pad;
4781 q+=(ptrdiff_t) GetPixelChannels(image);
4789 if (quantum_info->format == FloatingPointQuantumFormat)
4794 for (x=0; x < (ssize_t) number_pixels; x++)
4796 p=PushDoublePixel(quantum_info,p,&pixel);
4797 SetPixelRed(image,ClampToQuantum(pixel),q);
4798 p=PushDoublePixel(quantum_info,p,&pixel);
4799 SetPixelGreen(image,ClampToQuantum(pixel),q);
4800 p=PushDoublePixel(quantum_info,p,&pixel);
4801 SetPixelBlue(image,ClampToQuantum(pixel),q);
4802 p=PushDoublePixel(quantum_info,p,&pixel);
4803 SetPixelOpacity(image,ClampToQuantum(pixel),q);
4804 p+=(ptrdiff_t) quantum_info->pad;
4805 q+=(ptrdiff_t) GetPixelChannels(image);
4816 range=GetQuantumRange(quantum_info->depth);
4817 for (x=0; x < (ssize_t) number_pixels; x++)
4819 p=PushQuantumPixel(quantum_info,p,&pixel);
4820 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
4821 p=PushQuantumPixel(quantum_info,p,&pixel);
4822 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
4823 p=PushQuantumPixel(quantum_info,p,&pixel);
4824 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
4825 p=PushQuantumPixel(quantum_info,p,&pixel);
4826 SetPixelOpacity(image,ScaleAnyToQuantum(pixel,range),q);
4827 q+=(ptrdiff_t) GetPixelChannels(image);
4834MagickExport
size_t ImportQuantumPixels(
const Image *image,
4835 CacheView *image_view,QuantumInfo *quantum_info,
4836 const QuantumType quantum_type,
const unsigned char *magick_restrict pixels,
4837 ExceptionInfo *exception)
4854 assert(image != (Image *) NULL);
4855 assert(image->signature == MagickCoreSignature);
4856 assert(quantum_info != (QuantumInfo *) NULL);
4857 assert(quantum_info->signature == MagickCoreSignature);
4858 if (IsEventLogging() != MagickFalse)
4859 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",image->filename);
4860 if (pixels == (
const unsigned char *) NULL)
4861 pixels=(
const unsigned char *) GetQuantumPixels(quantum_info);
4864 if (image_view == (CacheView *) NULL)
4866 number_pixels=GetImageExtent(image);
4867 q=GetAuthenticPixelQueue(image);
4871 number_pixels=GetCacheViewExtent(image_view);
4872 q=GetCacheViewAuthenticPixelQueue(image_view);
4874 ResetQuantumState(quantum_info);
4875 extent=GetQuantumExtent(image,quantum_info,quantum_type);
4876 switch (quantum_type)
4880 ImportAlphaQuantum(image,quantum_info,number_pixels,p,q);
4885 ImportBGRQuantum(image,quantum_info,number_pixels,p,q);
4890 ImportBGRAQuantum(image,quantum_info,number_pixels,p,q);
4895 ImportBGROQuantum(image,quantum_info,number_pixels,p,q);
4900 ImportBlackQuantum(image,quantum_info,number_pixels,p,q,exception);
4906 ImportBlueQuantum(image,quantum_info,number_pixels,p,q);
4911 ImportCMYKQuantum(image,quantum_info,number_pixels,p,q,exception);
4916 ImportCMYKAQuantum(image,quantum_info,number_pixels,p,q,exception);
4919 case MultispectralQuantum:
4921 ImportMultispectralQuantum(image,quantum_info,number_pixels,p,q,exception);
4926 ImportCMYKOQuantum(image,quantum_info,number_pixels,p,q,exception);
4931 ImportCbYCrYQuantum(image,quantum_info,number_pixels,p,q);
4936 ImportGrayQuantum(image,quantum_info,number_pixels,p,q);
4939 case GrayAlphaQuantum:
4941 ImportGrayAlphaQuantum(image,quantum_info,number_pixels,p,q);
4945 case MagentaQuantum:
4947 ImportGreenQuantum(image,quantum_info,number_pixels,p,q);
4952 ImportIndexQuantum(image,quantum_info,number_pixels,p,q,exception);
4955 case IndexAlphaQuantum:
4957 ImportIndexAlphaQuantum(image,quantum_info,number_pixels,p,q,exception);
4960 case OpacityQuantum:
4962 ImportOpacityQuantum(image,quantum_info,number_pixels,p,q);
4968 ImportRedQuantum(image,quantum_info,number_pixels,p,q);
4974 ImportRGBQuantum(image,quantum_info,number_pixels,p,q);
4980 ImportRGBAQuantum(image,quantum_info,number_pixels,p,q);
4985 ImportRGBOQuantum(image,quantum_info,number_pixels,p,q);
4991 if ((quantum_type == CbYCrQuantum) || (quantum_type == CbYCrAQuantum))
4996 q=GetAuthenticPixelQueue(image);
4997 if (image_view != (CacheView *) NULL)
4998 q=GetCacheViewAuthenticPixelQueue(image_view);
4999 for (x=0; x < (ssize_t) number_pixels; x++)
5001 quantum=GetPixelRed(image,q);
5002 SetPixelRed(image,GetPixelGreen(image,q),q);
5003 SetPixelGreen(image,quantum,q);
5004 q+=(ptrdiff_t) GetPixelChannels(image);
5007 if (quantum_info->alpha_type == AssociatedQuantumAlpha)
5016 q=GetAuthenticPixelQueue(image);
5017 if (image_view != (CacheView *) NULL)
5018 q=GetCacheViewAuthenticPixelQueue(image_view);
5019 for (x=0; x < (ssize_t) number_pixels; x++)
5024 Sa=QuantumScale*(double) GetPixelAlpha(image,q);
5025 gamma=MagickSafeReciprocal(Sa);
5026 for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
5028 PixelChannel channel = GetPixelChannelChannel(image,i);
5029 PixelTrait traits = GetPixelChannelTraits(image,channel);
5030 if ((channel == AlphaPixelChannel) ||
5031 ((traits & UpdatePixelTrait) == 0))
5033 q[i]=ClampToQuantum(gamma*(
double) q[i]);
5035 q+=(ptrdiff_t) GetPixelChannels(image);