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 ImportPixelChannel(
const Image *image,QuantumInfo *quantum_info,
302 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
303 Quantum *magick_restrict q,PixelChannel channel)
311 q+=(ptrdiff_t) image->channel_map[channel].offset;
312 switch (quantum_info->depth)
319 for (x=0; x < (ssize_t) number_pixels; x++)
321 p=PushCharPixel(p,&pixel);
322 *q=ScaleCharToQuantum(pixel);
323 p+=(ptrdiff_t) quantum_info->pad;
324 q+=(ptrdiff_t) GetPixelChannels(image);
333 if (quantum_info->format == FloatingPointQuantumFormat)
335 for (x=0; x < (ssize_t) number_pixels; x++)
337 p=PushShortPixel(quantum_info->endian,p,&pixel);
338 *q=ClampToQuantum((
double) QuantumRange*(
double)
339 HalfToSinglePrecision(pixel));
340 p+=(ptrdiff_t) quantum_info->pad;
341 q+=(ptrdiff_t) GetPixelChannels(image);
345 for (x=0; x < (ssize_t) number_pixels; x++)
347 p=PushShortPixel(quantum_info->endian,p,&pixel);
348 *q=ScaleShortToQuantum(pixel);
349 p+=(ptrdiff_t) quantum_info->pad;
350 q+=(ptrdiff_t) GetPixelChannels(image);
356 if (quantum_info->format == FloatingPointQuantumFormat)
361 for (x=0; x < (ssize_t) number_pixels; x++)
363 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
364 *q=ClampToQuantum(pixel);
365 p+=(ptrdiff_t) quantum_info->pad;
366 q+=(ptrdiff_t) GetPixelChannels(image);
375 for (x=0; x < (ssize_t) number_pixels; x++)
377 p=PushLongPixel(quantum_info->endian,p,&pixel);
378 *q=ScaleLongToQuantum(pixel);
379 p+=(ptrdiff_t) quantum_info->pad;
380 q+=(ptrdiff_t) GetPixelChannels(image);
387 if (quantum_info->format == FloatingPointQuantumFormat)
392 for (x=0; x < (ssize_t) number_pixels; x++)
394 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
395 *q=ClampToQuantum(pixel);
396 p+=(ptrdiff_t) quantum_info->pad;
397 q+=(ptrdiff_t) GetPixelChannels(image);
405 if (quantum_info->format == FloatingPointQuantumFormat)
410 for (x=0; x < (ssize_t) number_pixels; x++)
412 p=PushDoublePixel(quantum_info,p,&pixel);
413 *q=ClampToQuantum(pixel);
414 p+=(ptrdiff_t) quantum_info->pad;
415 q+=(ptrdiff_t) GetPixelChannels(image);
426 range=GetQuantumRange(quantum_info->depth);
427 for (x=0; x < (ssize_t) number_pixels; x++)
429 p=PushQuantumPixel(quantum_info,p,&pixel);
430 *q=ScaleAnyToQuantum(pixel,range);
431 p+=(ptrdiff_t) quantum_info->pad;
432 q+=(ptrdiff_t) GetPixelChannels(image);
439static void ImportAlphaQuantum(
const Image *image,QuantumInfo *quantum_info,
440 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
441 Quantum *magick_restrict q,ExceptionInfo *exception)
443 if (image->alpha_trait == UndefinedPixelTrait)
445 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
446 "ImageDoesNotHaveAnAlphaChannel",
"`%s'",image->filename);
449 ImportPixelChannel(image,quantum_info,number_pixels,p,q,AlphaPixelChannel);
452static void ImportBGRQuantum(
const Image *image,QuantumInfo *quantum_info,
453 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
454 Quantum *magick_restrict q)
465 assert(image != (Image *) NULL);
466 assert(image->signature == MagickCoreSignature);
467 switch (quantum_info->depth)
474 for (x=0; x < (ssize_t) number_pixels; x++)
476 p=PushCharPixel(p,&pixel);
477 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
478 p=PushCharPixel(p,&pixel);
479 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
480 p=PushCharPixel(p,&pixel);
481 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
482 SetPixelAlpha(image,OpaqueAlpha,q);
483 p+=(ptrdiff_t) quantum_info->pad;
484 q+=(ptrdiff_t) GetPixelChannels(image);
493 range=GetQuantumRange(quantum_info->depth);
494 if (quantum_info->pack == MagickFalse)
496 for (x=0; x < (ssize_t) number_pixels; x++)
498 p=PushLongPixel(quantum_info->endian,p,&pixel);
499 SetPixelRed(image,ScaleAnyToQuantum((pixel >> 22) & 0x3ff,range),q);
500 SetPixelGreen(image,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,range),
502 SetPixelBlue(image,ScaleAnyToQuantum((pixel >> 2) & 0x3ff,range),q);
503 p+=(ptrdiff_t) quantum_info->pad;
504 q+=(ptrdiff_t) GetPixelChannels(image);
508 if (quantum_info->quantum == 32U)
510 for (x=0; x < (ssize_t) number_pixels; x++)
512 p=PushQuantumLongPixel(quantum_info,p,&pixel);
513 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
514 p=PushQuantumLongPixel(quantum_info,p,&pixel);
515 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
516 p=PushQuantumLongPixel(quantum_info,p,&pixel);
517 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
518 q+=(ptrdiff_t) GetPixelChannels(image);
522 for (x=0; x < (ssize_t) number_pixels; x++)
524 p=PushQuantumPixel(quantum_info,p,&pixel);
525 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
526 p=PushQuantumPixel(quantum_info,p,&pixel);
527 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
528 p=PushQuantumPixel(quantum_info,p,&pixel);
529 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
530 q+=(ptrdiff_t) GetPixelChannels(image);
536 range=GetQuantumRange(quantum_info->depth);
537 if (quantum_info->pack == MagickFalse)
542 for (x=0; x < (ssize_t) (3*number_pixels-1); x+=2)
544 p=PushShortPixel(quantum_info->endian,p,&pixel);
550 SetPixelRed(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
556 SetPixelGreen(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
562 SetPixelBlue(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
564 q+=(ptrdiff_t) GetPixelChannels(image);
568 p=PushShortPixel(quantum_info->endian,p,&pixel);
574 SetPixelRed(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
580 SetPixelGreen(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
586 SetPixelBlue(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
588 q+=(ptrdiff_t) GetPixelChannels(image);
592 p+=(ptrdiff_t) quantum_info->pad;
594 for (bit=0; bit < (ssize_t) (3*number_pixels % 2); bit++)
596 p=PushShortPixel(quantum_info->endian,p,&pixel);
602 SetPixelRed(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
608 SetPixelGreen(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
614 SetPixelBlue(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
616 q+=(ptrdiff_t) GetPixelChannels(image);
620 p+=(ptrdiff_t) quantum_info->pad;
631 if (quantum_info->quantum == 32U)
633 for (x=0; x < (ssize_t) number_pixels; x++)
635 p=PushQuantumLongPixel(quantum_info,p,&pixel);
636 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
637 p=PushQuantumLongPixel(quantum_info,p,&pixel);
638 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
639 p=PushQuantumLongPixel(quantum_info,p,&pixel);
640 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
641 q+=(ptrdiff_t) GetPixelChannels(image);
645 for (x=0; x < (ssize_t) number_pixels; x++)
647 p=PushQuantumPixel(quantum_info,p,&pixel);
648 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
649 p=PushQuantumPixel(quantum_info,p,&pixel);
650 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
651 p=PushQuantumPixel(quantum_info,p,&pixel);
652 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
653 q+=(ptrdiff_t) GetPixelChannels(image);
663 if (quantum_info->format == FloatingPointQuantumFormat)
665 for (x=0; x < (ssize_t) number_pixels; x++)
667 p=PushShortPixel(quantum_info->endian,p,&pixel);
668 SetPixelRed(image,ClampToQuantum((
double) QuantumRange*(
double)
669 HalfToSinglePrecision(pixel)),q);
670 p=PushShortPixel(quantum_info->endian,p,&pixel);
671 SetPixelGreen(image,ClampToQuantum((
double) QuantumRange*(
double)
672 HalfToSinglePrecision(pixel)),q);
673 p=PushShortPixel(quantum_info->endian,p,&pixel);
674 SetPixelBlue(image,ClampToQuantum((
double) QuantumRange*(
double)
675 HalfToSinglePrecision(pixel)),q);
676 p+=(ptrdiff_t) quantum_info->pad;
677 q+=(ptrdiff_t) GetPixelChannels(image);
681 for (x=0; x < (ssize_t) number_pixels; x++)
683 p=PushShortPixel(quantum_info->endian,p,&pixel);
684 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
685 p=PushShortPixel(quantum_info->endian,p,&pixel);
686 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
687 p=PushShortPixel(quantum_info->endian,p,&pixel);
688 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
689 p+=(ptrdiff_t) quantum_info->pad;
690 q+=(ptrdiff_t) GetPixelChannels(image);
696 if (quantum_info->format == FloatingPointQuantumFormat)
701 for (x=0; x < (ssize_t) number_pixels; x++)
703 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
704 SetPixelRed(image,ClampToQuantum(pixel),q);
705 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
706 SetPixelGreen(image,ClampToQuantum(pixel),q);
707 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
708 SetPixelBlue(image,ClampToQuantum(pixel),q);
709 p+=(ptrdiff_t) quantum_info->pad;
710 q+=(ptrdiff_t) GetPixelChannels(image);
719 for (x=0; x < (ssize_t) number_pixels; x++)
721 p=PushLongPixel(quantum_info->endian,p,&pixel);
722 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
723 p=PushLongPixel(quantum_info->endian,p,&pixel);
724 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
725 p=PushLongPixel(quantum_info->endian,p,&pixel);
726 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
727 p+=(ptrdiff_t) quantum_info->pad;
728 q+=(ptrdiff_t) GetPixelChannels(image);
735 if (quantum_info->format == FloatingPointQuantumFormat)
740 for (x=0; x < (ssize_t) number_pixels; x++)
742 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
743 SetPixelRed(image,ClampToQuantum(pixel),q);
744 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
745 SetPixelGreen(image,ClampToQuantum(pixel),q);
746 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
747 SetPixelBlue(image,ClampToQuantum(pixel),q);
748 p+=(ptrdiff_t) quantum_info->pad;
749 q+=(ptrdiff_t) GetPixelChannels(image);
757 if (quantum_info->format == FloatingPointQuantumFormat)
762 for (x=0; x < (ssize_t) number_pixels; x++)
764 p=PushDoublePixel(quantum_info,p,&pixel);
765 SetPixelRed(image,ClampToQuantum(pixel),q);
766 p=PushDoublePixel(quantum_info,p,&pixel);
767 SetPixelGreen(image,ClampToQuantum(pixel),q);
768 p=PushDoublePixel(quantum_info,p,&pixel);
769 SetPixelBlue(image,ClampToQuantum(pixel),q);
770 p+=(ptrdiff_t) quantum_info->pad;
771 q+=(ptrdiff_t) GetPixelChannels(image);
782 range=GetQuantumRange(quantum_info->depth);
783 for (x=0; x < (ssize_t) number_pixels; x++)
785 p=PushQuantumPixel(quantum_info,p,&pixel);
786 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
787 p=PushQuantumPixel(quantum_info,p,&pixel);
788 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
789 p=PushQuantumPixel(quantum_info,p,&pixel);
790 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
791 q+=(ptrdiff_t) GetPixelChannels(image);
798static void ImportBGRAQuantum(
const Image *image,QuantumInfo *quantum_info,
799 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
800 Quantum *magick_restrict q)
808 assert(image != (Image *) NULL);
809 assert(image->signature == MagickCoreSignature);
810 switch (quantum_info->depth)
817 for (x=0; x < (ssize_t) number_pixels; x++)
819 p=PushCharPixel(p,&pixel);
820 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
821 p=PushCharPixel(p,&pixel);
822 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
823 p=PushCharPixel(p,&pixel);
824 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
825 p=PushCharPixel(p,&pixel);
826 SetPixelAlpha(image,ScaleCharToQuantum(pixel),q);
827 p+=(ptrdiff_t) quantum_info->pad;
828 q+=(ptrdiff_t) GetPixelChannels(image);
838 if (quantum_info->pack == MagickFalse)
851 for (x=0; x < (ssize_t) number_pixels; x++)
853 for (i=0; i < 4; i++)
859 p=PushLongPixel(quantum_info->endian,p,&pixel);
860 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
861 (((pixel >> 22) & 0x3ff) << 6)));
866 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
867 (((pixel >> 12) & 0x3ff) << 6)));
872 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
873 (((pixel >> 2) & 0x3ff) << 6)));
879 case 0: SetPixelRed(image,(Quantum) quantum,q);
break;
880 case 1: SetPixelGreen(image,(Quantum) quantum,q);
break;
881 case 2: SetPixelBlue(image,(Quantum) quantum,q);
break;
882 case 3: SetPixelAlpha(image,(Quantum) quantum,q);
break;
886 p+=(ptrdiff_t) quantum_info->pad;
887 q+=(ptrdiff_t) GetPixelChannels(image);
891 for (x=0; x < (ssize_t) number_pixels; x++)
893 p=PushQuantumPixel(quantum_info,p,&pixel);
894 SetPixelRed(image,ScaleShortToQuantum((
unsigned short) (pixel << 6)),q);
895 p=PushQuantumPixel(quantum_info,p,&pixel);
896 SetPixelGreen(image,ScaleShortToQuantum((
unsigned short) (pixel << 6)),
898 p=PushQuantumPixel(quantum_info,p,&pixel);
899 SetPixelBlue(image,ScaleShortToQuantum((
unsigned short) (pixel << 6)),
901 p=PushQuantumPixel(quantum_info,p,&pixel);
902 SetPixelAlpha(image,ScaleShortToQuantum((
unsigned short) (pixel << 6)),
904 q+=(ptrdiff_t) GetPixelChannels(image);
913 if (quantum_info->format == FloatingPointQuantumFormat)
915 for (x=0; x < (ssize_t) number_pixels; x++)
917 p=PushShortPixel(quantum_info->endian,p,&pixel);
918 SetPixelRed(image,ClampToQuantum((
double) QuantumRange*(
double)
919 HalfToSinglePrecision(pixel)),q);
920 p=PushShortPixel(quantum_info->endian,p,&pixel);
921 SetPixelGreen(image,ClampToQuantum((
double) QuantumRange*(
double)
922 HalfToSinglePrecision(pixel)),q);
923 p=PushShortPixel(quantum_info->endian,p,&pixel);
924 SetPixelBlue(image,ClampToQuantum((
double) QuantumRange*(
double)
925 HalfToSinglePrecision(pixel)),q);
926 p=PushShortPixel(quantum_info->endian,p,&pixel);
927 SetPixelAlpha(image,ClampToQuantum((
double) QuantumRange*(
double)
928 HalfToSinglePrecision(pixel)),q);
929 p+=(ptrdiff_t) quantum_info->pad;
930 q+=(ptrdiff_t) GetPixelChannels(image);
934 for (x=0; x < (ssize_t) number_pixels; x++)
936 p=PushShortPixel(quantum_info->endian,p,&pixel);
937 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
938 p=PushShortPixel(quantum_info->endian,p,&pixel);
939 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
940 p=PushShortPixel(quantum_info->endian,p,&pixel);
941 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
942 p=PushShortPixel(quantum_info->endian,p,&pixel);
943 SetPixelAlpha(image,ScaleShortToQuantum(pixel),q);
944 p+=(ptrdiff_t) quantum_info->pad;
945 q+=(ptrdiff_t) GetPixelChannels(image);
951 if (quantum_info->format == FloatingPointQuantumFormat)
956 for (x=0; x < (ssize_t) number_pixels; x++)
958 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
959 SetPixelRed(image,ClampToQuantum(pixel),q);
960 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
961 SetPixelGreen(image,ClampToQuantum(pixel),q);
962 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
963 SetPixelBlue(image,ClampToQuantum(pixel),q);
964 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
965 SetPixelAlpha(image,ClampToQuantum(pixel),q);
966 p+=(ptrdiff_t) quantum_info->pad;
967 q+=(ptrdiff_t) GetPixelChannels(image);
976 for (x=0; x < (ssize_t) number_pixels; x++)
978 p=PushLongPixel(quantum_info->endian,p,&pixel);
979 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
980 p=PushLongPixel(quantum_info->endian,p,&pixel);
981 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
982 p=PushLongPixel(quantum_info->endian,p,&pixel);
983 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
984 p=PushLongPixel(quantum_info->endian,p,&pixel);
985 SetPixelAlpha(image,ScaleLongToQuantum(pixel),q);
986 p+=(ptrdiff_t) quantum_info->pad;
987 q+=(ptrdiff_t) GetPixelChannels(image);
994 if (quantum_info->format == FloatingPointQuantumFormat)
999 for (x=0; x < (ssize_t) number_pixels; x++)
1001 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1002 SetPixelRed(image,ClampToQuantum(pixel),q);
1003 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1004 SetPixelGreen(image,ClampToQuantum(pixel),q);
1005 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1006 SetPixelBlue(image,ClampToQuantum(pixel),q);
1007 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1008 SetPixelAlpha(image,ClampToQuantum(pixel),q);
1009 p+=(ptrdiff_t) quantum_info->pad;
1010 q+=(ptrdiff_t) GetPixelChannels(image);
1018 if (quantum_info->format == FloatingPointQuantumFormat)
1023 for (x=0; x < (ssize_t) number_pixels; x++)
1025 p=PushDoublePixel(quantum_info,p,&pixel);
1026 SetPixelRed(image,ClampToQuantum(pixel),q);
1027 p=PushDoublePixel(quantum_info,p,&pixel);
1028 SetPixelGreen(image,ClampToQuantum(pixel),q);
1029 p=PushDoublePixel(quantum_info,p,&pixel);
1030 SetPixelBlue(image,ClampToQuantum(pixel),q);
1031 p=PushDoublePixel(quantum_info,p,&pixel);
1032 SetPixelAlpha(image,ClampToQuantum(pixel),q);
1033 p+=(ptrdiff_t) quantum_info->pad;
1034 q+=(ptrdiff_t) GetPixelChannels(image);
1045 range=GetQuantumRange(quantum_info->depth);
1046 for (x=0; x < (ssize_t) number_pixels; x++)
1048 p=PushQuantumPixel(quantum_info,p,&pixel);
1049 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
1050 p=PushQuantumPixel(quantum_info,p,&pixel);
1051 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
1052 p=PushQuantumPixel(quantum_info,p,&pixel);
1053 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
1054 p=PushQuantumPixel(quantum_info,p,&pixel);
1055 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
1056 q+=(ptrdiff_t) GetPixelChannels(image);
1063static void ImportBGROQuantum(
const Image *image,QuantumInfo *quantum_info,
1064 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
1065 Quantum *magick_restrict q)
1073 assert(image != (Image *) NULL);
1074 assert(image->signature == MagickCoreSignature);
1075 switch (quantum_info->depth)
1082 for (x=0; x < (ssize_t) number_pixels; x++)
1084 p=PushCharPixel(p,&pixel);
1085 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
1086 p=PushCharPixel(p,&pixel);
1087 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
1088 p=PushCharPixel(p,&pixel);
1089 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
1090 p=PushCharPixel(p,&pixel);
1091 SetPixelOpacity(image,ScaleCharToQuantum(pixel),q);
1092 p+=(ptrdiff_t) quantum_info->pad;
1093 q+=(ptrdiff_t) GetPixelChannels(image);
1103 if (quantum_info->pack == MagickFalse)
1116 for (x=0; x < (ssize_t) number_pixels; x++)
1118 for (i=0; i < 4; i++)
1124 p=PushLongPixel(quantum_info->endian,p,&pixel);
1125 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
1126 (((pixel >> 22) & 0x3ff) << 6)));
1131 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
1132 (((pixel >> 12) & 0x3ff) << 6)));
1137 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
1138 (((pixel >> 2) & 0x3ff) << 6)));
1144 case 0: SetPixelRed(image,(Quantum) quantum,q);
break;
1145 case 1: SetPixelGreen(image,(Quantum) quantum,q);
break;
1146 case 2: SetPixelBlue(image,(Quantum) quantum,q);
break;
1147 case 3: SetPixelOpacity(image,(Quantum) quantum,q);
break;
1151 p+=(ptrdiff_t) quantum_info->pad;
1152 q+=(ptrdiff_t) GetPixelChannels(image);
1156 for (x=0; x < (ssize_t) number_pixels; x++)
1158 p=PushQuantumPixel(quantum_info,p,&pixel);
1159 SetPixelRed(image,ScaleShortToQuantum((
unsigned short) (pixel << 6)),q);
1160 p=PushQuantumPixel(quantum_info,p,&pixel);
1161 SetPixelGreen(image,ScaleShortToQuantum((
unsigned short) (pixel << 6)),
1163 p=PushQuantumPixel(quantum_info,p,&pixel);
1164 SetPixelBlue(image,ScaleShortToQuantum((
unsigned short) (pixel << 6)),
1166 p=PushQuantumPixel(quantum_info,p,&pixel);
1167 SetPixelOpacity(image,ScaleShortToQuantum((
unsigned short) (pixel << 6)),
1169 q+=(ptrdiff_t) GetPixelChannels(image);
1178 if (quantum_info->format == FloatingPointQuantumFormat)
1180 for (x=0; x < (ssize_t) number_pixels; x++)
1182 p=PushShortPixel(quantum_info->endian,p,&pixel);
1183 SetPixelRed(image,ClampToQuantum((
double) QuantumRange*(
double)
1184 HalfToSinglePrecision(pixel)),q);
1185 p=PushShortPixel(quantum_info->endian,p,&pixel);
1186 SetPixelGreen(image,ClampToQuantum((
double) QuantumRange*(
double)
1187 HalfToSinglePrecision(pixel)),q);
1188 p=PushShortPixel(quantum_info->endian,p,&pixel);
1189 SetPixelBlue(image,ClampToQuantum((
double) QuantumRange*(
double)
1190 HalfToSinglePrecision(pixel)),q);
1191 p=PushShortPixel(quantum_info->endian,p,&pixel);
1192 SetPixelOpacity(image,ClampToQuantum((
double) QuantumRange*(
double)
1193 HalfToSinglePrecision(pixel)),q);
1194 p+=(ptrdiff_t) quantum_info->pad;
1195 q+=(ptrdiff_t) GetPixelChannels(image);
1199 for (x=0; x < (ssize_t) number_pixels; x++)
1201 p=PushShortPixel(quantum_info->endian,p,&pixel);
1202 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
1203 p=PushShortPixel(quantum_info->endian,p,&pixel);
1204 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
1205 p=PushShortPixel(quantum_info->endian,p,&pixel);
1206 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
1207 p=PushShortPixel(quantum_info->endian,p,&pixel);
1208 SetPixelOpacity(image,ScaleShortToQuantum(pixel),q);
1209 p+=(ptrdiff_t) quantum_info->pad;
1210 q+=(ptrdiff_t) GetPixelChannels(image);
1216 if (quantum_info->format == FloatingPointQuantumFormat)
1221 for (x=0; x < (ssize_t) number_pixels; x++)
1223 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1224 SetPixelRed(image,ClampToQuantum(pixel),q);
1225 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1226 SetPixelGreen(image,ClampToQuantum(pixel),q);
1227 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1228 SetPixelBlue(image,ClampToQuantum(pixel),q);
1229 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1230 SetPixelOpacity(image,ClampToQuantum(pixel),q);
1231 p+=(ptrdiff_t) quantum_info->pad;
1232 q+=(ptrdiff_t) GetPixelChannels(image);
1241 for (x=0; x < (ssize_t) number_pixels; x++)
1243 p=PushLongPixel(quantum_info->endian,p,&pixel);
1244 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
1245 p=PushLongPixel(quantum_info->endian,p,&pixel);
1246 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
1247 p=PushLongPixel(quantum_info->endian,p,&pixel);
1248 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
1249 p=PushLongPixel(quantum_info->endian,p,&pixel);
1250 SetPixelOpacity(image,ScaleLongToQuantum(pixel),q);
1251 p+=(ptrdiff_t) quantum_info->pad;
1252 q+=(ptrdiff_t) GetPixelChannels(image);
1259 if (quantum_info->format == FloatingPointQuantumFormat)
1264 for (x=0; x < (ssize_t) number_pixels; x++)
1266 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1267 SetPixelRed(image,ClampToQuantum(pixel),q);
1268 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1269 SetPixelGreen(image,ClampToQuantum(pixel),q);
1270 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1271 SetPixelBlue(image,ClampToQuantum(pixel),q);
1272 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1273 SetPixelOpacity(image,ClampToQuantum(pixel),q);
1274 p+=(ptrdiff_t) quantum_info->pad;
1275 q+=(ptrdiff_t) GetPixelChannels(image);
1283 if (quantum_info->format == FloatingPointQuantumFormat)
1288 for (x=0; x < (ssize_t) number_pixels; x++)
1290 p=PushDoublePixel(quantum_info,p,&pixel);
1291 SetPixelRed(image,ClampToQuantum(pixel),q);
1292 p=PushDoublePixel(quantum_info,p,&pixel);
1293 SetPixelGreen(image,ClampToQuantum(pixel),q);
1294 p=PushDoublePixel(quantum_info,p,&pixel);
1295 SetPixelBlue(image,ClampToQuantum(pixel),q);
1296 p=PushDoublePixel(quantum_info,p,&pixel);
1297 SetPixelOpacity(image,ClampToQuantum(pixel),q);
1298 p+=(ptrdiff_t) quantum_info->pad;
1299 q+=(ptrdiff_t) GetPixelChannels(image);
1310 range=GetQuantumRange(quantum_info->depth);
1311 for (x=0; x < (ssize_t) number_pixels; x++)
1313 p=PushQuantumPixel(quantum_info,p,&pixel);
1314 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
1315 p=PushQuantumPixel(quantum_info,p,&pixel);
1316 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
1317 p=PushQuantumPixel(quantum_info,p,&pixel);
1318 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
1319 p=PushQuantumPixel(quantum_info,p,&pixel);
1320 SetPixelOpacity(image,ScaleAnyToQuantum(pixel,range),q);
1321 q+=(ptrdiff_t) GetPixelChannels(image);
1328static void ImportBlackQuantum(
const Image *image,QuantumInfo *quantum_info,
1329 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
1330 Quantum *magick_restrict q,ExceptionInfo *exception)
1332 if (image->colorspace != CMYKColorspace)
1334 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1335 "ColorSeparatedImageRequired",
"`%s'",image->filename);
1338 ImportPixelChannel(image,quantum_info,number_pixels,p,q,BlackPixelChannel);
1341static void ImportCbYCrYQuantum(
const Image *image,QuantumInfo *quantum_info,
1342 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
1343 Quantum *magick_restrict q)
1354 assert(image != (Image *) NULL);
1355 assert(image->signature == MagickCoreSignature);
1356 switch (quantum_info->depth)
1364 if (quantum_info->pack == MagickFalse)
1377 for (x=0; x < (ssize_t) (number_pixels-3); x+=4)
1379 for (i=0; i < 4; i++)
1385 p=PushLongPixel(quantum_info->endian,p,&pixel);
1386 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
1387 (((pixel >> 22) & 0x3ff) << 6)));
1392 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
1393 (((pixel >> 12) & 0x3ff) << 6)));
1398 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
1399 (((pixel >> 2) & 0x3ff) << 6)));
1403 cbcr[i]=(Quantum) (quantum);
1406 p+=(ptrdiff_t) quantum_info->pad;
1407 SetPixelRed(image,cbcr[1],q);
1408 SetPixelGreen(image,cbcr[0],q);
1409 SetPixelBlue(image,cbcr[2],q);
1410 q+=(ptrdiff_t) GetPixelChannels(image);
1411 SetPixelRed(image,cbcr[3],q);
1412 SetPixelGreen(image,cbcr[0],q);
1413 SetPixelBlue(image,cbcr[2],q);
1414 q+=(ptrdiff_t) GetPixelChannels(image);
1422 range=GetQuantumRange(quantum_info->depth);
1423 for (x=0; x < (ssize_t) number_pixels; x++)
1425 p=PushQuantumPixel(quantum_info,p,&pixel);
1426 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
1427 p=PushQuantumPixel(quantum_info,p,&pixel);
1428 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
1429 q+=(ptrdiff_t) GetPixelChannels(image);
1436static void ImportCMYKQuantum(
const Image *image,QuantumInfo *quantum_info,
1437 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
1438 Quantum *magick_restrict q,ExceptionInfo *exception)
1446 if (image->colorspace != CMYKColorspace)
1448 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1449 "ColorSeparatedImageRequired",
"`%s'",image->filename);
1452 switch (quantum_info->depth)
1459 for (x=0; x < (ssize_t) number_pixels; x++)
1461 p=PushCharPixel(p,&pixel);
1462 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
1463 p=PushCharPixel(p,&pixel);
1464 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
1465 p=PushCharPixel(p,&pixel);
1466 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
1467 p=PushCharPixel(p,&pixel);
1468 SetPixelBlack(image,ScaleCharToQuantum(pixel),q);
1469 p+=(ptrdiff_t) quantum_info->pad;
1470 q+=(ptrdiff_t) GetPixelChannels(image);
1479 if (quantum_info->format == FloatingPointQuantumFormat)
1481 for (x=0; x < (ssize_t) number_pixels; x++)
1483 p=PushShortPixel(quantum_info->endian,p,&pixel);
1484 SetPixelRed(image,ClampToQuantum((
double) QuantumRange*(
double)
1485 HalfToSinglePrecision(pixel)),q);
1486 p=PushShortPixel(quantum_info->endian,p,&pixel);
1487 SetPixelGreen(image,ClampToQuantum((
double) QuantumRange*(
double)
1488 HalfToSinglePrecision(pixel)),q);
1489 p=PushShortPixel(quantum_info->endian,p,&pixel);
1490 SetPixelBlue(image,ClampToQuantum((
double) QuantumRange*(
double)
1491 HalfToSinglePrecision(pixel)),q);
1492 p=PushShortPixel(quantum_info->endian,p,&pixel);
1493 SetPixelBlack(image,ClampToQuantum((
double) QuantumRange*(
double)
1494 HalfToSinglePrecision(pixel)),q);
1495 p+=(ptrdiff_t) quantum_info->pad;
1496 q+=(ptrdiff_t) GetPixelChannels(image);
1500 for (x=0; x < (ssize_t) number_pixels; x++)
1502 p=PushShortPixel(quantum_info->endian,p,&pixel);
1503 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
1504 p=PushShortPixel(quantum_info->endian,p,&pixel);
1505 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
1506 p=PushShortPixel(quantum_info->endian,p,&pixel);
1507 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
1508 p=PushShortPixel(quantum_info->endian,p,&pixel);
1509 SetPixelBlack(image,ScaleShortToQuantum(pixel),q);
1510 p+=(ptrdiff_t) quantum_info->pad;
1511 q+=(ptrdiff_t) GetPixelChannels(image);
1517 if (quantum_info->format == FloatingPointQuantumFormat)
1522 for (x=0; x < (ssize_t) number_pixels; x++)
1524 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1525 SetPixelRed(image,ClampToQuantum(pixel),q);
1526 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1527 SetPixelGreen(image,ClampToQuantum(pixel),q);
1528 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1529 SetPixelBlue(image,ClampToQuantum(pixel),q);
1530 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1531 SetPixelBlack(image,ClampToQuantum(pixel),q);
1532 p+=(ptrdiff_t) quantum_info->pad;
1533 q+=(ptrdiff_t) GetPixelChannels(image);
1542 for (x=0; x < (ssize_t) number_pixels; x++)
1544 p=PushLongPixel(quantum_info->endian,p,&pixel);
1545 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
1546 p=PushLongPixel(quantum_info->endian,p,&pixel);
1547 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
1548 p=PushLongPixel(quantum_info->endian,p,&pixel);
1549 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
1550 p=PushLongPixel(quantum_info->endian,p,&pixel);
1551 SetPixelBlack(image,ScaleLongToQuantum(pixel),q);
1552 p+=(ptrdiff_t) quantum_info->pad;
1553 q+=(ptrdiff_t) GetPixelChannels(image);
1560 if (quantum_info->format == FloatingPointQuantumFormat)
1565 for (x=0; x < (ssize_t) number_pixels; x++)
1567 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1568 SetPixelRed(image,ClampToQuantum(pixel),q);
1569 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1570 SetPixelGreen(image,ClampToQuantum(pixel),q);
1571 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1572 SetPixelBlue(image,ClampToQuantum(pixel),q);
1573 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1574 SetPixelBlack(image,ClampToQuantum(pixel),q);
1575 p+=(ptrdiff_t) quantum_info->pad;
1576 q+=(ptrdiff_t) GetPixelChannels(image);
1584 if (quantum_info->format == FloatingPointQuantumFormat)
1589 for (x=0; x < (ssize_t) number_pixels; x++)
1591 p=PushDoublePixel(quantum_info,p,&pixel);
1592 SetPixelRed(image,ClampToQuantum(pixel),q);
1593 p=PushDoublePixel(quantum_info,p,&pixel);
1594 SetPixelGreen(image,ClampToQuantum(pixel),q);
1595 p=PushDoublePixel(quantum_info,p,&pixel);
1596 SetPixelBlue(image,ClampToQuantum(pixel),q);
1597 p=PushDoublePixel(quantum_info,p,&pixel);
1598 SetPixelBlack(image,ClampToQuantum(pixel),q);
1599 p+=(ptrdiff_t) quantum_info->pad;
1600 q+=(ptrdiff_t) GetPixelChannels(image);
1611 range=GetQuantumRange(quantum_info->depth);
1612 for (x=0; x < (ssize_t) number_pixels; x++)
1614 p=PushQuantumPixel(quantum_info,p,&pixel);
1615 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
1616 p=PushQuantumPixel(quantum_info,p,&pixel);
1617 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
1618 p=PushQuantumPixel(quantum_info,p,&pixel);
1619 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
1620 p=PushQuantumPixel(quantum_info,p,&pixel);
1621 SetPixelBlack(image,ScaleAnyToQuantum(pixel,range),q);
1622 q+=(ptrdiff_t) GetPixelChannels(image);
1629static void ImportCMYKAQuantum(
const Image *image,QuantumInfo *quantum_info,
1630 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
1631 Quantum *magick_restrict q,ExceptionInfo *exception)
1639 if (image->colorspace != CMYKColorspace)
1641 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1642 "ColorSeparatedImageRequired",
"`%s'",image->filename);
1645 switch (quantum_info->depth)
1652 for (x=0; x < (ssize_t) number_pixels; x++)
1654 p=PushCharPixel(p,&pixel);
1655 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
1656 p=PushCharPixel(p,&pixel);
1657 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
1658 p=PushCharPixel(p,&pixel);
1659 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
1660 p=PushCharPixel(p,&pixel);
1661 SetPixelBlack(image,ScaleCharToQuantum(pixel),q);
1662 p=PushCharPixel(p,&pixel);
1663 SetPixelAlpha(image,ScaleCharToQuantum(pixel),q);
1664 p+=(ptrdiff_t) quantum_info->pad;
1665 q+=(ptrdiff_t) GetPixelChannels(image);
1674 if (quantum_info->format == FloatingPointQuantumFormat)
1676 for (x=0; x < (ssize_t) number_pixels; x++)
1678 p=PushShortPixel(quantum_info->endian,p,&pixel);
1679 SetPixelRed(image,ClampToQuantum((
double) QuantumRange*(
double)
1680 HalfToSinglePrecision(pixel)),q);
1681 p=PushShortPixel(quantum_info->endian,p,&pixel);
1682 SetPixelGreen(image,ClampToQuantum((
double) QuantumRange*(
double)
1683 HalfToSinglePrecision(pixel)),q);
1684 p=PushShortPixel(quantum_info->endian,p,&pixel);
1685 SetPixelBlue(image,ClampToQuantum((
double) QuantumRange*(
double)
1686 HalfToSinglePrecision(pixel)),q);
1687 p=PushShortPixel(quantum_info->endian,p,&pixel);
1688 SetPixelBlack(image,ClampToQuantum((
double) QuantumRange*(
double)
1689 HalfToSinglePrecision(pixel)),q);
1690 p=PushShortPixel(quantum_info->endian,p,&pixel);
1691 SetPixelAlpha(image,ClampToQuantum((
double) QuantumRange*(
double)
1692 HalfToSinglePrecision(pixel)),q);
1693 p+=(ptrdiff_t) quantum_info->pad;
1694 q+=(ptrdiff_t) GetPixelChannels(image);
1698 for (x=0; x < (ssize_t) number_pixels; x++)
1700 p=PushShortPixel(quantum_info->endian,p,&pixel);
1701 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
1702 p=PushShortPixel(quantum_info->endian,p,&pixel);
1703 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
1704 p=PushShortPixel(quantum_info->endian,p,&pixel);
1705 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
1706 p=PushShortPixel(quantum_info->endian,p,&pixel);
1707 SetPixelBlack(image,ScaleShortToQuantum(pixel),q);
1708 p=PushShortPixel(quantum_info->endian,p,&pixel);
1709 SetPixelAlpha(image,ScaleShortToQuantum(pixel),q);
1710 p+=(ptrdiff_t) quantum_info->pad;
1711 q+=(ptrdiff_t) GetPixelChannels(image);
1717 if (quantum_info->format == FloatingPointQuantumFormat)
1722 for (x=0; x < (ssize_t) number_pixels; x++)
1724 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1725 SetPixelRed(image,ClampToQuantum(pixel),q);
1726 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1727 SetPixelGreen(image,ClampToQuantum(pixel),q);
1728 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1729 SetPixelBlue(image,ClampToQuantum(pixel),q);
1730 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1731 SetPixelBlack(image,ClampToQuantum(pixel),q);
1732 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1733 SetPixelAlpha(image,ClampToQuantum(pixel),q);
1734 p+=(ptrdiff_t) quantum_info->pad;
1735 q+=(ptrdiff_t) GetPixelChannels(image);
1744 for (x=0; x < (ssize_t) number_pixels; x++)
1746 p=PushLongPixel(quantum_info->endian,p,&pixel);
1747 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
1748 p=PushLongPixel(quantum_info->endian,p,&pixel);
1749 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
1750 p=PushLongPixel(quantum_info->endian,p,&pixel);
1751 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
1752 p=PushLongPixel(quantum_info->endian,p,&pixel);
1753 SetPixelBlack(image,ScaleLongToQuantum(pixel),q);
1754 p=PushLongPixel(quantum_info->endian,p,&pixel);
1755 SetPixelAlpha(image,ScaleLongToQuantum(pixel),q);
1756 p+=(ptrdiff_t) quantum_info->pad;
1757 q+=(ptrdiff_t) GetPixelChannels(image);
1764 if (quantum_info->format == FloatingPointQuantumFormat)
1769 for (x=0; x < (ssize_t) number_pixels; x++)
1771 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1772 SetPixelRed(image,ClampToQuantum(pixel),q);
1773 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1774 SetPixelGreen(image,ClampToQuantum(pixel),q);
1775 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1776 SetPixelBlue(image,ClampToQuantum(pixel),q);
1777 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1778 SetPixelBlack(image,ClampToQuantum(pixel),q);
1779 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1780 SetPixelAlpha(image,ClampToQuantum(pixel),q);
1781 p+=(ptrdiff_t) quantum_info->pad;
1782 q+=(ptrdiff_t) GetPixelChannels(image);
1790 if (quantum_info->format == FloatingPointQuantumFormat)
1795 for (x=0; x < (ssize_t) number_pixels; x++)
1797 p=PushDoublePixel(quantum_info,p,&pixel);
1798 SetPixelRed(image,ClampToQuantum(pixel),q);
1799 p=PushDoublePixel(quantum_info,p,&pixel);
1800 SetPixelGreen(image,ClampToQuantum(pixel),q);
1801 p=PushDoublePixel(quantum_info,p,&pixel);
1802 SetPixelBlue(image,ClampToQuantum(pixel),q);
1803 p=PushDoublePixel(quantum_info,p,&pixel);
1804 SetPixelBlack(image,ClampToQuantum(pixel),q);
1805 p=PushDoublePixel(quantum_info,p,&pixel);
1806 SetPixelAlpha(image,ClampToQuantum(pixel),q);
1807 p+=(ptrdiff_t) quantum_info->pad;
1808 q+=(ptrdiff_t) GetPixelChannels(image);
1819 range=GetQuantumRange(quantum_info->depth);
1820 for (x=0; x < (ssize_t) number_pixels; x++)
1822 p=PushQuantumPixel(quantum_info,p,&pixel);
1823 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
1824 p=PushQuantumPixel(quantum_info,p,&pixel);
1825 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
1826 p=PushQuantumPixel(quantum_info,p,&pixel);
1827 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
1828 p=PushQuantumPixel(quantum_info,p,&pixel);
1829 SetPixelBlack(image,ScaleAnyToQuantum(pixel,range),q);
1830 p=PushQuantumPixel(quantum_info,p,&pixel);
1831 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
1832 q+=(ptrdiff_t) GetPixelChannels(image);
1839static void ImportCMYKOQuantum(
const Image *image,QuantumInfo *quantum_info,
1840 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
1841 Quantum *magick_restrict q,ExceptionInfo *exception)
1849 if (image->colorspace != CMYKColorspace)
1851 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1852 "ColorSeparatedImageRequired",
"`%s'",image->filename);
1855 switch (quantum_info->depth)
1862 for (x=0; x < (ssize_t) number_pixels; x++)
1864 p=PushCharPixel(p,&pixel);
1865 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
1866 p=PushCharPixel(p,&pixel);
1867 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
1868 p=PushCharPixel(p,&pixel);
1869 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
1870 p=PushCharPixel(p,&pixel);
1871 SetPixelBlack(image,ScaleCharToQuantum(pixel),q);
1872 p=PushCharPixel(p,&pixel);
1873 SetPixelOpacity(image,ScaleCharToQuantum(pixel),q);
1874 p+=(ptrdiff_t) quantum_info->pad;
1875 q+=(ptrdiff_t) GetPixelChannels(image);
1884 if (quantum_info->format == FloatingPointQuantumFormat)
1886 for (x=0; x < (ssize_t) number_pixels; x++)
1888 p=PushShortPixel(quantum_info->endian,p,&pixel);
1889 SetPixelRed(image,ClampToQuantum((
double) QuantumRange*(
double)
1890 HalfToSinglePrecision(pixel)),q);
1891 p=PushShortPixel(quantum_info->endian,p,&pixel);
1892 SetPixelGreen(image,ClampToQuantum((
double) QuantumRange*(
double)
1893 HalfToSinglePrecision(pixel)),q);
1894 p=PushShortPixel(quantum_info->endian,p,&pixel);
1895 SetPixelBlue(image,ClampToQuantum((
double) QuantumRange*(
double)
1896 HalfToSinglePrecision(pixel)),q);
1897 p=PushShortPixel(quantum_info->endian,p,&pixel);
1898 SetPixelBlack(image,ClampToQuantum((
double) QuantumRange*(
double)
1899 HalfToSinglePrecision(pixel)),q);
1900 p=PushShortPixel(quantum_info->endian,p,&pixel);
1901 SetPixelOpacity(image,ClampToQuantum((
double) QuantumRange*(
double)
1902 HalfToSinglePrecision(pixel)),q);
1903 p+=(ptrdiff_t) quantum_info->pad;
1904 q+=(ptrdiff_t) GetPixelChannels(image);
1908 for (x=0; x < (ssize_t) number_pixels; x++)
1910 p=PushShortPixel(quantum_info->endian,p,&pixel);
1911 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
1912 p=PushShortPixel(quantum_info->endian,p,&pixel);
1913 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
1914 p=PushShortPixel(quantum_info->endian,p,&pixel);
1915 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
1916 p=PushShortPixel(quantum_info->endian,p,&pixel);
1917 SetPixelBlack(image,ScaleShortToQuantum(pixel),q);
1918 p=PushShortPixel(quantum_info->endian,p,&pixel);
1919 SetPixelOpacity(image,ScaleShortToQuantum(pixel),q);
1920 p+=(ptrdiff_t) quantum_info->pad;
1921 q+=(ptrdiff_t) GetPixelChannels(image);
1927 if (quantum_info->format == FloatingPointQuantumFormat)
1932 for (x=0; x < (ssize_t) number_pixels; x++)
1934 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1935 SetPixelRed(image,ClampToQuantum(pixel),q);
1936 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1937 SetPixelGreen(image,ClampToQuantum(pixel),q);
1938 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1939 SetPixelBlue(image,ClampToQuantum(pixel),q);
1940 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1941 SetPixelBlack(image,ClampToQuantum(pixel),q);
1942 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1943 SetPixelOpacity(image,ClampToQuantum(pixel),q);
1944 p+=(ptrdiff_t) quantum_info->pad;
1945 q+=(ptrdiff_t) GetPixelChannels(image);
1954 for (x=0; x < (ssize_t) number_pixels; x++)
1956 p=PushLongPixel(quantum_info->endian,p,&pixel);
1957 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
1958 p=PushLongPixel(quantum_info->endian,p,&pixel);
1959 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
1960 p=PushLongPixel(quantum_info->endian,p,&pixel);
1961 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
1962 p=PushLongPixel(quantum_info->endian,p,&pixel);
1963 SetPixelBlack(image,ScaleLongToQuantum(pixel),q);
1964 p=PushLongPixel(quantum_info->endian,p,&pixel);
1965 SetPixelOpacity(image,ScaleLongToQuantum(pixel),q);
1966 p+=(ptrdiff_t) quantum_info->pad;
1967 q+=(ptrdiff_t) GetPixelChannels(image);
1974 if (quantum_info->format == FloatingPointQuantumFormat)
1979 for (x=0; x < (ssize_t) number_pixels; x++)
1981 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1982 SetPixelRed(image,ClampToQuantum(pixel),q);
1983 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1984 SetPixelGreen(image,ClampToQuantum(pixel),q);
1985 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1986 SetPixelBlue(image,ClampToQuantum(pixel),q);
1987 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1988 SetPixelBlack(image,ClampToQuantum(pixel),q);
1989 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1990 SetPixelOpacity(image,ClampToQuantum(pixel),q);
1991 p+=(ptrdiff_t) quantum_info->pad;
1992 q+=(ptrdiff_t) GetPixelChannels(image);
2000 if (quantum_info->format == FloatingPointQuantumFormat)
2005 for (x=0; x < (ssize_t) number_pixels; x++)
2007 p=PushDoublePixel(quantum_info,p,&pixel);
2008 SetPixelRed(image,ClampToQuantum(pixel),q);
2009 p=PushDoublePixel(quantum_info,p,&pixel);
2010 SetPixelGreen(image,ClampToQuantum(pixel),q);
2011 p=PushDoublePixel(quantum_info,p,&pixel);
2012 SetPixelBlue(image,ClampToQuantum(pixel),q);
2013 p=PushDoublePixel(quantum_info,p,&pixel);
2014 SetPixelBlack(image,ClampToQuantum(pixel),q);
2015 p=PushDoublePixel(quantum_info,p,&pixel);
2016 SetPixelOpacity(image,ClampToQuantum(pixel),q);
2017 p+=(ptrdiff_t) quantum_info->pad;
2018 q+=(ptrdiff_t) GetPixelChannels(image);
2029 range=GetQuantumRange(quantum_info->depth);
2030 for (x=0; x < (ssize_t) number_pixels; x++)
2032 p=PushQuantumPixel(quantum_info,p,&pixel);
2033 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
2034 p=PushQuantumPixel(quantum_info,p,&pixel);
2035 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
2036 p=PushQuantumPixel(quantum_info,p,&pixel);
2037 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
2038 p=PushQuantumPixel(quantum_info,p,&pixel);
2039 SetPixelBlack(image,ScaleAnyToQuantum(pixel,range),q);
2040 p=PushQuantumPixel(quantum_info,p,&pixel);
2041 SetPixelOpacity(image,ScaleAnyToQuantum(pixel,range),q);
2042 q+=(ptrdiff_t) GetPixelChannels(image);
2049static void ImportGrayQuantum(
const Image *image,QuantumInfo *quantum_info,
2050 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
2051 Quantum *magick_restrict q)
2062 assert(image != (Image *) NULL);
2063 assert(image->signature == MagickCoreSignature);
2064 switch (quantum_info->depth)
2074 if (quantum_info->min_is_white != MagickFalse)
2079 for (x=0; x < ((ssize_t) number_pixels-7); x+=8)
2081 for (bit=0; bit < 8; bit++)
2083 SetPixelGray(image,((*p) & (1 << (7-bit))) == 0 ? black : white,q);
2084 q+=(ptrdiff_t) GetPixelChannels(image);
2088 for (bit=0; bit < (ssize_t) (number_pixels % 8); bit++)
2090 SetPixelGray(image,((*p) & (0x01 << (7-bit))) == 0 ? black : white,q);
2091 q+=(ptrdiff_t) GetPixelChannels(image);
2102 range=GetQuantumRange(quantum_info->depth);
2103 for (x=0; x < ((ssize_t) number_pixels-1); x+=2)
2105 pixel=(
unsigned char) ((*p >> 4) & 0xf);
2106 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
2107 q+=(ptrdiff_t) GetPixelChannels(image);
2108 pixel=(
unsigned char) ((*p) & 0xf);
2109 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
2111 q+=(ptrdiff_t) GetPixelChannels(image);
2113 for (bit=0; bit < (ssize_t) (number_pixels % 2); bit++)
2115 pixel=(
unsigned char) (*p++ >> 4);
2116 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
2117 q+=(ptrdiff_t) GetPixelChannels(image);
2126 if (quantum_info->min_is_white != MagickFalse)
2128 for (x=0; x < (ssize_t) number_pixels; x++)
2130 p=PushCharPixel(p,&pixel);
2131 SetPixelGray(image,QuantumRange-ScaleCharToQuantum(pixel),q);
2132 SetPixelAlpha(image,OpaqueAlpha,q);
2133 p+=(ptrdiff_t) quantum_info->pad;
2134 q+=(ptrdiff_t) GetPixelChannels(image);
2138 for (x=0; x < (ssize_t) number_pixels; x++)
2140 p=PushCharPixel(p,&pixel);
2141 SetPixelGray(image,ScaleCharToQuantum(pixel),q);
2142 SetPixelAlpha(image,OpaqueAlpha,q);
2143 p+=(ptrdiff_t) quantum_info->pad;
2144 q+=(ptrdiff_t) GetPixelChannels(image);
2154 range=GetQuantumRange(quantum_info->depth);
2155 if (quantum_info->pack == MagickFalse)
2157 if (image->endian == LSBEndian)
2159 for (x=0; x < (ssize_t) (number_pixels-2); x+=3)
2161 p=PushLongPixel(quantum_info->endian,p,&pixel);
2162 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 22) & 0x3ff,
2164 q+=(ptrdiff_t) GetPixelChannels(image);
2165 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,
2167 q+=(ptrdiff_t) GetPixelChannels(image);
2168 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 2) & 0x3ff,
2170 p+=(ptrdiff_t) quantum_info->pad;
2171 q+=(ptrdiff_t) GetPixelChannels(image);
2173 if (x++ < (ssize_t) (number_pixels-1))
2175 p=PushLongPixel(quantum_info->endian,p,&pixel);
2176 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 22) & 0x3ff,
2178 q+=(ptrdiff_t) GetPixelChannels(image);
2180 if (x++ < (ssize_t) number_pixels)
2182 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,
2184 q+=(ptrdiff_t) GetPixelChannels(image);
2188 for (x=0; x < (ssize_t) (number_pixels-2); x+=3)
2190 p=PushLongPixel(quantum_info->endian,p,&pixel);
2191 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 2) & 0x3ff,range),
2193 q+=(ptrdiff_t) GetPixelChannels(image);
2194 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,range),
2196 q+=(ptrdiff_t) GetPixelChannels(image);
2197 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 22) & 0x3ff,range),
2199 p+=(ptrdiff_t) quantum_info->pad;
2200 q+=(ptrdiff_t) GetPixelChannels(image);
2202 if (x++ < (ssize_t) (number_pixels-1))
2204 p=PushLongPixel(quantum_info->endian,p,&pixel);
2205 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 2) & 0x3ff,
2207 q+=(ptrdiff_t) GetPixelChannels(image);
2209 if (x++ < (ssize_t) number_pixels)
2211 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,
2213 q+=(ptrdiff_t) GetPixelChannels(image);
2217 for (x=0; x < (ssize_t) number_pixels; x++)
2219 p=PushQuantumPixel(quantum_info,p,&pixel);
2220 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
2221 p+=(ptrdiff_t) quantum_info->pad;
2222 q+=(ptrdiff_t) GetPixelChannels(image);
2228 range=GetQuantumRange(quantum_info->depth);
2229 if (quantum_info->pack == MagickFalse)
2234 for (x=0; x < (ssize_t) (number_pixels-1); x+=2)
2236 p=PushShortPixel(quantum_info->endian,p,&pixel);
2237 SetPixelGray(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
2239 q+=(ptrdiff_t) GetPixelChannels(image);
2240 p=PushShortPixel(quantum_info->endian,p,&pixel);
2241 SetPixelGray(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
2243 p+=(ptrdiff_t) quantum_info->pad;
2244 q+=(ptrdiff_t) GetPixelChannels(image);
2246 for (bit=0; bit < (ssize_t) (number_pixels % 2); bit++)
2248 p=PushShortPixel(quantum_info->endian,p,&pixel);
2249 SetPixelGray(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
2251 p+=(ptrdiff_t) quantum_info->pad;
2252 q+=(ptrdiff_t) GetPixelChannels(image);
2263 for (x=0; x < (ssize_t) number_pixels; x++)
2265 p=PushQuantumPixel(quantum_info,p,&pixel);
2266 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
2267 p+=(ptrdiff_t) quantum_info->pad;
2268 q+=(ptrdiff_t) GetPixelChannels(image);
2278 if (quantum_info->min_is_white != MagickFalse)
2280 for (x=0; x < (ssize_t) number_pixels; x++)
2282 p=PushShortPixel(quantum_info->endian,p,&pixel);
2283 SetPixelGray(image,QuantumRange-ScaleShortToQuantum(pixel),q);
2284 p+=(ptrdiff_t) quantum_info->pad;
2285 q+=(ptrdiff_t) GetPixelChannels(image);
2289 if (quantum_info->format == FloatingPointQuantumFormat)
2291 for (x=0; x < (ssize_t) number_pixels; x++)
2293 p=PushShortPixel(quantum_info->endian,p,&pixel);
2294 SetPixelGray(image,ClampToQuantum((
double) QuantumRange*(
double)
2295 HalfToSinglePrecision(pixel)),q);
2296 p+=(ptrdiff_t) quantum_info->pad;
2297 q+=(ptrdiff_t) GetPixelChannels(image);
2301 for (x=0; x < (ssize_t) number_pixels; x++)
2303 p=PushShortPixel(quantum_info->endian,p,&pixel);
2304 SetPixelGray(image,ScaleShortToQuantum(pixel),q);
2305 p+=(ptrdiff_t) quantum_info->pad;
2306 q+=(ptrdiff_t) GetPixelChannels(image);
2312 if (quantum_info->format == FloatingPointQuantumFormat)
2317 for (x=0; x < (ssize_t) number_pixels; x++)
2319 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
2320 SetPixelGray(image,ClampToQuantum(pixel),q);
2321 p+=(ptrdiff_t) quantum_info->pad;
2322 q+=(ptrdiff_t) GetPixelChannels(image);
2331 for (x=0; x < (ssize_t) number_pixels; x++)
2333 p=PushLongPixel(quantum_info->endian,p,&pixel);
2334 SetPixelGray(image,ScaleLongToQuantum(pixel),q);
2335 p+=(ptrdiff_t) quantum_info->pad;
2336 q+=(ptrdiff_t) GetPixelChannels(image);
2343 if (quantum_info->format == FloatingPointQuantumFormat)
2348 for (x=0; x < (ssize_t) number_pixels; x++)
2350 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
2351 SetPixelGray(image,ClampToQuantum(pixel),q);
2352 p+=(ptrdiff_t) quantum_info->pad;
2353 q+=(ptrdiff_t) GetPixelChannels(image);
2361 if (quantum_info->format == FloatingPointQuantumFormat)
2366 for (x=0; x < (ssize_t) number_pixels; x++)
2368 p=PushDoublePixel(quantum_info,p,&pixel);
2369 SetPixelGray(image,ClampToQuantum(pixel),q);
2370 p+=(ptrdiff_t) quantum_info->pad;
2371 q+=(ptrdiff_t) GetPixelChannels(image);
2382 range=GetQuantumRange(quantum_info->depth);
2383 for (x=0; x < (ssize_t) number_pixels; x++)
2385 p=PushQuantumPixel(quantum_info,p,&pixel);
2386 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
2387 p+=(ptrdiff_t) quantum_info->pad;
2388 q+=(ptrdiff_t) GetPixelChannels(image);
2395static void ImportGrayAlphaQuantum(
const Image *image,QuantumInfo *quantum_info,
2396 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
2397 Quantum *magick_restrict q)
2408 assert(image != (Image *) NULL);
2409 assert(image->signature == MagickCoreSignature);
2410 switch (quantum_info->depth)
2418 for (x=((ssize_t) number_pixels-3); x > 0; x-=4)
2420 for (bit=0; bit < 8; bit+=2)
2422 pixel=(
unsigned char) (((*p) & (1 << (7-bit))) != 0 ? 0x00 : 0x01);
2423 SetPixelGray(image,(Quantum) (pixel == 0 ? 0 : QuantumRange),q);
2424 SetPixelAlpha(image,((*p) & (1UL << (
unsigned char) (6-bit))) == 0 ?
2425 TransparentAlpha : OpaqueAlpha,q);
2426 q+=(ptrdiff_t) GetPixelChannels(image);
2430 if ((number_pixels % 4) != 0)
2431 for (bit=3; bit >= (ssize_t) (4-(number_pixels % 4)); bit-=2)
2433 pixel=(
unsigned char) (((*p) & (1 << (7-bit))) != 0 ? 0x00 : 0x01);
2434 SetPixelGray(image,(Quantum) (pixel != 0 ? 0 : QuantumRange),q);
2435 SetPixelAlpha(image,((*p) & (1UL << (
unsigned char) (6-bit))) == 0 ?
2436 TransparentAlpha : OpaqueAlpha,q);
2437 q+=(ptrdiff_t) GetPixelChannels(image);
2448 range=GetQuantumRange(quantum_info->depth);
2449 for (x=0; x < (ssize_t) number_pixels; x++)
2451 pixel=(
unsigned char) ((*p >> 4) & 0xf);
2452 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
2453 pixel=(
unsigned char) ((*p) & 0xf);
2454 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
2456 q+=(ptrdiff_t) GetPixelChannels(image);
2465 for (x=0; x < (ssize_t) number_pixels; x++)
2467 p=PushCharPixel(p,&pixel);
2468 SetPixelGray(image,ScaleCharToQuantum(pixel),q);
2469 p=PushCharPixel(p,&pixel);
2470 SetPixelAlpha(image,ScaleCharToQuantum(pixel),q);
2471 p+=(ptrdiff_t) quantum_info->pad;
2472 q+=(ptrdiff_t) GetPixelChannels(image);
2481 range=GetQuantumRange(quantum_info->depth);
2482 for (x=0; x < (ssize_t) number_pixels; x++)
2484 p=PushQuantumPixel(quantum_info,p,&pixel);
2485 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
2486 p=PushQuantumPixel(quantum_info,p,&pixel);
2487 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
2488 p+=(ptrdiff_t) quantum_info->pad;
2489 q+=(ptrdiff_t) GetPixelChannels(image);
2498 range=GetQuantumRange(quantum_info->depth);
2499 for (x=0; x < (ssize_t) number_pixels; x++)
2501 p=PushQuantumPixel(quantum_info,p,&pixel);
2502 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
2503 p=PushQuantumPixel(quantum_info,p,&pixel);
2504 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
2505 p+=(ptrdiff_t) quantum_info->pad;
2506 q+=(ptrdiff_t) GetPixelChannels(image);
2515 if (quantum_info->format == FloatingPointQuantumFormat)
2517 for (x=0; x < (ssize_t) number_pixels; x++)
2519 p=PushShortPixel(quantum_info->endian,p,&pixel);
2520 SetPixelGray(image,ClampToQuantum((
double) QuantumRange*(
double)
2521 HalfToSinglePrecision(pixel)),q);
2522 p=PushShortPixel(quantum_info->endian,p,&pixel);
2523 SetPixelAlpha(image,ClampToQuantum((
double) QuantumRange*(
double)
2524 HalfToSinglePrecision(pixel)),q);
2525 p+=(ptrdiff_t) quantum_info->pad;
2526 q+=(ptrdiff_t) GetPixelChannels(image);
2530 for (x=0; x < (ssize_t) number_pixels; x++)
2532 p=PushShortPixel(quantum_info->endian,p,&pixel);
2533 SetPixelGray(image,ScaleShortToQuantum(pixel),q);
2534 p=PushShortPixel(quantum_info->endian,p,&pixel);
2535 SetPixelAlpha(image,ScaleShortToQuantum(pixel),q);
2536 p+=(ptrdiff_t) quantum_info->pad;
2537 q+=(ptrdiff_t) GetPixelChannels(image);
2543 if (quantum_info->format == FloatingPointQuantumFormat)
2548 for (x=0; x < (ssize_t) number_pixels; x++)
2550 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
2551 SetPixelGray(image,ClampToQuantum(pixel),q);
2552 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
2553 SetPixelAlpha(image,ClampToQuantum(pixel),q);
2554 p+=(ptrdiff_t) quantum_info->pad;
2555 q+=(ptrdiff_t) GetPixelChannels(image);
2564 for (x=0; x < (ssize_t) number_pixels; x++)
2566 p=PushLongPixel(quantum_info->endian,p,&pixel);
2567 SetPixelGray(image,ScaleLongToQuantum(pixel),q);
2568 p=PushLongPixel(quantum_info->endian,p,&pixel);
2569 SetPixelAlpha(image,ScaleLongToQuantum(pixel),q);
2570 p+=(ptrdiff_t) quantum_info->pad;
2571 q+=(ptrdiff_t) GetPixelChannels(image);
2578 if (quantum_info->format == FloatingPointQuantumFormat)
2583 for (x=0; x < (ssize_t) number_pixels; x++)
2585 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
2586 SetPixelGray(image,ClampToQuantum(pixel),q);
2587 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
2588 SetPixelAlpha(image,ClampToQuantum(pixel),q);
2589 p+=(ptrdiff_t) quantum_info->pad;
2590 q+=(ptrdiff_t) GetPixelChannels(image);
2598 if (quantum_info->format == FloatingPointQuantumFormat)
2603 for (x=0; x < (ssize_t) number_pixels; x++)
2605 p=PushDoublePixel(quantum_info,p,&pixel);
2606 SetPixelGray(image,ClampToQuantum(pixel),q);
2607 p=PushDoublePixel(quantum_info,p,&pixel);
2608 SetPixelAlpha(image,ClampToQuantum(pixel),q);
2609 p+=(ptrdiff_t) quantum_info->pad;
2610 q+=(ptrdiff_t) GetPixelChannels(image);
2621 range=GetQuantumRange(quantum_info->depth);
2622 for (x=0; x < (ssize_t) number_pixels; x++)
2624 p=PushQuantumPixel(quantum_info,p,&pixel);
2625 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
2626 p=PushQuantumPixel(quantum_info,p,&pixel);
2627 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
2628 p+=(ptrdiff_t) quantum_info->pad;
2629 q+=(ptrdiff_t) GetPixelChannels(image);
2636static void ImportIndexQuantum(
const Image *image,QuantumInfo *quantum_info,
2637 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
2638 Quantum *magick_restrict q,ExceptionInfo *exception)
2649 if (image->storage_class != PseudoClass)
2651 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2652 "ColormappedImageRequired",
"`%s'",image->filename);
2655 range_exception=MagickFalse;
2656 switch (quantum_info->depth)
2663 for (x=0; x < ((ssize_t) number_pixels-7); x+=8)
2665 for (bit=0; bit < 8; bit++)
2667 if (quantum_info->min_is_white == MagickFalse)
2668 pixel=(
unsigned char) (((*p) & (1 << (7-bit))) == 0 ?
2671 pixel=(
unsigned char) (((*p) & (1 << (7-bit))) != 0 ?
2673 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),
2675 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
2676 GetPixelIndex(image,q),q);
2677 q+=(ptrdiff_t) GetPixelChannels(image);
2681 for (bit=0; bit < (ssize_t) (number_pixels % 8); bit++)
2683 if (quantum_info->min_is_white == MagickFalse)
2684 pixel=(
unsigned char) (((*p) & (1 << (7-bit))) == 0 ? 0x00 : 0x01);
2686 pixel=(
unsigned char) (((*p) & (1 << (7-bit))) != 0 ? 0x00 : 0x01);
2687 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2688 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
2689 GetPixelIndex(image,q),q);
2690 q+=(ptrdiff_t) GetPixelChannels(image);
2699 for (x=0; x < ((ssize_t) number_pixels-1); x+=2)
2701 pixel=(
unsigned char) ((*p >> 4) & 0xf);
2702 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2703 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
2704 GetPixelIndex(image,q),q);
2705 q+=(ptrdiff_t) GetPixelChannels(image);
2706 pixel=(
unsigned char) ((*p) & 0xf);
2707 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2708 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
2709 GetPixelIndex(image,q),q);
2711 q+=(ptrdiff_t) GetPixelChannels(image);
2713 for (bit=0; bit < (ssize_t) (number_pixels % 2); bit++)
2715 pixel=(
unsigned char) ((*p++ >> 4) & 0xf);
2716 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2717 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
2718 GetPixelIndex(image,q),q);
2719 q+=(ptrdiff_t) GetPixelChannels(image);
2728 for (x=0; x < (ssize_t) number_pixels; x++)
2730 p=PushCharPixel(p,&pixel);
2731 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2732 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
2733 GetPixelIndex(image,q),q);
2734 p+=(ptrdiff_t) quantum_info->pad;
2735 q+=(ptrdiff_t) GetPixelChannels(image);
2744 if (quantum_info->format == FloatingPointQuantumFormat)
2746 for (x=0; x < (ssize_t) number_pixels; x++)
2748 p=PushShortPixel(quantum_info->endian,p,&pixel);
2749 SetPixelIndex(image,PushColormapIndex(image,(
size_t)
2750 ClampToQuantum((
double) QuantumRange*(
double)
2751 HalfToSinglePrecision(pixel)),&range_exception),q);
2752 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
2753 GetPixelIndex(image,q),q);
2754 p+=(ptrdiff_t) quantum_info->pad;
2755 q+=(ptrdiff_t) GetPixelChannels(image);
2759 for (x=0; x < (ssize_t) number_pixels; x++)
2761 p=PushShortPixel(quantum_info->endian,p,&pixel);
2762 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2763 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
2764 GetPixelIndex(image,q),q);
2765 p+=(ptrdiff_t) quantum_info->pad;
2766 q+=(ptrdiff_t) GetPixelChannels(image);
2772 if (quantum_info->format == FloatingPointQuantumFormat)
2777 for (x=0; x < (ssize_t) number_pixels; x++)
2779 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
2780 SetPixelIndex(image,PushColormapIndex(image,(
size_t)
2781 ClampToQuantum(pixel),&range_exception),q);
2782 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
2783 GetPixelIndex(image,q),q);
2784 p+=(ptrdiff_t) quantum_info->pad;
2785 q+=(ptrdiff_t) GetPixelChannels(image);
2794 for (x=0; x < (ssize_t) number_pixels; x++)
2796 p=PushLongPixel(quantum_info->endian,p,&pixel);
2797 SetPixelIndex(image,PushColormapIndex(image,pixel,
2798 &range_exception),q);
2799 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
2800 GetPixelIndex(image,q),q);
2801 p+=(ptrdiff_t) quantum_info->pad;
2802 q+=(ptrdiff_t) GetPixelChannels(image);
2809 if (quantum_info->format == FloatingPointQuantumFormat)
2814 for (x=0; x < (ssize_t) number_pixels; x++)
2816 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
2817 SetPixelIndex(image,PushColormapIndex(image,(
size_t)
2818 ClampToQuantum(pixel),&range_exception),q);
2819 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
2820 GetPixelIndex(image,q),q);
2821 p+=(ptrdiff_t) quantum_info->pad;
2822 q+=(ptrdiff_t) GetPixelChannels(image);
2830 if (quantum_info->format == FloatingPointQuantumFormat)
2835 for (x=0; x < (ssize_t) number_pixels; x++)
2837 p=PushDoublePixel(quantum_info,p,&pixel);
2838 SetPixelIndex(image,PushColormapIndex(image,(
size_t)
2839 ClampToQuantum(pixel),&range_exception),q);
2840 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
2841 GetPixelIndex(image,q),q);
2842 p+=(ptrdiff_t) quantum_info->pad;
2843 q+=(ptrdiff_t) GetPixelChannels(image);
2854 for (x=0; x < (ssize_t) number_pixels; x++)
2856 p=PushQuantumPixel(quantum_info,p,&pixel);
2857 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2858 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
2859 GetPixelIndex(image,q),q);
2860 p+=(ptrdiff_t) quantum_info->pad;
2861 q+=(ptrdiff_t) GetPixelChannels(image);
2866 if (range_exception != MagickFalse)
2867 (void) ThrowMagickException(exception,GetMagickModule(),CorruptImageError,
2868 "InvalidColormapIndex",
"`%s'",image->filename);
2871static void ImportIndexAlphaQuantum(
const Image *image,
2872 QuantumInfo *quantum_info,
const MagickSizeType number_pixels,
2873 const unsigned char *magick_restrict p,Quantum *magick_restrict q,
2874 ExceptionInfo *exception)
2888 if (image->storage_class != PseudoClass)
2890 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2891 "ColormappedImageRequired",
"`%s'",image->filename);
2894 range_exception=MagickFalse;
2895 switch (quantum_info->depth)
2902 for (x=((ssize_t) number_pixels-3); x > 0; x-=4)
2904 for (bit=0; bit < 8; bit+=2)
2906 if (quantum_info->min_is_white == MagickFalse)
2907 pixel=(
unsigned char) (((*p) & (1 << (7-bit))) == 0 ? 0x00 : 0x01);
2909 pixel=(
unsigned char) (((*p) & (1 << (7-bit))) != 0 ? 0x00 : 0x01);
2910 SetPixelGray(image,(Quantum) (pixel == 0 ? 0 : QuantumRange),q);
2911 SetPixelAlpha(image,((*p) & (1UL << (
unsigned char) (6-bit))) == 0 ?
2912 TransparentAlpha : OpaqueAlpha,q);
2913 SetPixelIndex(image,(Quantum) (pixel == 0 ? 0 : 1),q);
2914 q+=(ptrdiff_t) GetPixelChannels(image);
2917 if ((number_pixels % 4) != 0)
2918 for (bit=3; bit >= (ssize_t) (4-(number_pixels % 4)); bit-=2)
2920 if (quantum_info->min_is_white == MagickFalse)
2921 pixel=(
unsigned char) (((*p) & (1 << (7-bit))) == 0 ? 0x00 : 0x01);
2923 pixel=(
unsigned char) (((*p) & (1 << (7-bit))) != 0 ? 0x00 : 0x01);
2924 SetPixelIndex(image,(Quantum) (pixel == 0 ? 0 : 1),q);
2925 SetPixelGray(image,(Quantum) (pixel == 0 ? 0 : QuantumRange),q);
2926 SetPixelAlpha(image,((*p) & (1UL << (
unsigned char) (6-bit))) == 0 ?
2927 TransparentAlpha : OpaqueAlpha,q);
2928 q+=(ptrdiff_t) GetPixelChannels(image);
2937 range=GetQuantumRange(quantum_info->depth);
2938 for (x=0; x < (ssize_t) number_pixels; x++)
2940 pixel=(
unsigned char) ((*p >> 4) & 0xf);
2941 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2942 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
2943 GetPixelIndex(image,q),q);
2944 pixel=(
unsigned char) ((*p) & 0xf);
2945 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
2947 q+=(ptrdiff_t) GetPixelChannels(image);
2956 for (x=0; x < (ssize_t) number_pixels; x++)
2958 p=PushCharPixel(p,&pixel);
2959 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2960 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
2961 GetPixelIndex(image,q),q);
2962 p=PushCharPixel(p,&pixel);
2963 SetPixelAlpha(image,ScaleCharToQuantum(pixel),q);
2964 p+=(ptrdiff_t) quantum_info->pad;
2965 q+=(ptrdiff_t) GetPixelChannels(image);
2974 if (quantum_info->format == FloatingPointQuantumFormat)
2976 for (x=0; x < (ssize_t) number_pixels; x++)
2978 p=PushShortPixel(quantum_info->endian,p,&pixel);
2979 SetPixelIndex(image,PushColormapIndex(image,(
size_t)
2980 ClampToQuantum((
double) QuantumRange*(
double)
2981 HalfToSinglePrecision(pixel)),&range_exception),q);
2982 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
2983 GetPixelIndex(image,q),q);
2984 p=PushShortPixel(quantum_info->endian,p,&pixel);
2985 SetPixelAlpha(image,ClampToQuantum((
double) QuantumRange*(
double)
2986 HalfToSinglePrecision(pixel)),q);
2987 p+=(ptrdiff_t) quantum_info->pad;
2988 q+=(ptrdiff_t) GetPixelChannels(image);
2992 for (x=0; x < (ssize_t) number_pixels; x++)
2994 p=PushShortPixel(quantum_info->endian,p,&pixel);
2995 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2996 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
2997 GetPixelIndex(image,q),q);
2998 p=PushShortPixel(quantum_info->endian,p,&pixel);
2999 SetPixelAlpha(image,ScaleShortToQuantum(pixel),q);
3000 p+=(ptrdiff_t) quantum_info->pad;
3001 q+=(ptrdiff_t) GetPixelChannels(image);
3007 if (quantum_info->format == FloatingPointQuantumFormat)
3012 for (x=0; x < (ssize_t) number_pixels; x++)
3014 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
3015 SetPixelIndex(image,PushColormapIndex(image,(
size_t)
3016 ClampToQuantum(pixel),&range_exception),q);
3017 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
3018 GetPixelIndex(image,q),q);
3019 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
3020 SetPixelAlpha(image,ClampToQuantum(pixel),q);
3021 p+=(ptrdiff_t) quantum_info->pad;
3022 q+=(ptrdiff_t) GetPixelChannels(image);
3031 for (x=0; x < (ssize_t) number_pixels; x++)
3033 p=PushLongPixel(quantum_info->endian,p,&pixel);
3034 SetPixelIndex(image,PushColormapIndex(image,pixel,
3035 &range_exception),q);
3036 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
3037 GetPixelIndex(image,q),q);
3038 p=PushLongPixel(quantum_info->endian,p,&pixel);
3039 SetPixelAlpha(image,ScaleLongToQuantum(pixel),q);
3040 p+=(ptrdiff_t) quantum_info->pad;
3041 q+=(ptrdiff_t) GetPixelChannels(image);
3048 if (quantum_info->format == FloatingPointQuantumFormat)
3053 for (x=0; x < (ssize_t) number_pixels; x++)
3055 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
3056 SetPixelIndex(image,PushColormapIndex(image,(
size_t)
3057 ClampToQuantum(pixel),&range_exception),q);
3058 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
3059 GetPixelIndex(image,q),q);
3060 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
3061 SetPixelAlpha(image,ClampToQuantum(pixel),q);
3062 p+=(ptrdiff_t) quantum_info->pad;
3063 q+=(ptrdiff_t) GetPixelChannels(image);
3071 if (quantum_info->format == FloatingPointQuantumFormat)
3076 for (x=0; x < (ssize_t) number_pixels; x++)
3078 p=PushDoublePixel(quantum_info,p,&pixel);
3079 SetPixelIndex(image,PushColormapIndex(image,(
size_t)
3080 ClampToQuantum(pixel),&range_exception),q);
3081 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
3082 GetPixelIndex(image,q),q);
3083 p=PushDoublePixel(quantum_info,p,&pixel);
3084 SetPixelAlpha(image,ClampToQuantum(pixel),q);
3085 p+=(ptrdiff_t) quantum_info->pad;
3086 q+=(ptrdiff_t) GetPixelChannels(image);
3097 range=GetQuantumRange(quantum_info->depth);
3098 for (x=0; x < (ssize_t) number_pixels; x++)
3100 p=PushQuantumPixel(quantum_info,p,&pixel);
3101 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
3102 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
3103 GetPixelIndex(image,q),q);
3104 p=PushQuantumPixel(quantum_info,p,&pixel);
3105 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
3106 p+=(ptrdiff_t) quantum_info->pad;
3107 q+=(ptrdiff_t) GetPixelChannels(image);
3112 if (range_exception != MagickFalse)
3113 (void) ThrowMagickException(exception,GetMagickModule(),CorruptImageError,
3114 "InvalidColormapIndex",
"`%s'",image->filename);
3117static void ImportMultispectralQuantum(
const Image *image,
3118 QuantumInfo *quantum_info,
const MagickSizeType number_pixels,
3119 const unsigned char *magick_restrict p,Quantum *magick_restrict q,
3120 ExceptionInfo *exception)
3129 if (image->number_meta_channels == 0)
3131 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
3132 "MultispectralImageRequired",
"`%s'",image->filename);
3135 if (quantum_info->meta_channel != 0)
3137 ImportPixelChannel(image,quantum_info,number_pixels,p,q,
3138 (PixelChannel) (MetaPixelChannels+quantum_info->meta_channel-1));
3141 switch (quantum_info->depth)
3148 for (x=0; x < (ssize_t) number_pixels; x++)
3150 for (i=0; i < (ssize_t) GetImageChannels(image); i++)
3152 p=PushCharPixel(p,&pixel);
3153 q[i]=ScaleCharToQuantum(pixel);
3155 p+=(ptrdiff_t) quantum_info->pad;
3156 q+=(ptrdiff_t) GetPixelChannels(image);
3165 if (quantum_info->format == FloatingPointQuantumFormat)
3167 for (x=0; x < (ssize_t) number_pixels; x++)
3169 for (i=0; i < (ssize_t) GetImageChannels(image); i++)
3171 p=PushShortPixel(quantum_info->endian,p,&pixel);
3172 q[i]=ClampToQuantum((
double) QuantumRange*(
double)HalfToSinglePrecision(pixel));
3174 p+=(ptrdiff_t) quantum_info->pad;
3175 q+=(ptrdiff_t) GetPixelChannels(image);
3179 for (x=0; x < (ssize_t) number_pixels; x++)
3181 for (i=0; i < (ssize_t) GetImageChannels(image); i++)
3183 p=PushShortPixel(quantum_info->endian,p,&pixel);
3184 q[i]=ScaleShortToQuantum(pixel);
3186 p+=(ptrdiff_t) quantum_info->pad;
3187 q+=(ptrdiff_t) GetPixelChannels(image);
3193 if (quantum_info->format == FloatingPointQuantumFormat)
3198 for (x=0; x < (ssize_t) number_pixels; x++)
3200 for (i=0; i < (ssize_t) GetImageChannels(image); i++)
3202 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
3203 q[i]=ClampToQuantum(pixel);
3205 p+=(ptrdiff_t) quantum_info->pad;
3206 q+=(ptrdiff_t) GetPixelChannels(image);
3215 for (x=0; x < (ssize_t) number_pixels; x++)
3217 for (i=0; i < (ssize_t) GetImageChannels(image); i++)
3219 p=PushLongPixel(quantum_info->endian,p,&pixel);
3220 q[i]=ScaleLongToQuantum(pixel);
3222 p+=(ptrdiff_t) quantum_info->pad;
3223 q+=(ptrdiff_t) GetPixelChannels(image);
3230 if (quantum_info->format == FloatingPointQuantumFormat)
3235 for (x=0; x < (ssize_t) number_pixels; x++)
3237 for (i=0; i < (ssize_t) GetImageChannels(image); i++)
3239 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
3240 q[i]=ClampToQuantum(pixel);
3242 p+=(ptrdiff_t) quantum_info->pad;
3243 q+=(ptrdiff_t) GetPixelChannels(image);
3251 if (quantum_info->format == FloatingPointQuantumFormat)
3256 for (x=0; x < (ssize_t) number_pixels; x++)
3258 for (i=0; i < (ssize_t) GetImageChannels(image); i++)
3260 p=PushDoublePixel(quantum_info,p,&pixel);
3261 q[i]=ClampToQuantum(pixel);
3263 p+=(ptrdiff_t) quantum_info->pad;
3264 q+=(ptrdiff_t) GetPixelChannels(image);
3275 range=GetQuantumRange(quantum_info->depth);
3276 for (x=0; x < (ssize_t) number_pixels; x++)
3278 for (i=0; i < (ssize_t) GetImageChannels(image); i++)
3280 p=PushQuantumPixel(quantum_info,p,&pixel);
3281 q[i]=ScaleAnyToQuantum(pixel,range);
3283 q+=(ptrdiff_t) GetPixelChannels(image);
3290static void ImportOpacityQuantum(
const Image *image,QuantumInfo *quantum_info,
3291 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
3292 Quantum *magick_restrict q,ExceptionInfo* exception)
3300 if (image->alpha_trait == UndefinedPixelTrait)
3302 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
3303 "ImageDoesNotHaveAnAlphaChannel",
"`%s'",image->filename);
3306 switch (quantum_info->depth)
3313 for (x=0; x < (ssize_t) number_pixels; x++)
3315 p=PushCharPixel(p,&pixel);
3316 SetPixelOpacity(image,ScaleCharToQuantum(pixel),q);
3317 p+=(ptrdiff_t) quantum_info->pad;
3318 q+=(ptrdiff_t) GetPixelChannels(image);
3327 if (quantum_info->format == FloatingPointQuantumFormat)
3329 for (x=0; x < (ssize_t) number_pixels; x++)
3331 p=PushShortPixel(quantum_info->endian,p,&pixel);
3332 SetPixelOpacity(image,ClampToQuantum((
double) QuantumRange*(
double)
3333 HalfToSinglePrecision(pixel)),q);
3334 p+=(ptrdiff_t) quantum_info->pad;
3335 q+=(ptrdiff_t) GetPixelChannels(image);
3339 for (x=0; x < (ssize_t) number_pixels; x++)
3341 p=PushShortPixel(quantum_info->endian,p,&pixel);
3342 SetPixelOpacity(image,ScaleShortToQuantum(pixel),q);
3343 p+=(ptrdiff_t) quantum_info->pad;
3344 q+=(ptrdiff_t) GetPixelChannels(image);
3350 if (quantum_info->format == FloatingPointQuantumFormat)
3355 for (x=0; x < (ssize_t) number_pixels; x++)
3357 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
3358 SetPixelOpacity(image,ClampToQuantum(pixel),q);
3359 p+=(ptrdiff_t) quantum_info->pad;
3360 q+=(ptrdiff_t) GetPixelChannels(image);
3369 for (x=0; x < (ssize_t) number_pixels; x++)
3371 p=PushLongPixel(quantum_info->endian,p,&pixel);
3372 SetPixelOpacity(image,ScaleLongToQuantum(pixel),q);
3373 p+=(ptrdiff_t) quantum_info->pad;
3374 q+=(ptrdiff_t) GetPixelChannels(image);
3381 if (quantum_info->format == FloatingPointQuantumFormat)
3386 for (x=0; x < (ssize_t) number_pixels; x++)
3388 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
3389 SetPixelOpacity(image,ClampToQuantum(pixel),q);
3390 p+=(ptrdiff_t) quantum_info->pad;
3391 q+=(ptrdiff_t) GetPixelChannels(image);
3399 if (quantum_info->format == FloatingPointQuantumFormat)
3404 for (x=0; x < (ssize_t) number_pixels; x++)
3406 p=PushDoublePixel(quantum_info,p,&pixel);
3407 SetPixelOpacity(image,ClampToQuantum(pixel),q);
3408 p+=(ptrdiff_t) quantum_info->pad;
3409 q+=(ptrdiff_t) GetPixelChannels(image);
3420 range=GetQuantumRange(quantum_info->depth);
3421 for (x=0; x < (ssize_t) number_pixels; x++)
3423 p=PushQuantumPixel(quantum_info,p,&pixel);
3424 SetPixelOpacity(image,ScaleAnyToQuantum(pixel,range),q);
3425 p+=(ptrdiff_t) quantum_info->pad;
3426 q+=(ptrdiff_t) GetPixelChannels(image);
3433static void ImportRGBQuantum(
const Image *image,QuantumInfo *quantum_info,
3434 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
3435 Quantum *magick_restrict q)
3446 assert(image != (Image *) NULL);
3447 assert(image->signature == MagickCoreSignature);
3448 switch (quantum_info->depth)
3455 for (x=0; x < (ssize_t) number_pixels; x++)
3457 p=PushCharPixel(p,&pixel);
3458 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
3459 p=PushCharPixel(p,&pixel);
3460 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
3461 p=PushCharPixel(p,&pixel);
3462 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
3463 SetPixelAlpha(image,OpaqueAlpha,q);
3464 p+=(ptrdiff_t) quantum_info->pad;
3465 q+=(ptrdiff_t) GetPixelChannels(image);
3474 range=GetQuantumRange(quantum_info->depth);
3475 if (quantum_info->pack == MagickFalse)
3477 for (x=0; x < (ssize_t) number_pixels; x++)
3479 p=PushLongPixel(quantum_info->endian,p,&pixel);
3480 SetPixelRed(image,ScaleAnyToQuantum((pixel >> 22) & 0x3ff,range),q);
3481 SetPixelGreen(image,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,range),
3483 SetPixelBlue(image,ScaleAnyToQuantum((pixel >> 2) & 0x3ff,range),q);
3484 p+=(ptrdiff_t) quantum_info->pad;
3485 q+=(ptrdiff_t) GetPixelChannels(image);
3489 if (quantum_info->quantum == 32U)
3491 for (x=0; x < (ssize_t) number_pixels; x++)
3493 p=PushQuantumLongPixel(quantum_info,p,&pixel);
3494 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
3495 p=PushQuantumLongPixel(quantum_info,p,&pixel);
3496 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
3497 p=PushQuantumLongPixel(quantum_info,p,&pixel);
3498 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
3499 q+=(ptrdiff_t) GetPixelChannels(image);
3503 for (x=0; x < (ssize_t) number_pixels; x++)
3505 p=PushQuantumPixel(quantum_info,p,&pixel);
3506 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
3507 p=PushQuantumPixel(quantum_info,p,&pixel);
3508 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
3509 p=PushQuantumPixel(quantum_info,p,&pixel);
3510 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
3511 q+=(ptrdiff_t) GetPixelChannels(image);
3517 range=GetQuantumRange(quantum_info->depth);
3518 if (quantum_info->pack == MagickFalse)
3523 for (x=0; x < (ssize_t) (3*number_pixels-1); x+=2)
3525 p=PushShortPixel(quantum_info->endian,p,&pixel);
3531 SetPixelRed(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3537 SetPixelGreen(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3543 SetPixelBlue(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3545 q+=(ptrdiff_t) GetPixelChannels(image);
3549 p=PushShortPixel(quantum_info->endian,p,&pixel);
3555 SetPixelRed(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3561 SetPixelGreen(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3567 SetPixelBlue(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3569 q+=(ptrdiff_t) GetPixelChannels(image);
3573 p+=(ptrdiff_t) quantum_info->pad;
3575 for (bit=0; bit < (ssize_t) (3*number_pixels % 2); bit++)
3577 p=PushShortPixel(quantum_info->endian,p,&pixel);
3578 switch ((x+bit) % 3)
3583 SetPixelRed(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3589 SetPixelGreen(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3595 SetPixelBlue(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3597 q+=(ptrdiff_t) GetPixelChannels(image);
3601 p+=(ptrdiff_t) quantum_info->pad;
3612 if (quantum_info->quantum == 32U)
3614 for (x=0; x < (ssize_t) number_pixels; x++)
3616 p=PushQuantumLongPixel(quantum_info,p,&pixel);
3617 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
3618 p=PushQuantumLongPixel(quantum_info,p,&pixel);
3619 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
3620 p=PushQuantumLongPixel(quantum_info,p,&pixel);
3621 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
3622 q+=(ptrdiff_t) GetPixelChannels(image);
3626 for (x=0; x < (ssize_t) number_pixels; x++)
3628 p=PushQuantumPixel(quantum_info,p,&pixel);
3629 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
3630 p=PushQuantumPixel(quantum_info,p,&pixel);
3631 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
3632 p=PushQuantumPixel(quantum_info,p,&pixel);
3633 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
3634 q+=(ptrdiff_t) GetPixelChannels(image);
3644 if (quantum_info->format == FloatingPointQuantumFormat)
3646 for (x=0; x < (ssize_t) number_pixels; x++)
3648 p=PushShortPixel(quantum_info->endian,p,&pixel);
3649 SetPixelRed(image,ClampToQuantum((
double) QuantumRange*(
double)
3650 HalfToSinglePrecision(pixel)),q);
3651 p=PushShortPixel(quantum_info->endian,p,&pixel);
3652 SetPixelGreen(image,ClampToQuantum((
double) QuantumRange*(
double)
3653 HalfToSinglePrecision(pixel)),q);
3654 p=PushShortPixel(quantum_info->endian,p,&pixel);
3655 SetPixelBlue(image,ClampToQuantum((
double) QuantumRange*(
double)
3656 HalfToSinglePrecision(pixel)),q);
3657 p+=(ptrdiff_t) quantum_info->pad;
3658 q+=(ptrdiff_t) GetPixelChannels(image);
3662 for (x=0; x < (ssize_t) number_pixels; x++)
3664 p=PushShortPixel(quantum_info->endian,p,&pixel);
3665 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
3666 p=PushShortPixel(quantum_info->endian,p,&pixel);
3667 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
3668 p=PushShortPixel(quantum_info->endian,p,&pixel);
3669 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
3670 p+=(ptrdiff_t) quantum_info->pad;
3671 q+=(ptrdiff_t) GetPixelChannels(image);
3677 if (quantum_info->format == FloatingPointQuantumFormat)
3682 for (x=0; x < (ssize_t) number_pixels; x++)
3684 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
3685 SetPixelRed(image,ClampToQuantum(pixel),q);
3686 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
3687 SetPixelGreen(image,ClampToQuantum(pixel),q);
3688 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
3689 SetPixelBlue(image,ClampToQuantum(pixel),q);
3690 p+=(ptrdiff_t) quantum_info->pad;
3691 q+=(ptrdiff_t) GetPixelChannels(image);
3700 for (x=0; x < (ssize_t) number_pixels; x++)
3702 p=PushLongPixel(quantum_info->endian,p,&pixel);
3703 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
3704 p=PushLongPixel(quantum_info->endian,p,&pixel);
3705 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
3706 p=PushLongPixel(quantum_info->endian,p,&pixel);
3707 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
3708 p+=(ptrdiff_t) quantum_info->pad;
3709 q+=(ptrdiff_t) GetPixelChannels(image);
3716 if (quantum_info->format == FloatingPointQuantumFormat)
3721 for (x=0; x < (ssize_t) number_pixels; x++)
3723 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
3724 SetPixelRed(image,ClampToQuantum(pixel),q);
3725 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
3726 SetPixelGreen(image,ClampToQuantum(pixel),q);
3727 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
3728 SetPixelBlue(image,ClampToQuantum(pixel),q);
3729 p+=(ptrdiff_t) quantum_info->pad;
3730 q+=(ptrdiff_t) GetPixelChannels(image);
3738 if (quantum_info->format == FloatingPointQuantumFormat)
3743 for (x=0; x < (ssize_t) number_pixels; x++)
3745 p=PushDoublePixel(quantum_info,p,&pixel);
3746 SetPixelRed(image,ClampToQuantum(pixel),q);
3747 p=PushDoublePixel(quantum_info,p,&pixel);
3748 SetPixelGreen(image,ClampToQuantum(pixel),q);
3749 p=PushDoublePixel(quantum_info,p,&pixel);
3750 SetPixelBlue(image,ClampToQuantum(pixel),q);
3751 p+=(ptrdiff_t) quantum_info->pad;
3752 q+=(ptrdiff_t) GetPixelChannels(image);
3763 range=GetQuantumRange(quantum_info->depth);
3764 for (x=0; x < (ssize_t) number_pixels; x++)
3766 p=PushQuantumPixel(quantum_info,p,&pixel);
3767 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
3768 p=PushQuantumPixel(quantum_info,p,&pixel);
3769 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
3770 p=PushQuantumPixel(quantum_info,p,&pixel);
3771 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
3772 q+=(ptrdiff_t) GetPixelChannels(image);
3779static void ImportRGBAQuantum(
const Image *image,QuantumInfo *quantum_info,
3780 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
3781 Quantum *magick_restrict q)
3789 assert(image != (Image *) NULL);
3790 assert(image->signature == MagickCoreSignature);
3791 switch (quantum_info->depth)
3798 for (x=0; x < (ssize_t) number_pixels; x++)
3800 p=PushCharPixel(p,&pixel);
3801 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
3802 p=PushCharPixel(p,&pixel);
3803 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
3804 p=PushCharPixel(p,&pixel);
3805 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
3806 p=PushCharPixel(p,&pixel);
3807 SetPixelAlpha(image,ScaleCharToQuantum(pixel),q);
3808 p+=(ptrdiff_t) quantum_info->pad;
3809 q+=(ptrdiff_t) GetPixelChannels(image);
3819 if (quantum_info->pack == MagickFalse)
3832 for (x=0; x < (ssize_t) number_pixels; x++)
3834 for (i=0; i < 4; i++)
3840 p=PushLongPixel(quantum_info->endian,p,&pixel);
3841 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
3842 (((pixel >> 22) & 0x3ff) << 6)));
3847 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
3848 (((pixel >> 12) & 0x3ff) << 6)));
3853 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
3854 (((pixel >> 2) & 0x3ff) << 6)));
3860 case 0: SetPixelRed(image,(Quantum) quantum,q);
break;
3861 case 1: SetPixelGreen(image,(Quantum) quantum,q);
break;
3862 case 2: SetPixelBlue(image,(Quantum) quantum,q);
break;
3863 case 3: SetPixelAlpha(image,(Quantum) quantum,q);
break;
3867 p+=(ptrdiff_t) quantum_info->pad;
3868 q+=(ptrdiff_t) GetPixelChannels(image);
3872 for (x=0; x < (ssize_t) number_pixels; x++)
3874 p=PushQuantumPixel(quantum_info,p,&pixel);
3875 SetPixelRed(image,ScaleShortToQuantum((
unsigned short) (pixel << 6)),q);
3876 p=PushQuantumPixel(quantum_info,p,&pixel);
3877 SetPixelGreen(image,ScaleShortToQuantum((
unsigned short) (pixel << 6)),
3879 p=PushQuantumPixel(quantum_info,p,&pixel);
3880 SetPixelBlue(image,ScaleShortToQuantum((
unsigned short) (pixel << 6)),
3882 p=PushQuantumPixel(quantum_info,p,&pixel);
3883 SetPixelAlpha(image,ScaleShortToQuantum((
unsigned short) (pixel << 6)),
3885 q+=(ptrdiff_t) GetPixelChannels(image);
3894 if (quantum_info->format == FloatingPointQuantumFormat)
3896 for (x=0; x < (ssize_t) number_pixels; x++)
3898 p=PushShortPixel(quantum_info->endian,p,&pixel);
3899 SetPixelRed(image,ClampToQuantum((
double) QuantumRange*(
double)
3900 HalfToSinglePrecision(pixel)),q);
3901 p=PushShortPixel(quantum_info->endian,p,&pixel);
3902 SetPixelGreen(image,ClampToQuantum((
double) QuantumRange*(
double)
3903 HalfToSinglePrecision(pixel)),q);
3904 p=PushShortPixel(quantum_info->endian,p,&pixel);
3905 SetPixelBlue(image,ClampToQuantum((
double) QuantumRange*(
double)
3906 HalfToSinglePrecision(pixel)),q);
3907 p=PushShortPixel(quantum_info->endian,p,&pixel);
3908 SetPixelAlpha(image,ClampToQuantum((
double) QuantumRange*(
double)
3909 HalfToSinglePrecision(pixel)),q);
3910 p+=(ptrdiff_t) quantum_info->pad;
3911 q+=(ptrdiff_t) GetPixelChannels(image);
3915 for (x=0; x < (ssize_t) number_pixels; x++)
3917 p=PushShortPixel(quantum_info->endian,p,&pixel);
3918 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
3919 p=PushShortPixel(quantum_info->endian,p,&pixel);
3920 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
3921 p=PushShortPixel(quantum_info->endian,p,&pixel);
3922 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
3923 p=PushShortPixel(quantum_info->endian,p,&pixel);
3924 SetPixelAlpha(image,ScaleShortToQuantum(pixel),q);
3925 p+=(ptrdiff_t) quantum_info->pad;
3926 q+=(ptrdiff_t) GetPixelChannels(image);
3932 if (quantum_info->format == FloatingPointQuantumFormat)
3937 for (x=0; x < (ssize_t) number_pixels; x++)
3939 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
3940 SetPixelRed(image,ClampToQuantum(pixel),q);
3941 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
3942 SetPixelGreen(image,ClampToQuantum(pixel),q);
3943 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
3944 SetPixelBlue(image,ClampToQuantum(pixel),q);
3945 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
3946 SetPixelAlpha(image,ClampToQuantum(pixel),q);
3947 p+=(ptrdiff_t) quantum_info->pad;
3948 q+=(ptrdiff_t) GetPixelChannels(image);
3957 for (x=0; x < (ssize_t) number_pixels; x++)
3959 p=PushLongPixel(quantum_info->endian,p,&pixel);
3960 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
3961 p=PushLongPixel(quantum_info->endian,p,&pixel);
3962 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
3963 p=PushLongPixel(quantum_info->endian,p,&pixel);
3964 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
3965 p=PushLongPixel(quantum_info->endian,p,&pixel);
3966 SetPixelAlpha(image,ScaleLongToQuantum(pixel),q);
3967 p+=(ptrdiff_t) quantum_info->pad;
3968 q+=(ptrdiff_t) GetPixelChannels(image);
3975 if (quantum_info->format == FloatingPointQuantumFormat)
3980 for (x=0; x < (ssize_t) number_pixels; x++)
3982 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
3983 SetPixelRed(image,ClampToQuantum(pixel),q);
3984 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
3985 SetPixelGreen(image,ClampToQuantum(pixel),q);
3986 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
3987 SetPixelBlue(image,ClampToQuantum(pixel),q);
3988 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
3989 SetPixelAlpha(image,ClampToQuantum(pixel),q);
3990 p+=(ptrdiff_t) quantum_info->pad;
3991 q+=(ptrdiff_t) GetPixelChannels(image);
3999 if (quantum_info->format == FloatingPointQuantumFormat)
4004 for (x=0; x < (ssize_t) number_pixels; x++)
4006 p=PushDoublePixel(quantum_info,p,&pixel);
4007 SetPixelRed(image,ClampToQuantum(pixel),q);
4008 p=PushDoublePixel(quantum_info,p,&pixel);
4009 SetPixelGreen(image,ClampToQuantum(pixel),q);
4010 p=PushDoublePixel(quantum_info,p,&pixel);
4011 SetPixelBlue(image,ClampToQuantum(pixel),q);
4012 p=PushDoublePixel(quantum_info,p,&pixel);
4013 SetPixelAlpha(image,ClampToQuantum(pixel),q);
4014 p+=(ptrdiff_t) quantum_info->pad;
4015 q+=(ptrdiff_t) GetPixelChannels(image);
4026 range=GetQuantumRange(quantum_info->depth);
4027 for (x=0; x < (ssize_t) number_pixels; x++)
4029 p=PushQuantumPixel(quantum_info,p,&pixel);
4030 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
4031 p=PushQuantumPixel(quantum_info,p,&pixel);
4032 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
4033 p=PushQuantumPixel(quantum_info,p,&pixel);
4034 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
4035 p=PushQuantumPixel(quantum_info,p,&pixel);
4036 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
4037 q+=(ptrdiff_t) GetPixelChannels(image);
4044static void ImportRGBOQuantum(
const Image *image,QuantumInfo *quantum_info,
4045 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
4046 Quantum *magick_restrict q)
4054 assert(image != (Image *) NULL);
4055 assert(image->signature == MagickCoreSignature);
4056 switch (quantum_info->depth)
4063 for (x=0; x < (ssize_t) number_pixels; x++)
4065 p=PushCharPixel(p,&pixel);
4066 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
4067 p=PushCharPixel(p,&pixel);
4068 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
4069 p=PushCharPixel(p,&pixel);
4070 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
4071 p=PushCharPixel(p,&pixel);
4072 SetPixelOpacity(image,ScaleCharToQuantum(pixel),q);
4073 p+=(ptrdiff_t) quantum_info->pad;
4074 q+=(ptrdiff_t) GetPixelChannels(image);
4084 if (quantum_info->pack == MagickFalse)
4097 for (x=0; x < (ssize_t) number_pixels; x++)
4099 for (i=0; i < 4; i++)
4105 p=PushLongPixel(quantum_info->endian,p,&pixel);
4106 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
4107 (((pixel >> 22) & 0x3ff) << 6)));
4112 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
4113 (((pixel >> 12) & 0x3ff) << 6)));
4118 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
4119 (((pixel >> 2) & 0x3ff) << 6)));
4125 case 0: SetPixelRed(image,(Quantum) quantum,q);
break;
4126 case 1: SetPixelGreen(image,(Quantum) quantum,q);
break;
4127 case 2: SetPixelBlue(image,(Quantum) quantum,q);
break;
4128 case 3: SetPixelOpacity(image,(Quantum) quantum,q);
break;
4132 p+=(ptrdiff_t) quantum_info->pad;
4133 q+=(ptrdiff_t) GetPixelChannels(image);
4137 for (x=0; x < (ssize_t) number_pixels; x++)
4139 p=PushQuantumPixel(quantum_info,p,&pixel);
4140 SetPixelRed(image,ScaleShortToQuantum((
unsigned short) (pixel << 6)),q);
4141 p=PushQuantumPixel(quantum_info,p,&pixel);
4142 SetPixelGreen(image,ScaleShortToQuantum((
unsigned short) (pixel << 6)),
4144 p=PushQuantumPixel(quantum_info,p,&pixel);
4145 SetPixelBlue(image,ScaleShortToQuantum((
unsigned short) (pixel << 6)),
4147 p=PushQuantumPixel(quantum_info,p,&pixel);
4148 SetPixelOpacity(image,ScaleShortToQuantum((
unsigned short) (pixel << 6)),
4150 q+=(ptrdiff_t) GetPixelChannels(image);
4159 if (quantum_info->format == FloatingPointQuantumFormat)
4161 for (x=0; x < (ssize_t) number_pixels; x++)
4163 p=PushShortPixel(quantum_info->endian,p,&pixel);
4164 SetPixelRed(image,ClampToQuantum((
double) QuantumRange*(
double)
4165 HalfToSinglePrecision(pixel)),q);
4166 p=PushShortPixel(quantum_info->endian,p,&pixel);
4167 SetPixelGreen(image,ClampToQuantum((
double) QuantumRange*(
double)
4168 HalfToSinglePrecision(pixel)),q);
4169 p=PushShortPixel(quantum_info->endian,p,&pixel);
4170 SetPixelBlue(image,ClampToQuantum((
double) QuantumRange*(
double)
4171 HalfToSinglePrecision(pixel)),q);
4172 p=PushShortPixel(quantum_info->endian,p,&pixel);
4173 SetPixelOpacity(image,ClampToQuantum((
double) QuantumRange*(
double)
4174 HalfToSinglePrecision(pixel)),q);
4175 p+=(ptrdiff_t) quantum_info->pad;
4176 q+=(ptrdiff_t) GetPixelChannels(image);
4180 for (x=0; x < (ssize_t) number_pixels; x++)
4182 p=PushShortPixel(quantum_info->endian,p,&pixel);
4183 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
4184 p=PushShortPixel(quantum_info->endian,p,&pixel);
4185 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
4186 p=PushShortPixel(quantum_info->endian,p,&pixel);
4187 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
4188 p=PushShortPixel(quantum_info->endian,p,&pixel);
4189 SetPixelOpacity(image,ScaleShortToQuantum(pixel),q);
4190 p+=(ptrdiff_t) quantum_info->pad;
4191 q+=(ptrdiff_t) GetPixelChannels(image);
4197 if (quantum_info->format == FloatingPointQuantumFormat)
4202 for (x=0; x < (ssize_t) number_pixels; x++)
4204 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
4205 SetPixelRed(image,ClampToQuantum(pixel),q);
4206 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
4207 SetPixelGreen(image,ClampToQuantum(pixel),q);
4208 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
4209 SetPixelBlue(image,ClampToQuantum(pixel),q);
4210 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
4211 SetPixelOpacity(image,ClampToQuantum(pixel),q);
4212 p+=(ptrdiff_t) quantum_info->pad;
4213 q+=(ptrdiff_t) GetPixelChannels(image);
4222 for (x=0; x < (ssize_t) number_pixels; x++)
4224 p=PushLongPixel(quantum_info->endian,p,&pixel);
4225 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
4226 p=PushLongPixel(quantum_info->endian,p,&pixel);
4227 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
4228 p=PushLongPixel(quantum_info->endian,p,&pixel);
4229 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
4230 p=PushLongPixel(quantum_info->endian,p,&pixel);
4231 SetPixelOpacity(image,ScaleLongToQuantum(pixel),q);
4232 p+=(ptrdiff_t) quantum_info->pad;
4233 q+=(ptrdiff_t) GetPixelChannels(image);
4240 if (quantum_info->format == FloatingPointQuantumFormat)
4245 for (x=0; x < (ssize_t) number_pixels; x++)
4247 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
4248 SetPixelRed(image,ClampToQuantum(pixel),q);
4249 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
4250 SetPixelGreen(image,ClampToQuantum(pixel),q);
4251 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
4252 SetPixelBlue(image,ClampToQuantum(pixel),q);
4253 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
4254 SetPixelOpacity(image,ClampToQuantum(pixel),q);
4255 p+=(ptrdiff_t) quantum_info->pad;
4256 q+=(ptrdiff_t) GetPixelChannels(image);
4264 if (quantum_info->format == FloatingPointQuantumFormat)
4269 for (x=0; x < (ssize_t) number_pixels; x++)
4271 p=PushDoublePixel(quantum_info,p,&pixel);
4272 SetPixelRed(image,ClampToQuantum(pixel),q);
4273 p=PushDoublePixel(quantum_info,p,&pixel);
4274 SetPixelGreen(image,ClampToQuantum(pixel),q);
4275 p=PushDoublePixel(quantum_info,p,&pixel);
4276 SetPixelBlue(image,ClampToQuantum(pixel),q);
4277 p=PushDoublePixel(quantum_info,p,&pixel);
4278 SetPixelOpacity(image,ClampToQuantum(pixel),q);
4279 p+=(ptrdiff_t) quantum_info->pad;
4280 q+=(ptrdiff_t) GetPixelChannels(image);
4291 range=GetQuantumRange(quantum_info->depth);
4292 for (x=0; x < (ssize_t) number_pixels; x++)
4294 p=PushQuantumPixel(quantum_info,p,&pixel);
4295 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
4296 p=PushQuantumPixel(quantum_info,p,&pixel);
4297 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
4298 p=PushQuantumPixel(quantum_info,p,&pixel);
4299 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
4300 p=PushQuantumPixel(quantum_info,p,&pixel);
4301 SetPixelOpacity(image,ScaleAnyToQuantum(pixel,range),q);
4302 q+=(ptrdiff_t) GetPixelChannels(image);
4309MagickExport
size_t ImportQuantumPixels(
const Image *image,
4310 CacheView *image_view,QuantumInfo *quantum_info,
4311 const QuantumType quantum_type,
const unsigned char *magick_restrict pixels,
4312 ExceptionInfo *exception)
4329 assert(image != (Image *) NULL);
4330 assert(image->signature == MagickCoreSignature);
4331 assert(quantum_info != (QuantumInfo *) NULL);
4332 assert(quantum_info->signature == MagickCoreSignature);
4333 assert(exception != (ExceptionInfo *) NULL);
4334 assert(exception->signature == MagickCoreSignature);
4335 if (IsEventLogging() != MagickFalse)
4336 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",image->filename);
4337 if (pixels == (
const unsigned char *) NULL)
4338 pixels=(
const unsigned char *) GetQuantumPixels(quantum_info);
4341 if (image_view == (CacheView *) NULL)
4343 number_pixels=GetImageExtent(image);
4344 q=GetAuthenticPixelQueue(image);
4348 number_pixels=GetCacheViewExtent(image_view);
4349 q=GetCacheViewAuthenticPixelQueue(image_view);
4351 ResetQuantumState(quantum_info);
4352 extent=GetQuantumExtent(image,quantum_info,quantum_type);
4353 switch (quantum_type)
4357 ImportAlphaQuantum(image,quantum_info,number_pixels,p,q,exception);
4362 ImportBGRQuantum(image,quantum_info,number_pixels,p,q);
4367 ImportBGRAQuantum(image,quantum_info,number_pixels,p,q);
4372 ImportBGROQuantum(image,quantum_info,number_pixels,p,q);
4377 ImportBlackQuantum(image,quantum_info,number_pixels,p,q,exception);
4383 ImportPixelChannel(image,quantum_info,number_pixels,p,q,BluePixelChannel);
4388 ImportCMYKQuantum(image,quantum_info,number_pixels,p,q,exception);
4393 ImportCMYKAQuantum(image,quantum_info,number_pixels,p,q,exception);
4396 case MultispectralQuantum:
4398 ImportMultispectralQuantum(image,quantum_info,number_pixels,p,q,exception);
4403 ImportCMYKOQuantum(image,quantum_info,number_pixels,p,q,exception);
4408 ImportCbYCrYQuantum(image,quantum_info,number_pixels,p,q);
4413 ImportGrayQuantum(image,quantum_info,number_pixels,p,q);
4416 case GrayAlphaQuantum:
4418 ImportGrayAlphaQuantum(image,quantum_info,number_pixels,p,q);
4422 case MagentaQuantum:
4424 ImportPixelChannel(image,quantum_info,number_pixels,p,q,GreenPixelChannel);
4429 ImportIndexQuantum(image,quantum_info,number_pixels,p,q,exception);
4432 case IndexAlphaQuantum:
4434 ImportIndexAlphaQuantum(image,quantum_info,number_pixels,p,q,exception);
4437 case OpacityQuantum:
4439 ImportOpacityQuantum(image,quantum_info,number_pixels,p,q,exception);
4445 ImportPixelChannel(image,quantum_info,number_pixels,p,q,RedPixelChannel);
4451 ImportRGBQuantum(image,quantum_info,number_pixels,p,q);
4457 ImportRGBAQuantum(image,quantum_info,number_pixels,p,q);
4462 ImportRGBOQuantum(image,quantum_info,number_pixels,p,q);
4468 if ((quantum_type == CbYCrQuantum) || (quantum_type == CbYCrAQuantum))
4473 q=GetAuthenticPixelQueue(image);
4474 if (image_view != (CacheView *) NULL)
4475 q=GetCacheViewAuthenticPixelQueue(image_view);
4476 for (x=0; x < (ssize_t) number_pixels; x++)
4478 quantum=GetPixelRed(image,q);
4479 SetPixelRed(image,GetPixelGreen(image,q),q);
4480 SetPixelGreen(image,quantum,q);
4481 q+=(ptrdiff_t) GetPixelChannels(image);
4484 if (quantum_info->alpha_type == AssociatedQuantumAlpha)
4493 q=GetAuthenticPixelQueue(image);
4494 if (image_view != (CacheView *) NULL)
4495 q=GetCacheViewAuthenticPixelQueue(image_view);
4496 for (x=0; x < (ssize_t) number_pixels; x++)
4501 Sa=QuantumScale*(double) GetPixelAlpha(image,q);
4502 gamma=MagickSafeReciprocal(Sa);
4503 for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
4505 PixelChannel channel = GetPixelChannelChannel(image,i);
4506 PixelTrait traits = GetPixelChannelTraits(image,channel);
4507 if ((channel == AlphaPixelChannel) ||
4508 ((traits & UpdatePixelTrait) == 0))
4510 q[i]=ClampToQuantum(gamma*(
double) q[i]);
4512 q+=(ptrdiff_t) GetPixelChannels(image);