47#include "magick/studio.h"
48#include "magick/property.h"
49#include "magick/blob.h"
50#include "magick/blob-private.h"
51#include "magick/color-private.h"
52#include "magick/exception.h"
53#include "magick/exception-private.h"
54#include "magick/cache.h"
55#include "magick/constitute.h"
56#include "magick/delegate.h"
57#include "magick/geometry.h"
58#include "magick/list.h"
59#include "magick/magick.h"
60#include "magick/memory_.h"
61#include "magick/monitor.h"
62#include "magick/option.h"
63#include "magick/pixel.h"
64#include "magick/pixel-private.h"
65#include "magick/quantum.h"
66#include "magick/quantum-private.h"
67#include "magick/resource_.h"
68#include "magick/semaphore.h"
69#include "magick/statistic.h"
70#include "magick/stream.h"
71#include "magick/string_.h"
72#include "magick/utility.h"
112static inline IndexPacket PushColormapIndex(
const Image *image,
113 const size_t index,MagickBooleanType *range_exception)
115 if (index < image->colors)
116 return((IndexPacket) index);
117 *range_exception=MagickTrue;
118 return((IndexPacket) 0);
121static inline const unsigned char *PushDoublePixel(
122 const QuantumInfo *quantum_info,
const unsigned char *magick_restrict pixels,
131 if (quantum_info->endian == LSBEndian)
133 quantum[0]=(*pixels++);
134 quantum[1]=(*pixels++);
135 quantum[2]=(*pixels++);
136 quantum[3]=(*pixels++);
137 quantum[4]=(*pixels++);
138 quantum[5]=(*pixels++);
139 quantum[6]=(*pixels++);
140 quantum[7]=(*pixels++);
144 quantum[7]=(*pixels++);
145 quantum[6]=(*pixels++);
146 quantum[5]=(*pixels++);
147 quantum[4]=(*pixels++);
148 quantum[3]=(*pixels++);
149 quantum[2]=(*pixels++);
150 quantum[1]=(*pixels++);
151 quantum[0]=(*pixels++);
153 p=(
double *) quantum;
155 *pixel-=quantum_info->minimum;
156 *pixel*=quantum_info->scale;
160static inline float ScaleFloatPixel(
const QuantumInfo *quantum_info,
161 const unsigned char *quantum)
166 pixel=(double) (*((
float *) quantum));
167 pixel-=quantum_info->minimum;
168 pixel*=quantum_info->scale;
169 if (pixel < (
double) -FLT_MAX)
171 if (pixel > (
double) FLT_MAX)
176static inline const unsigned char *PushQuantumFloatPixel(
177 const QuantumInfo *quantum_info,
const unsigned char *magick_restrict pixels,
183 if (quantum_info->endian == LSBEndian)
185 quantum[0]=(*pixels++);
186 quantum[1]=(*pixels++);
187 quantum[2]=(*pixels++);
188 quantum[3]=(*pixels++);
192 quantum[3]=(*pixels++);
193 quantum[2]=(*pixels++);
194 quantum[1]=(*pixels++);
195 quantum[0]=(*pixels++);
197 *pixel=ScaleFloatPixel(quantum_info,quantum);
201static inline const unsigned char *PushQuantumFloat24Pixel(
202 const QuantumInfo *quantum_info,
const unsigned char *magick_restrict pixels,
208 if (quantum_info->endian == LSBEndian)
210 quantum[0]=(*pixels++);
211 quantum[1]=(*pixels++);
212 quantum[2]=(*pixels++);
216 quantum[2]=(*pixels++);
217 quantum[1]=(*pixels++);
218 quantum[0]=(*pixels++);
220 if ((quantum[0] | quantum[1] | quantum[2]) == 0U)
228 sign_bit=(quantum[2] & 0x80);
229 exponent=(quantum[2] & 0x7F);
231 exponent=exponent-63+127;
232 quantum[3]=sign_bit | (exponent >> 1);
233 quantum[2]=((exponent & 1) << 7) | ((quantum[1] & 0xFE) >> 1);
234 quantum[1]=((quantum[1] & 0x01) << 7) | ((quantum[0] & 0xFE) >> 1);
235 quantum[0]=(quantum[0] & 0x01) << 7;
237 *pixel=ScaleFloatPixel(quantum_info,quantum);
241static inline const unsigned char *PushQuantumPixel(
QuantumInfo *quantum_info,
242 const unsigned char *magick_restrict pixels,
unsigned int *quantum)
250 *quantum=(QuantumAny) 0;
251 for (i=(ssize_t) quantum_info->depth; i > 0L; )
253 if (quantum_info->state.bits == 0UL)
255 quantum_info->state.pixel=(*pixels++);
256 quantum_info->state.bits=8UL;
258 quantum_bits=(size_t) i;
259 if (quantum_bits > quantum_info->state.bits)
260 quantum_bits=quantum_info->state.bits;
261 i-=(ssize_t) quantum_bits;
262 quantum_info->state.bits-=quantum_bits;
263 if (quantum_bits < 64)
264 *quantum=(
unsigned int) (((MagickSizeType) *quantum << quantum_bits) |
265 ((quantum_info->state.pixel >> quantum_info->state.bits) &~
266 ((~0UL) << quantum_bits)));
271static inline const unsigned char *PushQuantumLongPixel(
272 QuantumInfo *quantum_info,
const unsigned char *magick_restrict pixels,
273 unsigned int *quantum)
282 for (i=(ssize_t) quantum_info->depth; i > 0; )
284 if (quantum_info->state.bits == 0)
286 pixels=PushLongPixel(quantum_info->endian,pixels,
287 &quantum_info->state.pixel);
288 quantum_info->state.bits=32U;
290 quantum_bits=(size_t) i;
291 if (quantum_bits > quantum_info->state.bits)
292 quantum_bits=quantum_info->state.bits;
293 *quantum|=(((quantum_info->state.pixel >> (32U-quantum_info->state.bits)) &
294 quantum_info->state.mask[quantum_bits]) << (quantum_info->depth-i));
295 i-=(ssize_t) quantum_bits;
296 quantum_info->state.bits-=quantum_bits;
301static void ImportAlphaQuantum(
QuantumInfo *quantum_info,
302 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
311 switch (quantum_info->depth)
318 for (x=0; x < (ssize_t) number_pixels; x++)
320 p=PushCharPixel(p,&pixel);
321 SetPixelAlpha(q,ScaleCharToQuantum(pixel));
322 p+=(ptrdiff_t) quantum_info->pad;
332 if (quantum_info->format == FloatingPointQuantumFormat)
334 for (x=0; x < (ssize_t) number_pixels; x++)
336 p=PushShortPixel(quantum_info->endian,p,&pixel);
337 SetPixelAlpha(q,ClampToQuantum((
double) QuantumRange*(
double)
338 HalfToSinglePrecision(pixel)));
339 p+=(ptrdiff_t) quantum_info->pad;
344 for (x=0; x < (ssize_t) number_pixels; x++)
346 p=PushShortPixel(quantum_info->endian,p,&pixel);
347 SetPixelAlpha(q,ScaleShortToQuantum(pixel));
348 p+=(ptrdiff_t) quantum_info->pad;
355 if (quantum_info->format == FloatingPointQuantumFormat)
360 for (x=0; x < (ssize_t) number_pixels; x++)
362 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
363 SetPixelAlpha(q,ClampToQuantum(pixel));
364 p+=(ptrdiff_t) quantum_info->pad;
369 for (x=0; x < (ssize_t) number_pixels; x++)
371 p=PushLongPixel(quantum_info->endian,p,&pixel);
372 SetPixelAlpha(q,ScaleLongToQuantum(pixel));
373 p+=(ptrdiff_t) quantum_info->pad;
380 if (quantum_info->format == FloatingPointQuantumFormat)
385 for (x=0; x < (ssize_t) number_pixels; x++)
387 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
388 SetPixelAlpha(q,ClampToQuantum(pixel));
389 p+=(ptrdiff_t) quantum_info->pad;
398 if (quantum_info->format == FloatingPointQuantumFormat)
403 for (x=0; x < (ssize_t) number_pixels; x++)
405 p=PushDoublePixel(quantum_info,p,&pixel);
406 SetPixelAlpha(q,ClampToQuantum(pixel));
407 p+=(ptrdiff_t) quantum_info->pad;
419 range=GetQuantumRange(quantum_info->depth);
420 for (x=0; x < (ssize_t) number_pixels; x++)
422 p=PushQuantumPixel(quantum_info,p,&pixel);
423 SetPixelAlpha(q,ScaleAnyToQuantum(pixel,range));
424 p+=(ptrdiff_t) quantum_info->pad;
432static void ImportBGRQuantum(
QuantumInfo *quantum_info,
433 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
448 switch (quantum_info->depth)
455 for (x=0; x < (ssize_t) number_pixels; x++)
457 p=PushCharPixel(p,&pixel);
458 SetPixelBlue(q,ScaleCharToQuantum(pixel));
459 p=PushCharPixel(p,&pixel);
460 SetPixelGreen(q,ScaleCharToQuantum(pixel));
461 p=PushCharPixel(p,&pixel);
462 SetPixelRed(q,ScaleCharToQuantum(pixel));
463 SetPixelOpacity(q,OpaqueOpacity);
464 p+=(ptrdiff_t) quantum_info->pad;
471 range=GetQuantumRange(quantum_info->depth);
472 if (quantum_info->pack == MagickFalse)
474 for (x=0; x < (ssize_t) number_pixels; x++)
476 p=PushLongPixel(quantum_info->endian,p,&pixel);
477 SetPixelRed(q,ScaleAnyToQuantum((pixel >> 22) & 0x3ff,range));
478 SetPixelGreen(q,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,range));
479 SetPixelBlue(q,ScaleAnyToQuantum((pixel >> 2) & 0x3ff,range));
480 p+=(ptrdiff_t) quantum_info->pad;
485 if (quantum_info->quantum == 32U)
487 for (x=0; x < (ssize_t) number_pixels; x++)
489 p=PushQuantumLongPixel(quantum_info,p,&pixel);
490 SetPixelBlue(q,ScaleAnyToQuantum(pixel,range));
491 p=PushQuantumLongPixel(quantum_info,p,&pixel);
492 SetPixelGreen(q,ScaleAnyToQuantum(pixel,range));
493 p=PushQuantumLongPixel(quantum_info,p,&pixel);
494 SetPixelRed(q,ScaleAnyToQuantum(pixel,range));
499 for (x=0; x < (ssize_t) number_pixels; x++)
501 p=PushQuantumPixel(quantum_info,p,&pixel);
502 SetPixelBlue(q,ScaleAnyToQuantum(pixel,range));
503 p=PushQuantumPixel(quantum_info,p,&pixel);
504 SetPixelGreen(q,ScaleAnyToQuantum(pixel,range));
505 p=PushQuantumPixel(quantum_info,p,&pixel);
506 SetPixelRed(q,ScaleAnyToQuantum(pixel,range));
513 range=GetQuantumRange(quantum_info->depth);
514 if (quantum_info->pack == MagickFalse)
519 for (x=0; x < (ssize_t) (3*number_pixels-1); x+=2)
521 p=PushShortPixel(quantum_info->endian,p,&pixel);
527 SetPixelRed(q,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
533 SetPixelGreen(q,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
539 SetPixelBlue(q,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
545 p=PushShortPixel(quantum_info->endian,p,&pixel);
551 SetPixelRed(q,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
557 SetPixelGreen(q,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
563 SetPixelBlue(q,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
569 p+=(ptrdiff_t) quantum_info->pad;
571 for (bit=0; bit < (ssize_t) (3*number_pixels % 2); bit++)
573 p=PushShortPixel(quantum_info->endian,p,&pixel);
579 SetPixelRed(q,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
585 SetPixelGreen(q,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
591 SetPixelBlue(q,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
597 p+=(ptrdiff_t) quantum_info->pad;
603 if (quantum_info->quantum == 32U)
605 for (x=0; x < (ssize_t) number_pixels; x++)
607 p=PushQuantumLongPixel(quantum_info,p,&pixel);
608 SetPixelBlue(q,ScaleAnyToQuantum(pixel,range));
609 p=PushQuantumLongPixel(quantum_info,p,&pixel);
610 SetPixelGreen(q,ScaleAnyToQuantum(pixel,range));
611 p=PushQuantumLongPixel(quantum_info,p,&pixel);
612 SetPixelRed(q,ScaleAnyToQuantum(pixel,range));
617 for (x=0; x < (ssize_t) number_pixels; x++)
619 p=PushQuantumPixel(quantum_info,p,&pixel);
620 SetPixelBlue(q,ScaleAnyToQuantum(pixel,range));
621 p=PushQuantumPixel(quantum_info,p,&pixel);
622 SetPixelGreen(q,ScaleAnyToQuantum(pixel,range));
623 p=PushQuantumPixel(quantum_info,p,&pixel);
624 SetPixelRed(q,ScaleAnyToQuantum(pixel,range));
634 if (quantum_info->format == FloatingPointQuantumFormat)
636 for (x=0; x < (ssize_t) number_pixels; x++)
638 p=PushShortPixel(quantum_info->endian,p,&pixel);
639 SetPixelRed(q,ClampToQuantum((
double) QuantumRange*(
double)
640 HalfToSinglePrecision(pixel)));
641 p=PushShortPixel(quantum_info->endian,p,&pixel);
642 SetPixelGreen(q,ClampToQuantum((
double) QuantumRange*(
double)
643 HalfToSinglePrecision(pixel)));
644 p=PushShortPixel(quantum_info->endian,p,&pixel);
645 SetPixelBlue(q,ClampToQuantum((
double) QuantumRange*(
double)
646 HalfToSinglePrecision(pixel)));
647 p+=(ptrdiff_t) quantum_info->pad;
652 for (x=0; x < (ssize_t) number_pixels; x++)
654 p=PushShortPixel(quantum_info->endian,p,&pixel);
655 SetPixelBlue(q,ScaleShortToQuantum(pixel));
656 p=PushShortPixel(quantum_info->endian,p,&pixel);
657 SetPixelGreen(q,ScaleShortToQuantum(pixel));
658 p=PushShortPixel(quantum_info->endian,p,&pixel);
659 SetPixelRed(q,ScaleShortToQuantum(pixel));
660 p+=(ptrdiff_t) quantum_info->pad;
667 if (quantum_info->format == FloatingPointQuantumFormat)
672 for (x=0; x < (ssize_t) number_pixels; x++)
674 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
675 SetPixelRed(q,ClampToQuantum(pixel));
676 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
677 SetPixelGreen(q,ClampToQuantum(pixel));
678 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
679 SetPixelBlue(q,ClampToQuantum(pixel));
680 p+=(ptrdiff_t) quantum_info->pad;
685 for (x=0; x < (ssize_t) number_pixels; x++)
687 p=PushLongPixel(quantum_info->endian,p,&pixel);
688 SetPixelBlue(q,ScaleLongToQuantum(pixel));
689 p=PushLongPixel(quantum_info->endian,p,&pixel);
690 SetPixelGreen(q,ScaleLongToQuantum(pixel));
691 p=PushLongPixel(quantum_info->endian,p,&pixel);
692 SetPixelRed(q,ScaleLongToQuantum(pixel));
693 p+=(ptrdiff_t) quantum_info->pad;
700 if (quantum_info->format == FloatingPointQuantumFormat)
705 for (x=0; x < (ssize_t) number_pixels; x++)
707 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
708 SetPixelRed(q,ClampToQuantum(pixel));
709 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
710 SetPixelGreen(q,ClampToQuantum(pixel));
711 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
712 SetPixelBlue(q,ClampToQuantum(pixel));
713 p+=(ptrdiff_t) quantum_info->pad;
722 if (quantum_info->format == FloatingPointQuantumFormat)
727 for (x=0; x < (ssize_t) number_pixels; x++)
729 p=PushDoublePixel(quantum_info,p,&pixel);
730 SetPixelRed(q,ClampToQuantum(pixel));
731 p=PushDoublePixel(quantum_info,p,&pixel);
732 SetPixelGreen(q,ClampToQuantum(pixel));
733 p=PushDoublePixel(quantum_info,p,&pixel);
734 SetPixelBlue(q,ClampToQuantum(pixel));
735 p+=(ptrdiff_t) quantum_info->pad;
744 range=GetQuantumRange(quantum_info->depth);
745 for (x=0; x < (ssize_t) number_pixels; x++)
747 p=PushQuantumPixel(quantum_info,p,&pixel);
748 SetPixelBlue(q,ScaleAnyToQuantum(pixel,range));
749 p=PushQuantumPixel(quantum_info,p,&pixel);
750 SetPixelGreen(q,ScaleAnyToQuantum(pixel,range));
751 p=PushQuantumPixel(quantum_info,p,&pixel);
752 SetPixelRed(q,ScaleAnyToQuantum(pixel,range));
760static void ImportBGRAQuantum(
QuantumInfo *quantum_info,
761 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
773 switch (quantum_info->depth)
780 for (x=0; x < (ssize_t) number_pixels; x++)
782 p=PushCharPixel(p,&pixel);
783 SetPixelBlue(q,ScaleCharToQuantum(pixel));
784 p=PushCharPixel(p,&pixel);
785 SetPixelGreen(q,ScaleCharToQuantum(pixel));
786 p=PushCharPixel(p,&pixel);
787 SetPixelRed(q,ScaleCharToQuantum(pixel));
788 p=PushCharPixel(p,&pixel);
789 SetPixelAlpha(q,ScaleCharToQuantum(pixel));
790 p+=(ptrdiff_t) quantum_info->pad;
798 if (quantum_info->pack == MagickFalse)
811 for (x=0; x < (ssize_t) number_pixels; x++)
813 for (i=0; i < 4; i++)
819 p=PushLongPixel(quantum_info->endian,p,&pixel);
820 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
821 (((pixel >> 22) & 0x3ff) << 6)));
826 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
827 (((pixel >> 12) & 0x3ff) << 6)));
832 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
833 (((pixel >> 2) & 0x3ff) << 6)));
839 case 0: SetPixelRed(q,quantum);
break;
840 case 1: SetPixelGreen(q,quantum);
break;
841 case 2: SetPixelBlue(q,quantum);
break;
842 case 3: SetPixelAlpha(q,quantum);
break;
846 p+=(ptrdiff_t) quantum_info->pad;
851 for (x=0; x < (ssize_t) number_pixels; x++)
853 p=PushQuantumPixel(quantum_info,p,&pixel);
854 SetPixelRed(q,ScaleShortToQuantum((
unsigned short) (pixel << 6)));
855 p=PushQuantumPixel(quantum_info,p,&pixel);
856 SetPixelGreen(q,ScaleShortToQuantum((
unsigned short) (pixel << 6)));
857 p=PushQuantumPixel(quantum_info,p,&pixel);
858 SetPixelBlue(q,ScaleShortToQuantum((
unsigned short) (pixel << 6)));
859 p=PushQuantumPixel(quantum_info,p,&pixel);
860 SetPixelAlpha(q,ScaleShortToQuantum((
unsigned short) (pixel << 6)));
870 if (quantum_info->format == FloatingPointQuantumFormat)
872 for (x=0; x < (ssize_t) number_pixels; x++)
874 p=PushShortPixel(quantum_info->endian,p,&pixel);
875 SetPixelRed(q,ClampToQuantum((
double) QuantumRange*(
double)
876 HalfToSinglePrecision(pixel)));
877 p=PushShortPixel(quantum_info->endian,p,&pixel);
878 SetPixelGreen(q,ClampToQuantum((
double) QuantumRange*(
double)
879 HalfToSinglePrecision(pixel)));
880 p=PushShortPixel(quantum_info->endian,p,&pixel);
881 SetPixelBlue(q,ClampToQuantum((
double) QuantumRange*(
double)
882 HalfToSinglePrecision(pixel)));
883 p=PushShortPixel(quantum_info->endian,p,&pixel);
884 SetPixelAlpha(q,ClampToQuantum((
double) QuantumRange*(
double)
885 HalfToSinglePrecision(pixel)));
886 p+=(ptrdiff_t) quantum_info->pad;
891 for (x=0; x < (ssize_t) number_pixels; x++)
893 p=PushShortPixel(quantum_info->endian,p,&pixel);
894 SetPixelBlue(q,ScaleShortToQuantum(pixel));
895 p=PushShortPixel(quantum_info->endian,p,&pixel);
896 SetPixelGreen(q,ScaleShortToQuantum(pixel));
897 p=PushShortPixel(quantum_info->endian,p,&pixel);
898 SetPixelRed(q,ScaleShortToQuantum(pixel));
899 p=PushShortPixel(quantum_info->endian,p,&pixel);
900 SetPixelAlpha(q,ScaleShortToQuantum(pixel));
901 p+=(ptrdiff_t) quantum_info->pad;
908 if (quantum_info->format == FloatingPointQuantumFormat)
913 for (x=0; x < (ssize_t) number_pixels; x++)
915 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
916 SetPixelRed(q,ClampToQuantum(pixel));
917 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
918 SetPixelGreen(q,ClampToQuantum(pixel));
919 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
920 SetPixelBlue(q,ClampToQuantum(pixel));
921 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
922 SetPixelAlpha(q,ClampToQuantum(pixel));
923 p+=(ptrdiff_t) quantum_info->pad;
928 for (x=0; x < (ssize_t) number_pixels; x++)
930 p=PushLongPixel(quantum_info->endian,p,&pixel);
931 SetPixelBlue(q,ScaleLongToQuantum(pixel));
932 p=PushLongPixel(quantum_info->endian,p,&pixel);
933 SetPixelGreen(q,ScaleLongToQuantum(pixel));
934 p=PushLongPixel(quantum_info->endian,p,&pixel);
935 SetPixelRed(q,ScaleLongToQuantum(pixel));
936 p=PushLongPixel(quantum_info->endian,p,&pixel);
937 SetPixelAlpha(q,ScaleLongToQuantum(pixel));
938 p+=(ptrdiff_t) quantum_info->pad;
945 if (quantum_info->format == FloatingPointQuantumFormat)
950 for (x=0; x < (ssize_t) number_pixels; x++)
952 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
953 SetPixelRed(q,ClampToQuantum(pixel));
954 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
955 SetPixelGreen(q,ClampToQuantum(pixel));
956 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
957 SetPixelBlue(q,ClampToQuantum(pixel));
958 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
959 SetPixelAlpha(q,ClampToQuantum(pixel));
960 p+=(ptrdiff_t) quantum_info->pad;
969 if (quantum_info->format == FloatingPointQuantumFormat)
974 for (x=0; x < (ssize_t) number_pixels; x++)
976 p=PushDoublePixel(quantum_info,p,&pixel);
977 SetPixelRed(q,ClampToQuantum(pixel));
978 p=PushDoublePixel(quantum_info,p,&pixel);
979 SetPixelGreen(q,ClampToQuantum(pixel));
980 p=PushDoublePixel(quantum_info,p,&pixel);
981 SetPixelBlue(q,ClampToQuantum(pixel));
982 p=PushDoublePixel(quantum_info,p,&pixel);
983 SetPixelAlpha(q,ClampToQuantum(pixel));
984 p+=(ptrdiff_t) quantum_info->pad;
993 range=GetQuantumRange(quantum_info->depth);
994 for (x=0; x < (ssize_t) number_pixels; x++)
996 p=PushQuantumPixel(quantum_info,p,&pixel);
997 SetPixelBlue(q,ScaleAnyToQuantum(pixel,range));
998 p=PushQuantumPixel(quantum_info,p,&pixel);
999 SetPixelGreen(q,ScaleAnyToQuantum(pixel,range));
1000 p=PushQuantumPixel(quantum_info,p,&pixel);
1001 SetPixelRed(q,ScaleAnyToQuantum(pixel,range));
1002 p=PushQuantumPixel(quantum_info,p,&pixel);
1003 SetPixelAlpha(q,ScaleAnyToQuantum(pixel,range));
1011static void ImportBGROQuantum(
QuantumInfo *quantum_info,
1012 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
1024 switch (quantum_info->depth)
1031 for (x=0; x < (ssize_t) number_pixels; x++)
1033 p=PushCharPixel(p,&pixel);
1034 SetPixelBlue(q,ScaleCharToQuantum(pixel));
1035 p=PushCharPixel(p,&pixel);
1036 SetPixelGreen(q,ScaleCharToQuantum(pixel));
1037 p=PushCharPixel(p,&pixel);
1038 SetPixelRed(q,ScaleCharToQuantum(pixel));
1039 p=PushCharPixel(p,&pixel);
1040 SetPixelOpacity(q,ScaleCharToQuantum(pixel));
1041 p+=(ptrdiff_t) quantum_info->pad;
1049 if (quantum_info->pack == MagickFalse)
1062 for (x=0; x < (ssize_t) number_pixels; x++)
1064 for (i=0; i < 4; i++)
1070 p=PushLongPixel(quantum_info->endian,p,&pixel);
1071 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
1072 (((pixel >> 22) & 0x3ff) << 6)));
1077 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
1078 (((pixel >> 12) & 0x3ff) << 6)));
1083 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
1084 (((pixel >> 2) & 0x3ff) << 6)));
1090 case 0: SetPixelRed(q,quantum);
break;
1091 case 1: SetPixelGreen(q,quantum);
break;
1092 case 2: SetPixelBlue(q,quantum);
break;
1093 case 3: SetPixelOpacity(q,quantum);
break;
1097 p+=(ptrdiff_t) quantum_info->pad;
1102 for (x=0; x < (ssize_t) number_pixels; x++)
1104 p=PushQuantumPixel(quantum_info,p,&pixel);
1105 SetPixelRed(q,ScaleShortToQuantum((
unsigned short) (pixel << 6)));
1106 p=PushQuantumPixel(quantum_info,p,&pixel);
1107 SetPixelGreen(q,ScaleShortToQuantum((
unsigned short) (pixel << 6)));
1108 p=PushQuantumPixel(quantum_info,p,&pixel);
1109 SetPixelBlue(q,ScaleShortToQuantum((
unsigned short) (pixel << 6)));
1110 p=PushQuantumPixel(quantum_info,p,&pixel);
1111 SetPixelOpacity(q,ScaleShortToQuantum((
unsigned short) (pixel << 6)));
1121 if (quantum_info->format == FloatingPointQuantumFormat)
1123 for (x=0; x < (ssize_t) number_pixels; x++)
1125 p=PushShortPixel(quantum_info->endian,p,&pixel);
1126 SetPixelRed(q,ClampToQuantum((
double) QuantumRange*(
double)
1127 HalfToSinglePrecision(pixel)));
1128 p=PushShortPixel(quantum_info->endian,p,&pixel);
1129 SetPixelGreen(q,ClampToQuantum((
double) QuantumRange*(
double)
1130 HalfToSinglePrecision(pixel)));
1131 p=PushShortPixel(quantum_info->endian,p,&pixel);
1132 SetPixelBlue(q,ClampToQuantum((
double) QuantumRange*(
double)
1133 HalfToSinglePrecision(pixel)));
1134 p=PushShortPixel(quantum_info->endian,p,&pixel);
1135 SetPixelOpacity(q,ClampToQuantum((
double) QuantumRange*(
double)
1136 HalfToSinglePrecision(pixel)));
1137 p+=(ptrdiff_t) quantum_info->pad;
1142 for (x=0; x < (ssize_t) number_pixels; x++)
1144 p=PushShortPixel(quantum_info->endian,p,&pixel);
1145 SetPixelBlue(q,ScaleShortToQuantum(pixel));
1146 p=PushShortPixel(quantum_info->endian,p,&pixel);
1147 SetPixelGreen(q,ScaleShortToQuantum(pixel));
1148 p=PushShortPixel(quantum_info->endian,p,&pixel);
1149 SetPixelRed(q,ScaleShortToQuantum(pixel));
1150 p=PushShortPixel(quantum_info->endian,p,&pixel);
1151 SetPixelOpacity(q,ScaleShortToQuantum(pixel));
1152 p+=(ptrdiff_t) quantum_info->pad;
1159 if (quantum_info->format == FloatingPointQuantumFormat)
1164 for (x=0; x < (ssize_t) number_pixels; x++)
1166 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1167 SetPixelRed(q,ClampToQuantum(pixel));
1168 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1169 SetPixelGreen(q,ClampToQuantum(pixel));
1170 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1171 SetPixelBlue(q,ClampToQuantum(pixel));
1172 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1173 SetPixelOpacity(q,ClampToQuantum(pixel));
1174 p+=(ptrdiff_t) quantum_info->pad;
1179 for (x=0; x < (ssize_t) number_pixels; x++)
1181 p=PushLongPixel(quantum_info->endian,p,&pixel);
1182 SetPixelBlue(q,ScaleLongToQuantum(pixel));
1183 p=PushLongPixel(quantum_info->endian,p,&pixel);
1184 SetPixelGreen(q,ScaleLongToQuantum(pixel));
1185 p=PushLongPixel(quantum_info->endian,p,&pixel);
1186 SetPixelRed(q,ScaleLongToQuantum(pixel));
1187 p=PushLongPixel(quantum_info->endian,p,&pixel);
1188 SetPixelOpacity(q,ScaleLongToQuantum(pixel));
1189 p+=(ptrdiff_t) quantum_info->pad;
1196 if (quantum_info->format == FloatingPointQuantumFormat)
1201 for (x=0; x < (ssize_t) number_pixels; x++)
1203 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1204 SetPixelRed(q,ClampToQuantum(pixel));
1205 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1206 SetPixelGreen(q,ClampToQuantum(pixel));
1207 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1208 SetPixelBlue(q,ClampToQuantum(pixel));
1209 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1210 SetPixelOpacity(q,ClampToQuantum(pixel));
1211 p+=(ptrdiff_t) quantum_info->pad;
1220 if (quantum_info->format == FloatingPointQuantumFormat)
1225 for (x=0; x < (ssize_t) number_pixels; x++)
1227 p=PushDoublePixel(quantum_info,p,&pixel);
1228 SetPixelRed(q,ClampToQuantum(pixel));
1229 p=PushDoublePixel(quantum_info,p,&pixel);
1230 SetPixelGreen(q,ClampToQuantum(pixel));
1231 p=PushDoublePixel(quantum_info,p,&pixel);
1232 SetPixelBlue(q,ClampToQuantum(pixel));
1233 p=PushDoublePixel(quantum_info,p,&pixel);
1234 SetPixelOpacity(q,ClampToQuantum(pixel));
1235 p+=(ptrdiff_t) quantum_info->pad;
1244 range=GetQuantumRange(quantum_info->depth);
1245 for (x=0; x < (ssize_t) number_pixels; x++)
1247 p=PushQuantumPixel(quantum_info,p,&pixel);
1248 SetPixelBlue(q,ScaleAnyToQuantum(pixel,range));
1249 p=PushQuantumPixel(quantum_info,p,&pixel);
1250 SetPixelGreen(q,ScaleAnyToQuantum(pixel,range));
1251 p=PushQuantumPixel(quantum_info,p,&pixel);
1252 SetPixelRed(q,ScaleAnyToQuantum(pixel,range));
1253 p=PushQuantumPixel(quantum_info,p,&pixel);
1254 SetPixelOpacity(q,ScaleAnyToQuantum(pixel,range));
1262static void ImportBlackQuantum(
const Image *image,
QuantumInfo *quantum_info,
1263 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
1264 PixelPacket *magick_restrict q,IndexPacket *magick_restrict indexes,
1273 if (image->colorspace != CMYKColorspace)
1275 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1276 "ColorSeparatedImageRequired",
"`%s'",image->filename);
1279 switch (quantum_info->depth)
1286 for (x=0; x < (ssize_t) number_pixels; x++)
1288 p=PushCharPixel(p,&pixel);
1289 SetPixelIndex(indexes+x,ScaleCharToQuantum(pixel));
1290 p+=(ptrdiff_t) quantum_info->pad;
1299 if (quantum_info->format == FloatingPointQuantumFormat)
1301 for (x=0; x < (ssize_t) number_pixels; x++)
1303 p=PushShortPixel(quantum_info->endian,p,&pixel);
1304 SetPixelIndex(indexes+x,ClampToQuantum((
double)
1305 QuantumRange*(
double) HalfToSinglePrecision(pixel)));
1306 p+=(ptrdiff_t) quantum_info->pad;
1310 for (x=0; x < (ssize_t) number_pixels; x++)
1312 p=PushShortPixel(quantum_info->endian,p,&pixel);
1313 SetPixelIndex(indexes+x,ScaleShortToQuantum(pixel));
1314 p+=(ptrdiff_t) quantum_info->pad;
1320 if (quantum_info->format == FloatingPointQuantumFormat)
1325 for (x=0; x < (ssize_t) number_pixels; x++)
1327 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1328 SetPixelIndex(indexes+x,ClampToQuantum(pixel));
1329 p+=(ptrdiff_t) quantum_info->pad;
1334 for (x=0; x < (ssize_t) number_pixels; x++)
1336 p=PushLongPixel(quantum_info->endian,p,&pixel);
1337 SetPixelIndex(indexes+x,ScaleLongToQuantum(pixel));
1338 p+=(ptrdiff_t) quantum_info->pad;
1345 if (quantum_info->format == FloatingPointQuantumFormat)
1350 for (x=0; x < (ssize_t) number_pixels; x++)
1352 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1353 SetPixelIndex(indexes+x,ClampToQuantum(pixel));
1354 p+=(ptrdiff_t) quantum_info->pad;
1363 if (quantum_info->format == FloatingPointQuantumFormat)
1368 for (x=0; x < (ssize_t) number_pixels; x++)
1370 p=PushDoublePixel(quantum_info,p,&pixel);
1371 SetPixelIndex(indexes+x,ClampToQuantum(pixel));
1372 p+=(ptrdiff_t) quantum_info->pad;
1384 range=GetQuantumRange(quantum_info->depth);
1385 for (x=0; x < (ssize_t) number_pixels; x++)
1387 p=PushQuantumPixel(quantum_info,p,&pixel);
1388 SetPixelIndex(indexes+x,ScaleAnyToQuantum(pixel,range));
1389 p+=(ptrdiff_t) quantum_info->pad;
1397static void ImportBlueQuantum(
QuantumInfo *quantum_info,
1398 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
1407 switch (quantum_info->depth)
1414 for (x=0; x < (ssize_t) number_pixels; x++)
1416 p=PushCharPixel(p,&pixel);
1417 SetPixelBlue(q,ScaleCharToQuantum(pixel));
1418 p+=(ptrdiff_t) quantum_info->pad;
1428 if (quantum_info->format == FloatingPointQuantumFormat)
1430 for (x=0; x < (ssize_t) number_pixels; x++)
1432 p=PushShortPixel(quantum_info->endian,p,&pixel);
1433 SetPixelBlue(q,ClampToQuantum((
double) QuantumRange*(
double)
1434 HalfToSinglePrecision(pixel)));
1435 p+=(ptrdiff_t) quantum_info->pad;
1440 for (x=0; x < (ssize_t) number_pixels; x++)
1442 p=PushShortPixel(quantum_info->endian,p,&pixel);
1443 SetPixelBlue(q,ScaleShortToQuantum(pixel));
1444 p+=(ptrdiff_t) quantum_info->pad;
1451 if (quantum_info->format == FloatingPointQuantumFormat)
1456 for (x=0; x < (ssize_t) number_pixels; x++)
1458 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1459 SetPixelBlue(q,ClampToQuantum(pixel));
1460 p+=(ptrdiff_t) quantum_info->pad;
1465 for (x=0; x < (ssize_t) number_pixels; x++)
1467 p=PushLongPixel(quantum_info->endian,p,&pixel);
1468 SetPixelBlue(q,ScaleLongToQuantum(pixel));
1469 p+=(ptrdiff_t) quantum_info->pad;
1476 if (quantum_info->format == FloatingPointQuantumFormat)
1481 for (x=0; x < (ssize_t) number_pixels; x++)
1483 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1484 SetPixelBlue(q,ClampToQuantum(pixel));
1485 p+=(ptrdiff_t) quantum_info->pad;
1494 if (quantum_info->format == FloatingPointQuantumFormat)
1499 for (x=0; x < (ssize_t) number_pixels; x++)
1501 p=PushDoublePixel(quantum_info,p,&pixel);
1502 SetPixelBlue(q,ClampToQuantum(pixel));
1503 p+=(ptrdiff_t) quantum_info->pad;
1515 range=GetQuantumRange(quantum_info->depth);
1516 for (x=0; x < (ssize_t) number_pixels; x++)
1518 p=PushQuantumPixel(quantum_info,p,&pixel);
1519 SetPixelBlue(q,ScaleAnyToQuantum(pixel,range));
1520 p+=(ptrdiff_t) quantum_info->pad;
1528static void ImportCbYCrYQuantum(
const Image *image,
QuantumInfo *quantum_info,
1529 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
1538 switch (quantum_info->depth)
1546 if (quantum_info->pack == MagickFalse)
1559 for (x=0; x < (ssize_t) (number_pixels-3); x+=4)
1561 for (i=0; i < 4; i++)
1567 p=PushLongPixel(quantum_info->endian,p,&pixel);
1568 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
1569 (((pixel >> 22) & 0x3ff) << 6)));
1574 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
1575 (((pixel >> 12) & 0x3ff) << 6)));
1580 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
1581 (((pixel >> 2) & 0x3ff) << 6)));
1585 cbcr[i]=(Quantum) (quantum);
1588 p+=(ptrdiff_t) quantum_info->pad;
1589 SetPixelRed(q,cbcr[1]);
1590 SetPixelGreen(q,cbcr[0]);
1591 SetPixelBlue(q,cbcr[2]);
1593 SetPixelRed(q,cbcr[3]);
1594 SetPixelGreen(q,cbcr[0]);
1595 SetPixelBlue(q,cbcr[2]);
1607 range=GetQuantumRange(image->depth);
1608 for (x=0; x < (ssize_t) number_pixels; x++)
1610 p=PushQuantumPixel(quantum_info,p,&pixel);
1611 SetPixelRed(q,ScaleAnyToQuantum(pixel,range));
1612 p=PushQuantumPixel(quantum_info,p,&pixel);
1613 SetPixelGreen(q,ScaleAnyToQuantum(pixel,range));
1622 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
1623 PixelPacket *magick_restrict q,IndexPacket *magick_restrict indexes,
1635 if (image->colorspace != CMYKColorspace)
1637 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1638 "ColorSeparatedImageRequired",
"`%s'",image->filename);
1641 switch (quantum_info->depth)
1648 for (x=0; x < (ssize_t) number_pixels; x++)
1650 p=PushCharPixel(p,&pixel);
1651 SetPixelRed(q,ScaleCharToQuantum(pixel));
1652 p=PushCharPixel(p,&pixel);
1653 SetPixelGreen(q,ScaleCharToQuantum(pixel));
1654 p=PushCharPixel(p,&pixel);
1655 SetPixelBlue(q,ScaleCharToQuantum(pixel));
1656 p=PushCharPixel(p,&pixel);
1657 SetPixelIndex(indexes+x,ScaleCharToQuantum(pixel));
1658 p+=(ptrdiff_t) quantum_info->pad;
1668 if (quantum_info->format == FloatingPointQuantumFormat)
1670 for (x=0; x < (ssize_t) number_pixels; x++)
1672 p=PushShortPixel(quantum_info->endian,p,&pixel);
1673 SetPixelRed(q,ClampToQuantum((
double) QuantumRange*(
double)
1674 HalfToSinglePrecision(pixel)));
1675 p=PushShortPixel(quantum_info->endian,p,&pixel);
1676 SetPixelGreen(q,ClampToQuantum((
double) QuantumRange*(
double)
1677 HalfToSinglePrecision(pixel)));
1678 p=PushShortPixel(quantum_info->endian,p,&pixel);
1679 SetPixelBlue(q,ClampToQuantum((
double) QuantumRange*(
double)
1680 HalfToSinglePrecision(pixel)));
1681 p=PushShortPixel(quantum_info->endian,p,&pixel);
1682 SetPixelIndex(indexes+x,ClampToQuantum((
double) QuantumRange*
1683 (
double) HalfToSinglePrecision(pixel)));
1684 p+=(ptrdiff_t) quantum_info->pad;
1689 for (x=0; x < (ssize_t) number_pixels; x++)
1691 p=PushShortPixel(quantum_info->endian,p,&pixel);
1692 SetPixelRed(q,ScaleShortToQuantum(pixel));
1693 p=PushShortPixel(quantum_info->endian,p,&pixel);
1694 SetPixelGreen(q,ScaleShortToQuantum(pixel));
1695 p=PushShortPixel(quantum_info->endian,p,&pixel);
1696 SetPixelBlue(q,ScaleShortToQuantum(pixel));
1697 p=PushShortPixel(quantum_info->endian,p,&pixel);
1698 SetPixelIndex(indexes+x,ScaleShortToQuantum(pixel));
1699 p+=(ptrdiff_t) quantum_info->pad;
1706 if (quantum_info->format == FloatingPointQuantumFormat)
1711 for (x=0; x < (ssize_t) number_pixels; x++)
1713 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1714 SetPixelRed(q,ClampToQuantum(pixel));
1715 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1716 SetPixelGreen(q,ClampToQuantum(pixel));
1717 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1718 SetPixelBlue(q,ClampToQuantum(pixel));
1719 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1720 SetPixelIndex(indexes+x,ClampToQuantum(pixel));
1721 p+=(ptrdiff_t) quantum_info->pad;
1726 for (x=0; x < (ssize_t) number_pixels; x++)
1728 p=PushLongPixel(quantum_info->endian,p,&pixel);
1729 SetPixelRed(q,ScaleLongToQuantum(pixel));
1730 p=PushLongPixel(quantum_info->endian,p,&pixel);
1731 SetPixelGreen(q,ScaleLongToQuantum(pixel));
1732 p=PushLongPixel(quantum_info->endian,p,&pixel);
1733 SetPixelBlue(q,ScaleLongToQuantum(pixel));
1734 p=PushLongPixel(quantum_info->endian,p,&pixel);
1735 SetPixelIndex(indexes+x,ScaleLongToQuantum(pixel));
1736 p+=(ptrdiff_t) quantum_info->pad;
1743 if (quantum_info->format == FloatingPointQuantumFormat)
1748 for (x=0; x < (ssize_t) number_pixels; x++)
1750 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1751 SetPixelRed(q,ClampToQuantum(pixel));
1752 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1753 SetPixelGreen(q,ClampToQuantum(pixel));
1754 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1755 SetPixelBlue(q,ClampToQuantum(pixel));
1756 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1757 SetPixelIndex(indexes+x,ClampToQuantum(pixel));
1758 p+=(ptrdiff_t) quantum_info->pad;
1767 if (quantum_info->format == FloatingPointQuantumFormat)
1772 for (x=0; x < (ssize_t) number_pixels; x++)
1774 p=PushDoublePixel(quantum_info,p,&pixel);
1775 SetPixelRed(q,ClampToQuantum(pixel));
1776 p=PushDoublePixel(quantum_info,p,&pixel);
1777 SetPixelGreen(q,ClampToQuantum(pixel));
1778 p=PushDoublePixel(quantum_info,p,&pixel);
1779 SetPixelBlue(q,ClampToQuantum(pixel));
1780 p=PushDoublePixel(quantum_info,p,&pixel);
1781 SetPixelIndex(indexes+x,ClampToQuantum(pixel));
1782 p+=(ptrdiff_t) quantum_info->pad;
1791 range=GetQuantumRange(quantum_info->depth);
1792 for (x=0; x < (ssize_t) number_pixels; x++)
1794 p=PushQuantumPixel(quantum_info,p,&pixel);
1795 SetPixelRed(q,ScaleAnyToQuantum(pixel,range));
1796 p=PushQuantumPixel(quantum_info,p,&pixel);
1797 SetPixelGreen(q,ScaleAnyToQuantum(pixel,range));
1798 p=PushQuantumPixel(quantum_info,p,&pixel);
1799 SetPixelBlue(q,ScaleAnyToQuantum(pixel,range));
1800 p=PushQuantumPixel(quantum_info,p,&pixel);
1801 SetPixelIndex(indexes+x,ScaleAnyToQuantum(pixel,range));
1809static void ImportCMYKAQuantum(
const Image *image,
QuantumInfo *quantum_info,
1810 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
1811 PixelPacket *magick_restrict q,IndexPacket *magick_restrict indexes,
1823 if (image->colorspace != CMYKColorspace)
1825 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1826 "ColorSeparatedImageRequired",
"`%s'",image->filename);
1829 switch (quantum_info->depth)
1836 for (x=0; x < (ssize_t) number_pixels; x++)
1838 p=PushCharPixel(p,&pixel);
1839 SetPixelRed(q,ScaleCharToQuantum(pixel));
1840 p=PushCharPixel(p,&pixel);
1841 SetPixelGreen(q,ScaleCharToQuantum(pixel));
1842 p=PushCharPixel(p,&pixel);
1843 SetPixelBlue(q,ScaleCharToQuantum(pixel));
1844 p=PushCharPixel(p,&pixel);
1845 SetPixelIndex(indexes+x,ScaleCharToQuantum(pixel));
1846 p=PushCharPixel(p,&pixel);
1847 SetPixelAlpha(q,ScaleCharToQuantum(pixel));
1848 p+=(ptrdiff_t) quantum_info->pad;
1858 if (quantum_info->format == FloatingPointQuantumFormat)
1860 for (x=0; x < (ssize_t) number_pixels; x++)
1862 p=PushShortPixel(quantum_info->endian,p,&pixel);
1863 SetPixelRed(q,ClampToQuantum((
double) QuantumRange*
1864 (
double) HalfToSinglePrecision(pixel)));
1865 p=PushShortPixel(quantum_info->endian,p,&pixel);
1866 SetPixelGreen(q,ClampToQuantum((
double) QuantumRange*
1867 (
double) HalfToSinglePrecision(pixel)));
1868 p=PushShortPixel(quantum_info->endian,p,&pixel);
1869 SetPixelBlue(q,ClampToQuantum((
double) QuantumRange*
1870 (
double) HalfToSinglePrecision(pixel)));
1871 p=PushShortPixel(quantum_info->endian,p,&pixel);
1872 SetPixelIndex(indexes+x,ClampToQuantum((
double) QuantumRange*
1873 (
double) HalfToSinglePrecision(pixel)));
1874 p=PushShortPixel(quantum_info->endian,p,&pixel);
1875 SetPixelAlpha(q,ClampToQuantum((MagickRealType) QuantumRange*
1876 (
double) HalfToSinglePrecision(pixel)));
1877 p+=(ptrdiff_t) quantum_info->pad;
1882 for (x=0; x < (ssize_t) number_pixels; x++)
1884 p=PushShortPixel(quantum_info->endian,p,&pixel);
1885 SetPixelRed(q,ScaleShortToQuantum(pixel));
1886 p=PushShortPixel(quantum_info->endian,p,&pixel);
1887 SetPixelGreen(q,ScaleShortToQuantum(pixel));
1888 p=PushShortPixel(quantum_info->endian,p,&pixel);
1889 SetPixelBlue(q,ScaleShortToQuantum(pixel));
1890 p=PushShortPixel(quantum_info->endian,p,&pixel);
1891 SetPixelIndex(indexes+x,ScaleShortToQuantum(pixel));
1892 p=PushShortPixel(quantum_info->endian,p,&pixel);
1893 SetPixelAlpha(q,ScaleShortToQuantum(pixel));
1894 p+=(ptrdiff_t) quantum_info->pad;
1901 if (quantum_info->format == FloatingPointQuantumFormat)
1906 for (x=0; x < (ssize_t) number_pixels; x++)
1908 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1909 SetPixelRed(q,ClampToQuantum(pixel));
1910 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1911 SetPixelGreen(q,ClampToQuantum(pixel));
1912 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1913 SetPixelBlue(q,ClampToQuantum(pixel));
1914 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1915 SetPixelIndex(indexes+x,ClampToQuantum(pixel));
1916 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
1917 SetPixelAlpha(q,ClampToQuantum(pixel));
1918 p+=(ptrdiff_t) quantum_info->pad;
1923 for (x=0; x < (ssize_t) number_pixels; x++)
1925 p=PushLongPixel(quantum_info->endian,p,&pixel);
1926 SetPixelRed(q,ScaleLongToQuantum(pixel));
1927 p=PushLongPixel(quantum_info->endian,p,&pixel);
1928 SetPixelGreen(q,ScaleLongToQuantum(pixel));
1929 p=PushLongPixel(quantum_info->endian,p,&pixel);
1930 SetPixelBlue(q,ScaleLongToQuantum(pixel));
1931 p=PushLongPixel(quantum_info->endian,p,&pixel);
1932 SetPixelIndex(indexes+x,ScaleLongToQuantum(pixel));
1933 p=PushLongPixel(quantum_info->endian,p,&pixel);
1934 SetPixelAlpha(q,ScaleLongToQuantum(pixel));
1935 p+=(ptrdiff_t) quantum_info->pad;
1942 if (quantum_info->format == FloatingPointQuantumFormat)
1947 for (x=0; x < (ssize_t) number_pixels; x++)
1949 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1950 SetPixelRed(q,ClampToQuantum(pixel));
1951 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1952 SetPixelGreen(q,ClampToQuantum(pixel));
1953 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1954 SetPixelBlue(q,ClampToQuantum(pixel));
1955 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1956 SetPixelIndex(indexes+x,ClampToQuantum(pixel));
1957 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
1958 SetPixelAlpha(q,ClampToQuantum(pixel));
1959 p+=(ptrdiff_t) quantum_info->pad;
1968 if (quantum_info->format == FloatingPointQuantumFormat)
1973 for (x=0; x < (ssize_t) number_pixels; x++)
1975 p=PushDoublePixel(quantum_info,p,&pixel);
1976 SetPixelRed(q,ClampToQuantum(pixel));
1977 p=PushDoublePixel(quantum_info,p,&pixel);
1978 SetPixelGreen(q,ClampToQuantum(pixel));
1979 p=PushDoublePixel(quantum_info,p,&pixel);
1980 SetPixelBlue(q,ClampToQuantum(pixel));
1981 p=PushDoublePixel(quantum_info,p,&pixel);
1982 SetPixelIndex(indexes+x,ClampToQuantum(pixel));
1983 p=PushDoublePixel(quantum_info,p,&pixel);
1984 SetPixelAlpha(q,ClampToQuantum(pixel));
1985 p+=(ptrdiff_t) quantum_info->pad;
1994 range=GetQuantumRange(image->depth);
1995 for (x=0; x < (ssize_t) number_pixels; x++)
1997 p=PushQuantumPixel(quantum_info,p,&pixel);
1998 SetPixelRed(q,ScaleAnyToQuantum(pixel,range));
1999 p=PushQuantumPixel(quantum_info,p,&pixel);
2000 SetPixelGreen(q,ScaleAnyToQuantum(pixel,range));
2001 p=PushQuantumPixel(quantum_info,p,&pixel);
2002 SetPixelBlue(q,ScaleAnyToQuantum(pixel,range));
2003 p=PushQuantumPixel(quantum_info,p,&pixel);
2004 SetPixelIndex(indexes+x,ScaleAnyToQuantum(pixel,range));
2005 p=PushQuantumPixel(quantum_info,p,&pixel);
2006 SetPixelAlpha(q,ScaleAnyToQuantum(pixel,range));
2014static void ImportCMYKOQuantum(
const Image *image,
QuantumInfo *quantum_info,
2015 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
2016 PixelPacket *magick_restrict q,IndexPacket *magick_restrict indexes,
2028 if (image->colorspace != CMYKColorspace)
2030 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2031 "ColorSeparatedImageRequired",
"`%s'",image->filename);
2034 switch (quantum_info->depth)
2041 for (x=0; x < (ssize_t) number_pixels; x++)
2043 p=PushCharPixel(p,&pixel);
2044 SetPixelRed(q,ScaleCharToQuantum(pixel));
2045 p=PushCharPixel(p,&pixel);
2046 SetPixelGreen(q,ScaleCharToQuantum(pixel));
2047 p=PushCharPixel(p,&pixel);
2048 SetPixelBlue(q,ScaleCharToQuantum(pixel));
2049 p=PushCharPixel(p,&pixel);
2050 SetPixelIndex(indexes+x,ScaleCharToQuantum(pixel));
2051 p=PushCharPixel(p,&pixel);
2052 SetPixelOpacity(q,ScaleCharToQuantum(pixel));
2053 p+=(ptrdiff_t) quantum_info->pad;
2063 if (quantum_info->format == FloatingPointQuantumFormat)
2065 for (x=0; x < (ssize_t) number_pixels; x++)
2067 p=PushShortPixel(quantum_info->endian,p,&pixel);
2068 SetPixelRed(q,ClampToQuantum((
double) QuantumRange*
2069 (
double) HalfToSinglePrecision(pixel)));
2070 p=PushShortPixel(quantum_info->endian,p,&pixel);
2071 SetPixelGreen(q,ClampToQuantum((
double) QuantumRange*
2072 (
double) HalfToSinglePrecision(pixel)));
2073 p=PushShortPixel(quantum_info->endian,p,&pixel);
2074 SetPixelBlue(q,ClampToQuantum((
double) QuantumRange*
2075 (
double) HalfToSinglePrecision(pixel)));
2076 p=PushShortPixel(quantum_info->endian,p,&pixel);
2077 SetPixelIndex(indexes+x,ClampToQuantum((
double) QuantumRange*
2078 (
double) HalfToSinglePrecision(pixel)));
2079 p=PushShortPixel(quantum_info->endian,p,&pixel);
2080 SetPixelOpacity(q,ClampToQuantum((
double) QuantumRange*
2081 (
double) HalfToSinglePrecision(pixel)));
2082 p+=(ptrdiff_t) quantum_info->pad;
2087 for (x=0; x < (ssize_t) number_pixels; x++)
2089 p=PushShortPixel(quantum_info->endian,p,&pixel);
2090 SetPixelRed(q,ScaleShortToQuantum(pixel));
2091 p=PushShortPixel(quantum_info->endian,p,&pixel);
2092 SetPixelGreen(q,ScaleShortToQuantum(pixel));
2093 p=PushShortPixel(quantum_info->endian,p,&pixel);
2094 SetPixelBlue(q,ScaleShortToQuantum(pixel));
2095 p=PushShortPixel(quantum_info->endian,p,&pixel);
2096 SetPixelIndex(indexes+x,ScaleShortToQuantum(pixel));
2097 p=PushShortPixel(quantum_info->endian,p,&pixel);
2098 SetPixelOpacity(q,ScaleShortToQuantum(pixel));
2099 p+=(ptrdiff_t) quantum_info->pad;
2106 if (quantum_info->format == FloatingPointQuantumFormat)
2111 for (x=0; x < (ssize_t) number_pixels; x++)
2113 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
2114 SetPixelRed(q,ClampToQuantum(pixel));
2115 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
2116 SetPixelGreen(q,ClampToQuantum(pixel));
2117 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
2118 SetPixelBlue(q,ClampToQuantum(pixel));
2119 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
2120 SetPixelIndex(indexes+x,ClampToQuantum(pixel));
2121 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
2122 SetPixelOpacity(q,ClampToQuantum(pixel));
2123 p+=(ptrdiff_t) quantum_info->pad;
2128 for (x=0; x < (ssize_t) number_pixels; x++)
2130 p=PushLongPixel(quantum_info->endian,p,&pixel);
2131 SetPixelRed(q,ScaleLongToQuantum(pixel));
2132 p=PushLongPixel(quantum_info->endian,p,&pixel);
2133 SetPixelGreen(q,ScaleLongToQuantum(pixel));
2134 p=PushLongPixel(quantum_info->endian,p,&pixel);
2135 SetPixelBlue(q,ScaleLongToQuantum(pixel));
2136 p=PushLongPixel(quantum_info->endian,p,&pixel);
2137 SetPixelIndex(indexes+x,ScaleLongToQuantum(pixel));
2138 p=PushLongPixel(quantum_info->endian,p,&pixel);
2139 SetPixelOpacity(q,ScaleLongToQuantum(pixel));
2140 p+=(ptrdiff_t) quantum_info->pad;
2147 if (quantum_info->format == FloatingPointQuantumFormat)
2152 for (x=0; x < (ssize_t) number_pixels; x++)
2154 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
2155 SetPixelRed(q,ClampToQuantum(pixel));
2156 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
2157 SetPixelGreen(q,ClampToQuantum(pixel));
2158 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
2159 SetPixelBlue(q,ClampToQuantum(pixel));
2160 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
2161 SetPixelIndex(indexes+x,ClampToQuantum(pixel));
2162 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
2163 SetPixelOpacity(q,ClampToQuantum(pixel));
2164 p+=(ptrdiff_t) quantum_info->pad;
2173 if (quantum_info->format == FloatingPointQuantumFormat)
2178 for (x=0; x < (ssize_t) number_pixels; x++)
2180 p=PushDoublePixel(quantum_info,p,&pixel);
2181 SetPixelRed(q,ClampToQuantum(pixel));
2182 p=PushDoublePixel(quantum_info,p,&pixel);
2183 SetPixelGreen(q,ClampToQuantum(pixel));
2184 p=PushDoublePixel(quantum_info,p,&pixel);
2185 SetPixelBlue(q,ClampToQuantum(pixel));
2186 p=PushDoublePixel(quantum_info,p,&pixel);
2187 SetPixelIndex(indexes+x,ClampToQuantum(pixel));
2188 p=PushDoublePixel(quantum_info,p,&pixel);
2189 SetPixelOpacity(q,ClampToQuantum(pixel));
2190 p+=(ptrdiff_t) quantum_info->pad;
2199 range=GetQuantumRange(image->depth);
2200 for (x=0; x < (ssize_t) number_pixels; x++)
2202 p=PushQuantumPixel(quantum_info,p,&pixel);
2203 SetPixelRed(q,ScaleAnyToQuantum(pixel,range));
2204 p=PushQuantumPixel(quantum_info,p,&pixel);
2205 SetPixelGreen(q,ScaleAnyToQuantum(pixel,range));
2206 p=PushQuantumPixel(quantum_info,p,&pixel);
2207 SetPixelBlue(q,ScaleAnyToQuantum(pixel,range));
2208 p=PushQuantumPixel(quantum_info,p,&pixel);
2209 SetPixelIndex(indexes+x,ScaleAnyToQuantum(pixel,range));
2210 p=PushQuantumPixel(quantum_info,p,&pixel);
2211 SetPixelOpacity(q,ScaleAnyToQuantum(pixel,range));
2220 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
2236 switch (quantum_info->depth)
2246 if (quantum_info->min_is_white != MagickFalse)
2251 for (x=0; x < ((ssize_t) number_pixels-7); x+=8)
2253 for (bit=0; bit < 8; bit++)
2255 SetPixelRed(q,((*p) & (1 << (7-bit))) == 0 ? black : white);
2256 SetPixelGreen(q,GetPixelRed(q));
2257 SetPixelBlue(q,GetPixelRed(q));
2262 for (bit=0; bit < (ssize_t) (number_pixels % 8); bit++)
2264 SetPixelRed(q,((*p) & (0x01 << (7-bit))) == 0 ? black : white);
2265 SetPixelGreen(q,GetPixelRed(q));
2266 SetPixelBlue(q,GetPixelRed(q));
2278 range=GetQuantumRange(quantum_info->depth);
2279 for (x=0; x < ((ssize_t) number_pixels-1); x+=2)
2281 pixel=(
unsigned char) ((*p >> 4) & 0xf);
2282 SetPixelRed(q,ScaleAnyToQuantum(pixel,range));
2283 SetPixelGreen(q,GetPixelRed(q));
2284 SetPixelBlue(q,GetPixelRed(q));
2286 pixel=(
unsigned char) ((*p) & 0xf);
2287 SetPixelRed(q,ScaleAnyToQuantum(pixel,range));
2288 SetPixelGreen(q,GetPixelRed(q));
2289 SetPixelBlue(q,GetPixelRed(q));
2293 for (bit=0; bit < (ssize_t) (number_pixels % 2); bit++)
2295 pixel=(
unsigned char) (*p++ >> 4);
2296 SetPixelRed(q,ScaleAnyToQuantum(pixel,range));
2297 SetPixelGreen(q,GetPixelRed(q));
2298 SetPixelBlue(q,GetPixelRed(q));
2308 if (quantum_info->min_is_white != MagickFalse)
2310 for (x=0; x < (ssize_t) number_pixels; x++)
2312 p=PushCharPixel(p,&pixel);
2313 SetPixelRed(q,QuantumRange-ScaleCharToQuantum(pixel));
2314 SetPixelGreen(q,GetPixelRed(q));
2315 SetPixelBlue(q,GetPixelRed(q));
2316 SetPixelOpacity(q,OpaqueOpacity);
2317 p+=(ptrdiff_t) quantum_info->pad;
2322 for (x=0; x < (ssize_t) number_pixels; x++)
2324 p=PushCharPixel(p,&pixel);
2325 SetPixelRed(q,ScaleCharToQuantum(pixel));
2326 SetPixelGreen(q,GetPixelRed(q));
2327 SetPixelBlue(q,GetPixelRed(q));
2328 SetPixelOpacity(q,OpaqueOpacity);
2329 p+=(ptrdiff_t) quantum_info->pad;
2336 range=GetQuantumRange(quantum_info->depth);
2337 if (quantum_info->pack == MagickFalse)
2339 if (image->endian == LSBEndian)
2341 for (x=0; x < (ssize_t) (number_pixels-2); x+=3)
2343 p=PushLongPixel(quantum_info->endian,p,&pixel);
2344 SetPixelRed(q,ScaleAnyToQuantum((pixel >> 22) & 0x3ff,range));
2345 SetPixelGreen(q,GetPixelRed(q));
2346 SetPixelBlue(q,GetPixelRed(q));
2348 SetPixelRed(q,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,range));
2349 SetPixelGreen(q,GetPixelRed(q));
2350 SetPixelBlue(q,GetPixelRed(q));
2352 SetPixelRed(q,ScaleAnyToQuantum((pixel >> 2) & 0x3ff,range));
2353 SetPixelGreen(q,GetPixelRed(q));
2354 SetPixelBlue(q,GetPixelRed(q));
2355 p+=(ptrdiff_t) quantum_info->pad;
2358 if (x++ < (ssize_t) (number_pixels-1))
2360 p=PushLongPixel(quantum_info->endian,p,&pixel);
2361 SetPixelRed(q,ScaleAnyToQuantum((pixel >> 22) & 0x3ff,range));
2362 SetPixelGreen(q,GetPixelRed(q));
2363 SetPixelBlue(q,GetPixelRed(q));
2366 if (x++ < (ssize_t) number_pixels)
2368 SetPixelRed(q,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,range));
2369 SetPixelGreen(q,GetPixelRed(q));
2370 SetPixelBlue(q,GetPixelRed(q));
2375 for (x=0; x < (ssize_t) (number_pixels-2); x+=3)
2377 p=PushLongPixel(quantum_info->endian,p,&pixel);
2378 SetPixelRed(q,ScaleAnyToQuantum((pixel >> 2) & 0x3ff,range));
2379 SetPixelGreen(q,GetPixelRed(q));
2380 SetPixelBlue(q,GetPixelRed(q));
2382 SetPixelRed(q,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,range));
2383 SetPixelGreen(q,GetPixelRed(q));
2384 SetPixelBlue(q,GetPixelRed(q));
2386 SetPixelRed(q,ScaleAnyToQuantum((pixel >> 22) & 0x3ff,range));
2387 SetPixelGreen(q,GetPixelRed(q));
2388 SetPixelBlue(q,GetPixelRed(q));
2389 p+=(ptrdiff_t) quantum_info->pad;
2392 if (x++ < (ssize_t) (number_pixels-1))
2394 p=PushLongPixel(quantum_info->endian,p,&pixel);
2395 SetPixelRed(q,ScaleAnyToQuantum((pixel >> 2) & 0x3ff,range));
2396 SetPixelGreen(q,GetPixelRed(q));
2397 SetPixelBlue(q,GetPixelRed(q));
2400 if (x++ < (ssize_t) number_pixels)
2402 SetPixelRed(q,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,range));
2403 SetPixelGreen(q,GetPixelRed(q));
2404 SetPixelBlue(q,GetPixelRed(q));
2409 for (x=0; x < (ssize_t) number_pixels; x++)
2411 p=PushQuantumPixel(quantum_info,p,&pixel);
2412 SetPixelRed(q,ScaleAnyToQuantum(pixel,range));
2413 SetPixelGreen(q,GetPixelRed(q));
2414 SetPixelBlue(q,GetPixelRed(q));
2415 p+=(ptrdiff_t) quantum_info->pad;
2422 range=GetQuantumRange(quantum_info->depth);
2423 if (quantum_info->pack == MagickFalse)
2428 for (x=0; x < (ssize_t) (number_pixels-1); x+=2)
2430 p=PushShortPixel(quantum_info->endian,p,&pixel);
2431 SetPixelRed(q,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),range));
2432 SetPixelGreen(q,GetPixelRed(q));
2433 SetPixelBlue(q,GetPixelRed(q));
2435 p=PushShortPixel(quantum_info->endian,p,&pixel);
2436 SetPixelRed(q,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),range));
2437 SetPixelGreen(q,GetPixelRed(q));
2438 SetPixelBlue(q,GetPixelRed(q));
2439 p+=(ptrdiff_t) quantum_info->pad;
2442 for (bit=0; bit < (ssize_t) (number_pixels % 2); bit++)
2444 p=PushShortPixel(quantum_info->endian,p,&pixel);
2445 SetPixelRed(q,ScaleAnyToQuantum((QuantumAny)
2446 (pixel >> 4),range));
2447 SetPixelGreen(q,GetPixelRed(q));
2448 SetPixelBlue(q,GetPixelRed(q));
2449 p+=(ptrdiff_t) quantum_info->pad;
2456 for (x=0; x < (ssize_t) number_pixels; x++)
2458 p=PushQuantumPixel(quantum_info,p,&pixel);
2459 SetPixelRed(q,ScaleAnyToQuantum(pixel,range));
2460 SetPixelGreen(q,GetPixelRed(q));
2461 SetPixelBlue(q,GetPixelRed(q));
2462 p+=(ptrdiff_t) quantum_info->pad;
2472 if (quantum_info->min_is_white != MagickFalse)
2474 for (x=0; x < (ssize_t) number_pixels; x++)
2476 p=PushShortPixel(quantum_info->endian,p,&pixel);
2477 SetPixelRed(q,QuantumRange-ScaleShortToQuantum(pixel));
2478 SetPixelGreen(q,GetPixelRed(q));
2479 SetPixelBlue(q,GetPixelRed(q));
2480 p+=(ptrdiff_t) quantum_info->pad;
2485 if (quantum_info->format == FloatingPointQuantumFormat)
2487 for (x=0; x < (ssize_t) number_pixels; x++)
2489 p=PushShortPixel(quantum_info->endian,p,&pixel);
2490 SetPixelRed(q,ClampToQuantum((
double) QuantumRange*
2491 (
double) HalfToSinglePrecision(pixel)));
2492 SetPixelGreen(q,GetPixelRed(q));
2493 SetPixelBlue(q,GetPixelRed(q));
2494 p+=(ptrdiff_t) quantum_info->pad;
2499 if (quantum_info->format == SignedQuantumFormat)
2501 for (x=0; x < (ssize_t) number_pixels; x++)
2503 p=PushShortPixel(quantum_info->endian,p,&pixel);
2504 pixel=(
unsigned short) (((
unsigned int) pixel+32768) % 65536);
2505 SetPixelRed(q,ScaleShortToQuantum(pixel));
2506 SetPixelGreen(q,GetPixelRed(q));
2507 SetPixelBlue(q,GetPixelRed(q));
2508 p+=(ptrdiff_t) quantum_info->pad;
2513 for (x=0; x < (ssize_t) number_pixels; x++)
2515 p=PushShortPixel(quantum_info->endian,p,&pixel);
2516 SetPixelRed(q,ScaleShortToQuantum(pixel));
2517 SetPixelGreen(q,GetPixelRed(q));
2518 SetPixelBlue(q,GetPixelRed(q));
2519 p+=(ptrdiff_t) quantum_info->pad;
2526 if (quantum_info->format == FloatingPointQuantumFormat)
2531 for (x=0; x < (ssize_t) number_pixels; x++)
2533 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
2534 SetPixelRed(q,ClampToQuantum(pixel));
2535 SetPixelGreen(q,GetPixelRed(q));
2536 SetPixelBlue(q,GetPixelRed(q));
2537 p+=(ptrdiff_t) quantum_info->pad;
2542 for (x=0; x < (ssize_t) number_pixels; x++)
2544 p=PushLongPixel(quantum_info->endian,p,&pixel);
2545 SetPixelRed(q,ScaleLongToQuantum(pixel));
2546 SetPixelGreen(q,GetPixelRed(q));
2547 SetPixelBlue(q,GetPixelRed(q));
2548 p+=(ptrdiff_t) quantum_info->pad;
2555 if (quantum_info->format == FloatingPointQuantumFormat)
2560 for (x=0; x < (ssize_t) number_pixels; x++)
2562 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
2563 SetPixelRed(q,ClampToQuantum(pixel));
2564 SetPixelGreen(q,GetPixelRed(q));
2565 SetPixelBlue(q,GetPixelRed(q));
2566 p+=(ptrdiff_t) quantum_info->pad;
2575 if (quantum_info->format == FloatingPointQuantumFormat)
2580 for (x=0; x < (ssize_t) number_pixels; x++)
2582 p=PushDoublePixel(quantum_info,p,&pixel);
2583 SetPixelRed(q,ClampToQuantum(pixel));
2584 SetPixelGreen(q,GetPixelRed(q));
2585 SetPixelBlue(q,GetPixelRed(q));
2586 p+=(ptrdiff_t) quantum_info->pad;
2595 range=GetQuantumRange(quantum_info->depth);
2596 for (x=0; x < (ssize_t) number_pixels; x++)
2598 p=PushQuantumPixel(quantum_info,p,&pixel);
2599 SetPixelRed(q,ScaleAnyToQuantum(pixel,range));
2600 SetPixelGreen(q,GetPixelRed(q));
2601 SetPixelBlue(q,GetPixelRed(q));
2602 p+=(ptrdiff_t) quantum_info->pad;
2610static void ImportGrayAlphaQuantum(
QuantumInfo *quantum_info,
2611 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
2626 switch (quantum_info->depth)
2634 for (x=((ssize_t) number_pixels-3); x > 0; x-=4)
2636 for (bit=0; bit < 8; bit+=2)
2638 pixel=(
unsigned char) (((*p) & (1 << (7-bit))) != 0 ? 0x00 : 0x01);
2639 SetPixelRed(q,pixel == 0 ? 0 : QuantumRange);
2640 SetPixelGreen(q,GetPixelRed(q));
2641 SetPixelBlue(q,GetPixelRed(q));
2642 SetPixelOpacity(q,((*p) & (1UL << (
unsigned char) (6-bit))) == 0 ?
2643 TransparentOpacity : OpaqueOpacity);
2648 if ((number_pixels % 4) != 0)
2649 for (bit=3; bit >= (ssize_t) (4-(number_pixels % 4)); bit-=2)
2651 pixel=(
unsigned char) (((*p) & (1 << (7-bit))) != 0 ? 0x00 : 0x01);
2652 SetPixelRed(q,pixel != 0 ? 0 : QuantumRange);
2653 SetPixelGreen(q,GetPixelRed(q));
2654 SetPixelBlue(q,GetPixelRed(q));
2655 SetPixelOpacity(q,((*p) & (1UL << (
unsigned char) (6-bit))) == 0 ?
2656 TransparentOpacity : OpaqueOpacity);
2668 range=GetQuantumRange(quantum_info->depth);
2669 for (x=0; x < (ssize_t) number_pixels; x++)
2671 pixel=(
unsigned char) ((*p >> 4) & 0xf);
2672 SetPixelRed(q,ScaleAnyToQuantum(pixel,range));
2673 SetPixelGreen(q,GetPixelRed(q));
2674 SetPixelBlue(q,GetPixelRed(q));
2675 pixel=(
unsigned char) ((*p) & 0xf);
2676 SetPixelAlpha(q,ScaleAnyToQuantum(pixel,range));
2687 for (x=0; x < (ssize_t) number_pixels; x++)
2689 p=PushCharPixel(p,&pixel);
2690 SetPixelRed(q,ScaleCharToQuantum(pixel));
2691 SetPixelGreen(q,GetPixelRed(q));
2692 SetPixelBlue(q,GetPixelRed(q));
2693 p=PushCharPixel(p,&pixel);
2694 SetPixelAlpha(q,ScaleCharToQuantum(pixel));
2695 p+=(ptrdiff_t) quantum_info->pad;
2702 range=GetQuantumRange(quantum_info->depth);
2703 for (x=0; x < (ssize_t) number_pixels; x++)
2705 p=PushQuantumPixel(quantum_info,p,&pixel);
2706 SetPixelRed(q,ScaleAnyToQuantum(pixel,range));
2707 SetPixelGreen(q,GetPixelRed(q));
2708 SetPixelBlue(q,GetPixelRed(q));
2709 p=PushQuantumPixel(quantum_info,p,&pixel);
2710 SetPixelOpacity(q,ScaleAnyToQuantum(pixel,range));
2711 p+=(ptrdiff_t) quantum_info->pad;
2718 range=GetQuantumRange(quantum_info->depth);
2719 for (x=0; x < (ssize_t) number_pixels; x++)
2721 p=PushQuantumPixel(quantum_info,p,&pixel);
2722 SetPixelRed(q,ScaleAnyToQuantum(pixel,range));
2723 SetPixelGreen(q,GetPixelRed(q));
2724 SetPixelBlue(q,GetPixelRed(q));
2725 p=PushQuantumPixel(quantum_info,p,&pixel);
2726 SetPixelOpacity(q,ScaleAnyToQuantum(pixel,range));
2727 p+=(ptrdiff_t) quantum_info->pad;
2737 if (quantum_info->format == FloatingPointQuantumFormat)
2739 for (x=0; x < (ssize_t) number_pixels; x++)
2741 p=PushShortPixel(quantum_info->endian,p,&pixel);
2742 SetPixelRed(q,ClampToQuantum((
double) QuantumRange*
2743 (
double) HalfToSinglePrecision(pixel)));
2744 SetPixelGreen(q,GetPixelRed(q));
2745 SetPixelBlue(q,GetPixelRed(q));
2746 p=PushShortPixel(quantum_info->endian,p,&pixel);
2747 SetPixelAlpha(q,ClampToQuantum((
double) QuantumRange*
2748 (
double) HalfToSinglePrecision(pixel)));
2749 p+=(ptrdiff_t) quantum_info->pad;
2754 for (x=0; x < (ssize_t) number_pixels; x++)
2756 p=PushShortPixel(quantum_info->endian,p,&pixel);
2757 SetPixelRed(q,ScaleShortToQuantum(pixel));
2758 SetPixelGreen(q,GetPixelRed(q));
2759 SetPixelBlue(q,GetPixelRed(q));
2760 p=PushShortPixel(quantum_info->endian,p,&pixel);
2761 SetPixelAlpha(q,ScaleShortToQuantum(pixel));
2762 p+=(ptrdiff_t) quantum_info->pad;
2769 if (quantum_info->format == FloatingPointQuantumFormat)
2774 for (x=0; x < (ssize_t) number_pixels; x++)
2776 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
2777 SetPixelRed(q,ClampToQuantum(pixel));
2778 SetPixelGreen(q,GetPixelRed(q));
2779 SetPixelBlue(q,GetPixelRed(q));
2780 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
2781 SetPixelAlpha(q,ClampToQuantum(pixel));
2782 p+=(ptrdiff_t) quantum_info->pad;
2787 for (x=0; x < (ssize_t) number_pixels; x++)
2789 p=PushLongPixel(quantum_info->endian,p,&pixel);
2790 SetPixelRed(q,ScaleLongToQuantum(pixel));
2791 SetPixelGreen(q,GetPixelRed(q));
2792 SetPixelBlue(q,GetPixelRed(q));
2793 p=PushLongPixel(quantum_info->endian,p,&pixel);
2794 SetPixelAlpha(q,ScaleLongToQuantum(pixel));
2795 p+=(ptrdiff_t) quantum_info->pad;
2802 if (quantum_info->format == FloatingPointQuantumFormat)
2807 for (x=0; x < (ssize_t) number_pixels; x++)
2809 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
2810 SetPixelRed(q,ClampToQuantum(pixel));
2811 SetPixelGreen(q,GetPixelRed(q));
2812 SetPixelBlue(q,GetPixelRed(q));
2813 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
2814 SetPixelAlpha(q,ClampToQuantum(pixel));
2815 p+=(ptrdiff_t) quantum_info->pad;
2824 if (quantum_info->format == FloatingPointQuantumFormat)
2829 for (x=0; x < (ssize_t) number_pixels; x++)
2831 p=PushDoublePixel(quantum_info,p,&pixel);
2832 SetPixelRed(q,ClampToQuantum(pixel));
2833 SetPixelGreen(q,GetPixelRed(q));
2834 SetPixelBlue(q,GetPixelRed(q));
2835 p=PushDoublePixel(quantum_info,p,&pixel);
2836 SetPixelAlpha(q,ClampToQuantum(pixel));
2837 p+=(ptrdiff_t) quantum_info->pad;
2849 range=GetQuantumRange(quantum_info->depth);
2850 for (x=0; x < (ssize_t) number_pixels; x++)
2852 p=PushQuantumPixel(quantum_info,p,&pixel);
2853 SetPixelRed(q,ScaleAnyToQuantum(pixel,range));
2854 SetPixelGreen(q,GetPixelRed(q));
2855 SetPixelBlue(q,GetPixelRed(q));
2856 p=PushQuantumPixel(quantum_info,p,&pixel);
2857 SetPixelAlpha(q,ScaleAnyToQuantum(pixel,range));
2858 p+=(ptrdiff_t) quantum_info->pad;
2866static void ImportGreenQuantum(
QuantumInfo *quantum_info,
2867 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
2876 switch (quantum_info->depth)
2883 for (x=0; x < (ssize_t) number_pixels; x++)
2885 p=PushCharPixel(p,&pixel);
2886 SetPixelGreen(q,ScaleCharToQuantum(pixel));
2887 p+=(ptrdiff_t) quantum_info->pad;
2897 if (quantum_info->format == FloatingPointQuantumFormat)
2899 for (x=0; x < (ssize_t) number_pixels; x++)
2901 p=PushShortPixel(quantum_info->endian,p,&pixel);
2902 SetPixelGreen(q,ClampToQuantum((
double) QuantumRange*(
double)
2903 HalfToSinglePrecision(pixel)));
2904 p+=(ptrdiff_t) quantum_info->pad;
2909 for (x=0; x < (ssize_t) number_pixels; x++)
2911 p=PushShortPixel(quantum_info->endian,p,&pixel);
2912 SetPixelGreen(q,ScaleShortToQuantum(pixel));
2913 p+=(ptrdiff_t) quantum_info->pad;
2920 if (quantum_info->format == FloatingPointQuantumFormat)
2925 for (x=0; x < (ssize_t) number_pixels; x++)
2927 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
2928 SetPixelGreen(q,ClampToQuantum(pixel));
2929 p+=(ptrdiff_t) quantum_info->pad;
2934 for (x=0; x < (ssize_t) number_pixels; x++)
2936 p=PushLongPixel(quantum_info->endian,p,&pixel);
2937 SetPixelGreen(q,ScaleLongToQuantum(pixel));
2938 p+=(ptrdiff_t) quantum_info->pad;
2945 if (quantum_info->format == FloatingPointQuantumFormat)
2950 for (x=0; x < (ssize_t) number_pixels; x++)
2952 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
2953 SetPixelGreen(q,ClampToQuantum(pixel));
2954 p+=(ptrdiff_t) quantum_info->pad;
2963 if (quantum_info->format == FloatingPointQuantumFormat)
2968 for (x=0; x < (ssize_t) number_pixels; x++)
2970 p=PushDoublePixel(quantum_info,p,&pixel);
2971 SetPixelGreen(q,ClampToQuantum(pixel));
2972 p+=(ptrdiff_t) quantum_info->pad;
2984 range=GetQuantumRange(quantum_info->depth);
2985 for (x=0; x < (ssize_t) number_pixels; x++)
2987 p=PushQuantumPixel(quantum_info,p,&pixel);
2988 SetPixelGreen(q,ScaleAnyToQuantum(pixel,range));
2989 p+=(ptrdiff_t) quantum_info->pad;
2997static void ImportIndexQuantum(
const Image *image,
QuantumInfo *quantum_info,
2998 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
2999 PixelPacket *magick_restrict q,IndexPacket *magick_restrict indexes,
3014 if (image->storage_class != PseudoClass)
3016 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
3017 "ColormappedImageRequired",
"`%s'",image->filename);
3020 range_exception=MagickFalse;
3021 switch (quantum_info->depth)
3028 for (x=0; x < ((ssize_t) number_pixels-7); x+=8)
3030 for (bit=0; bit < 8; bit++)
3032 if (quantum_info->min_is_white == MagickFalse)
3033 pixel=(
unsigned char) (((*p) & (1 << (7-bit))) == 0 ? 0x00 : 0x01);
3035 pixel=(
unsigned char) (((*p) & (1 << (7-bit))) != 0 ? 0x00 : 0x01);
3036 SetPixelIndex(indexes+x+bit,PushColormapIndex(image,pixel,
3038 SetPixelRGBO(q,image->colormap+(ssize_t) GetPixelIndex(
3044 for (bit=0; bit < (ssize_t) (number_pixels % 8); bit++)
3046 if (quantum_info->min_is_white == MagickFalse)
3047 pixel=(
unsigned char) (((*p) & (1 << (7-bit))) == 0 ? 0x00 : 0x01);
3049 pixel=(
unsigned char) (((*p) & (1 << (7-bit))) != 0 ? 0x00 : 0x01);
3050 SetPixelIndex(indexes+x+bit,PushColormapIndex(image,pixel,
3052 SetPixelRGBO(q,image->colormap+(ssize_t) GetPixelIndex(indexes+x+bit));
3062 for (x=0; x < ((ssize_t) number_pixels-1); x+=2)
3064 pixel=(
unsigned char) ((*p >> 4) & 0xf);
3065 SetPixelIndex(indexes+x,PushColormapIndex(image,pixel,
3067 SetPixelRGBO(q,image->colormap+(ssize_t) GetPixelIndex(indexes+x));
3069 pixel=(
unsigned char) ((*p) & 0xf);
3070 SetPixelIndex(indexes+x+1,PushColormapIndex(image,pixel,
3072 SetPixelRGBO(q,image->colormap+(ssize_t) GetPixelIndex(indexes+x+1));
3076 for (bit=0; bit < (ssize_t) (number_pixels % 2); bit++)
3078 pixel=(
unsigned char) ((*p++ >> 4) & 0xf);
3079 SetPixelIndex(indexes+x+bit,PushColormapIndex(image,pixel,
3081 SetPixelRGBO(q,image->colormap+(ssize_t) GetPixelIndex(indexes+x+bit));
3091 for (x=0; x < (ssize_t) number_pixels; x++)
3093 p=PushCharPixel(p,&pixel);
3094 SetPixelIndex(indexes+x,PushColormapIndex(image,pixel,
3096 SetPixelRGBO(q,image->colormap+(ssize_t) GetPixelIndex(indexes+x));
3097 p+=(ptrdiff_t) quantum_info->pad;
3107 if (quantum_info->format == FloatingPointQuantumFormat)
3109 for (x=0; x < (ssize_t) number_pixels; x++)
3111 p=PushShortPixel(quantum_info->endian,p,&pixel);
3112 SetPixelIndex(indexes+x,PushColormapIndex(image,(
size_t)
3113 ClampToQuantum((
double) QuantumRange* (
double)
3114 HalfToSinglePrecision(pixel)),&range_exception));
3115 SetPixelRGBO(q,image->colormap+(ssize_t) GetPixelIndex(indexes+x));
3116 p+=(ptrdiff_t) quantum_info->pad;
3121 for (x=0; x < (ssize_t) number_pixels; x++)
3123 p=PushShortPixel(quantum_info->endian,p,&pixel);
3124 SetPixelIndex(indexes+x,PushColormapIndex(image,pixel,
3126 SetPixelRGBO(q,image->colormap+(ssize_t) GetPixelIndex(indexes+x));
3127 p+=(ptrdiff_t) quantum_info->pad;
3134 if (quantum_info->format == FloatingPointQuantumFormat)
3139 for (x=0; x < (ssize_t) number_pixels; x++)
3141 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
3142 SetPixelIndex(indexes+x,PushColormapIndex(image,(
size_t)
3143 ClampToQuantum(pixel),&range_exception));
3144 SetPixelRGBO(q,image->colormap+(ssize_t) GetPixelIndex(indexes+x));
3145 p+=(ptrdiff_t) quantum_info->pad;
3150 for (x=0; x < (ssize_t) number_pixels; x++)
3152 p=PushLongPixel(quantum_info->endian,p,&pixel);
3153 SetPixelIndex(indexes+x,PushColormapIndex(image,pixel,
3155 SetPixelRGBO(q,image->colormap+(ssize_t) GetPixelIndex(indexes+x));
3156 p+=(ptrdiff_t) quantum_info->pad;
3163 if (quantum_info->format == FloatingPointQuantumFormat)
3168 for (x=0; x < (ssize_t) number_pixels; x++)
3170 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
3171 SetPixelIndex(indexes+x,PushColormapIndex(image,(
size_t)
3172 ClampToQuantum(pixel),&range_exception));
3173 SetPixelRGBO(q,image->colormap+(ssize_t) GetPixelIndex(indexes+x));
3174 p+=(ptrdiff_t) quantum_info->pad;
3183 if (quantum_info->format == FloatingPointQuantumFormat)
3188 for (x=0; x < (ssize_t) number_pixels; x++)
3190 p=PushDoublePixel(quantum_info,p,&pixel);
3191 SetPixelIndex(indexes+x,PushColormapIndex(image,(
size_t)
3192 ClampToQuantum(pixel),&range_exception));
3193 SetPixelRGBO(q,image->colormap+(ssize_t) GetPixelIndex(indexes+x));
3194 p+=(ptrdiff_t) quantum_info->pad;
3203 for (x=0; x < (ssize_t) number_pixels; x++)
3205 p=PushQuantumPixel(quantum_info,p,&pixel);
3206 SetPixelIndex(indexes+x,PushColormapIndex(image,pixel,
3208 SetPixelRGBO(q,image->colormap+(ssize_t) GetPixelIndex(indexes+x));
3209 p+=(ptrdiff_t) quantum_info->pad;
3215 if (range_exception != MagickFalse)
3216 (void) ThrowMagickException(exception,GetMagickModule(),CorruptImageError,
3217 "InvalidColormapIndex",
"`%s'",image->filename);
3220static void ImportIndexAlphaQuantum(
const Image *image,
3221 QuantumInfo *quantum_info,
const MagickSizeType number_pixels,
3222 const unsigned char *magick_restrict p,
PixelPacket *magick_restrict q,
3223 IndexPacket *magick_restrict indexes,
ExceptionInfo *exception)
3240 if (image->storage_class != PseudoClass)
3242 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
3243 "ColormappedImageRequired",
"`%s'",image->filename);
3246 range_exception=MagickFalse;
3247 switch (quantum_info->depth)
3254 for (x=((ssize_t) number_pixels-3); x > 0; x-=4)
3256 for (bit=0; bit < 8; bit+=2)
3258 if (quantum_info->min_is_white == MagickFalse)
3259 pixel=(
unsigned char) (((*p) & (1 << (7-bit))) == 0 ? 0x00 : 0x01);
3261 pixel=(
unsigned char) (((*p) & (1 << (7-bit))) != 0 ? 0x00 : 0x01);
3262 SetPixelIndex(indexes+x+bit/2,pixel == 0 ? 0 : 1);
3263 SetPixelRed(q,pixel == 0 ? 0 : QuantumRange);
3264 SetPixelGreen(q,GetPixelRed(q));
3265 SetPixelBlue(q,GetPixelRed(q));
3266 SetPixelOpacity(q,((*p) & (1UL << (
unsigned char) (6-bit))) == 0 ?
3267 TransparentOpacity : OpaqueOpacity);
3271 if ((number_pixels % 4) != 0)
3272 for (bit=0; bit < (ssize_t) (number_pixels % 4); bit+=2)
3274 if (quantum_info->min_is_white == MagickFalse)
3275 pixel=(
unsigned char) (((*p) & (1 << (7-bit))) == 0 ? 0x00 : 0x01);
3277 pixel=(
unsigned char) (((*p) & (1 << (7-bit))) != 0 ? 0x00 : 0x01);
3278 SetPixelIndex(indexes+x+bit/2,pixel == 0 ? 0 : 1);
3279 SetPixelRed(q,pixel == 0 ? 0 : QuantumRange);
3280 SetPixelGreen(q,GetPixelRed(q));
3281 SetPixelBlue(q,GetPixelRed(q));
3282 SetPixelOpacity(q,((*p) & (1UL << (
unsigned char) (6-bit))) == 0 ?
3283 TransparentOpacity : OpaqueOpacity);
3293 range=GetQuantumRange(quantum_info->depth);
3294 for (x=0; x < (ssize_t) number_pixels; x++)
3296 pixel=(
unsigned char) ((*p >> 4) & 0xf);
3297 SetPixelIndex(indexes+x,PushColormapIndex(image,pixel,
3299 SetPixelRGBO(q,image->colormap+(ssize_t) GetPixelIndex(indexes+x));
3300 pixel=(
unsigned char) ((*p) & 0xf);
3301 SetPixelAlpha(q,ScaleAnyToQuantum(pixel,range));
3312 for (x=0; x < (ssize_t) number_pixels; x++)
3314 p=PushCharPixel(p,&pixel);
3315 SetPixelIndex(indexes+x,PushColormapIndex(image,pixel,
3317 SetPixelRGBO(q,image->colormap+(ssize_t) GetPixelIndex(indexes+x));
3318 p=PushCharPixel(p,&pixel);
3319 SetPixelAlpha(q,ScaleCharToQuantum(pixel));
3320 p+=(ptrdiff_t) quantum_info->pad;
3330 if (quantum_info->format == FloatingPointQuantumFormat)
3332 for (x=0; x < (ssize_t) number_pixels; x++)
3334 p=PushShortPixel(quantum_info->endian,p,&pixel);
3335 SetPixelIndex(indexes+x,PushColormapIndex(image,(
size_t)
3336 ClampToQuantum((
double) QuantumRange*(
double)
3337 HalfToSinglePrecision(pixel)),&range_exception));
3338 SetPixelRGBO(q,image->colormap+(ssize_t) GetPixelIndex(indexes+x));
3339 p=PushShortPixel(quantum_info->endian,p,&pixel);
3340 SetPixelAlpha(q,ClampToQuantum((
double) QuantumRange*(
double)
3341 HalfToSinglePrecision(pixel)));
3342 p+=(ptrdiff_t) quantum_info->pad;
3347 for (x=0; x < (ssize_t) number_pixels; x++)
3349 p=PushShortPixel(quantum_info->endian,p,&pixel);
3350 SetPixelIndex(indexes+x,PushColormapIndex(image,pixel,
3352 SetPixelRGBO(q,image->colormap+(ssize_t) GetPixelIndex(indexes+x));
3353 p=PushShortPixel(quantum_info->endian,p,&pixel);
3354 SetPixelAlpha(q,ScaleShortToQuantum(pixel));
3355 p+=(ptrdiff_t) quantum_info->pad;
3362 if (quantum_info->format == FloatingPointQuantumFormat)
3367 for (x=0; x < (ssize_t) number_pixels; x++)
3369 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
3370 SetPixelIndex(indexes+x,PushColormapIndex(image,(
size_t)
3371 ClampToQuantum(pixel),&range_exception));
3372 SetPixelRGBO(q,image->colormap+(ssize_t) GetPixelIndex(indexes+x));
3373 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
3374 SetPixelAlpha(q,ClampToQuantum(pixel));
3375 p+=(ptrdiff_t) quantum_info->pad;
3380 for (x=0; x < (ssize_t) number_pixels; x++)
3382 p=PushLongPixel(quantum_info->endian,p,&pixel);
3383 SetPixelIndex(indexes+x,PushColormapIndex(image,pixel,
3385 SetPixelRGBO(q,image->colormap+(ssize_t) GetPixelIndex(indexes+x));
3386 p=PushLongPixel(quantum_info->endian,p,&pixel);
3387 SetPixelAlpha(q,ScaleLongToQuantum(pixel));
3388 p+=(ptrdiff_t) quantum_info->pad;
3395 if (quantum_info->format == FloatingPointQuantumFormat)
3400 for (x=0; x < (ssize_t) number_pixels; x++)
3402 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
3403 SetPixelIndex(indexes+x,PushColormapIndex(image,(
size_t)
3404 ClampToQuantum(pixel),&range_exception));
3405 SetPixelRGBO(q,image->colormap+(ssize_t) GetPixelIndex(indexes+x));
3406 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
3407 SetPixelAlpha(q,ClampToQuantum(pixel));
3408 p+=(ptrdiff_t) quantum_info->pad;
3417 if (quantum_info->format == FloatingPointQuantumFormat)
3422 for (x=0; x < (ssize_t) number_pixels; x++)
3424 p=PushDoublePixel(quantum_info,p,&pixel);
3425 SetPixelIndex(indexes+x,PushColormapIndex(image,(
size_t)
3426 ClampToQuantum(pixel),&range_exception));
3427 SetPixelRGBO(q,image->colormap+(ssize_t) GetPixelIndex(indexes+x));
3428 p=PushDoublePixel(quantum_info,p,&pixel);
3429 SetPixelAlpha(q,ClampToQuantum(pixel));
3430 p+=(ptrdiff_t) quantum_info->pad;
3439 range=GetQuantumRange(quantum_info->depth);
3440 for (x=0; x < (ssize_t) number_pixels; x++)
3442 p=PushQuantumPixel(quantum_info,p,&pixel);
3443 SetPixelIndex(indexes+x,PushColormapIndex(image,pixel,
3445 SetPixelRGBO(q,image->colormap+(ssize_t) GetPixelIndex(indexes+x));
3446 p=PushQuantumPixel(quantum_info,p,&pixel);
3447 SetPixelAlpha(q,ScaleAnyToQuantum(pixel,range));
3448 p+=(ptrdiff_t) quantum_info->pad;
3454 if (range_exception != MagickFalse)
3455 (void) ThrowMagickException(exception,GetMagickModule(),CorruptImageError,
3456 "InvalidColormapIndex",
"`%s'",image->filename);
3459static void ImportRedQuantum(
QuantumInfo *quantum_info,
3460 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
3469 switch (quantum_info->depth)
3476 for (x=0; x < (ssize_t) number_pixels; x++)
3478 p=PushCharPixel(p,&pixel);
3479 SetPixelRed(q,ScaleCharToQuantum(pixel));
3480 p+=(ptrdiff_t) quantum_info->pad;
3490 if (quantum_info->format == FloatingPointQuantumFormat)
3492 for (x=0; x < (ssize_t) number_pixels; x++)
3494 p=PushShortPixel(quantum_info->endian,p,&pixel);
3495 SetPixelRed(q,ClampToQuantum((
double) QuantumRange*
3496 (
double) HalfToSinglePrecision(pixel)));
3497 p+=(ptrdiff_t) quantum_info->pad;
3502 for (x=0; x < (ssize_t) number_pixels; x++)
3504 p=PushShortPixel(quantum_info->endian,p,&pixel);
3505 SetPixelRed(q,ScaleShortToQuantum(pixel));
3506 p+=(ptrdiff_t) quantum_info->pad;
3513 if (quantum_info->format == FloatingPointQuantumFormat)
3518 for (x=0; x < (ssize_t) number_pixels; x++)
3520 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
3521 SetPixelRed(q,ClampToQuantum(pixel));
3522 p+=(ptrdiff_t) quantum_info->pad;
3527 for (x=0; x < (ssize_t) number_pixels; x++)
3529 p=PushLongPixel(quantum_info->endian,p,&pixel);
3530 SetPixelRed(q,ScaleLongToQuantum(pixel));
3531 p+=(ptrdiff_t) quantum_info->pad;
3538 if (quantum_info->format == FloatingPointQuantumFormat)
3543 for (x=0; x < (ssize_t) number_pixels; x++)
3545 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
3546 SetPixelRed(q,ClampToQuantum(pixel));
3547 p+=(ptrdiff_t) quantum_info->pad;
3556 if (quantum_info->format == FloatingPointQuantumFormat)
3561 for (x=0; x < (ssize_t) number_pixels; x++)
3563 p=PushDoublePixel(quantum_info,p,&pixel);
3564 SetPixelRed(q,ClampToQuantum(pixel));
3565 p+=(ptrdiff_t) quantum_info->pad;
3577 range=GetQuantumRange(quantum_info->depth);
3578 for (x=0; x < (ssize_t) number_pixels; x++)
3580 p=PushQuantumPixel(quantum_info,p,&pixel);
3581 SetPixelRed(q,ScaleAnyToQuantum(pixel,range));
3582 p+=(ptrdiff_t) quantum_info->pad;
3590static void ImportRGBQuantum(
QuantumInfo *quantum_info,
3591 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
3606 switch (quantum_info->depth)
3613 for (x=0; x < (ssize_t) number_pixels; x++)
3615 p=PushCharPixel(p,&pixel);
3616 SetPixelRed(q,ScaleCharToQuantum(pixel));
3617 p=PushCharPixel(p,&pixel);
3618 SetPixelGreen(q,ScaleCharToQuantum(pixel));
3619 p=PushCharPixel(p,&pixel);
3620 SetPixelBlue(q,ScaleCharToQuantum(pixel));
3621 SetPixelOpacity(q,OpaqueOpacity);
3622 p+=(ptrdiff_t) quantum_info->pad;
3629 range=GetQuantumRange(quantum_info->depth);
3630 if (quantum_info->pack == MagickFalse)
3632 for (x=0; x < (ssize_t) number_pixels; x++)
3634 p=PushLongPixel(quantum_info->endian,p,&pixel);
3635 SetPixelRed(q,ScaleAnyToQuantum((pixel >> 22) & 0x3ff,range));
3636 SetPixelGreen(q,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,range));
3637 SetPixelBlue(q,ScaleAnyToQuantum((pixel >> 2) & 0x3ff,range));
3638 p+=(ptrdiff_t) quantum_info->pad;
3643 if (quantum_info->quantum == 32U)
3645 for (x=0; x < (ssize_t) number_pixels; x++)
3647 p=PushQuantumLongPixel(quantum_info,p,&pixel);
3648 SetPixelRed(q,ScaleAnyToQuantum(pixel,range));
3649 p=PushQuantumLongPixel(quantum_info,p,&pixel);
3650 SetPixelGreen(q,ScaleAnyToQuantum(pixel,range));
3651 p=PushQuantumLongPixel(quantum_info,p,&pixel);
3652 SetPixelBlue(q,ScaleAnyToQuantum(pixel,range));
3657 for (x=0; x < (ssize_t) number_pixels; x++)
3659 p=PushQuantumPixel(quantum_info,p,&pixel);
3660 SetPixelRed(q,ScaleAnyToQuantum(pixel,range));
3661 p=PushQuantumPixel(quantum_info,p,&pixel);
3662 SetPixelGreen(q,ScaleAnyToQuantum(pixel,range));
3663 p=PushQuantumPixel(quantum_info,p,&pixel);
3664 SetPixelBlue(q,ScaleAnyToQuantum(pixel,range));
3671 range=GetQuantumRange(quantum_info->depth);
3672 if (quantum_info->pack == MagickFalse)
3677 for (x=0; x < (ssize_t) (3*number_pixels-1); x+=2)
3679 p=PushShortPixel(quantum_info->endian,p,&pixel);
3685 SetPixelRed(q,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3691 SetPixelGreen(q,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3697 SetPixelBlue(q,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3703 p=PushShortPixel(quantum_info->endian,p,&pixel);
3709 SetPixelRed(q,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3715 SetPixelGreen(q,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3721 SetPixelBlue(q,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3727 p+=(ptrdiff_t) quantum_info->pad;
3729 for (bit=0; bit < (ssize_t) (3*number_pixels % 2); bit++)
3731 p=PushShortPixel(quantum_info->endian,p,&pixel);
3732 switch ((x+bit) % 3)
3737 SetPixelRed(q,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3743 SetPixelGreen(q,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3749 SetPixelBlue(q,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3755 p+=(ptrdiff_t) quantum_info->pad;
3761 if (quantum_info->quantum == 32U)
3763 for (x=0; x < (ssize_t) number_pixels; x++)
3765 p=PushQuantumLongPixel(quantum_info,p,&pixel);
3766 SetPixelRed(q,ScaleAnyToQuantum(pixel,range));
3767 p=PushQuantumLongPixel(quantum_info,p,&pixel);
3768 SetPixelGreen(q,ScaleAnyToQuantum(pixel,range));
3769 p=PushQuantumLongPixel(quantum_info,p,&pixel);
3770 SetPixelBlue(q,ScaleAnyToQuantum(pixel,range));
3775 for (x=0; x < (ssize_t) number_pixels; x++)
3777 p=PushQuantumPixel(quantum_info,p,&pixel);
3778 SetPixelRed(q,ScaleAnyToQuantum(pixel,range));
3779 p=PushQuantumPixel(quantum_info,p,&pixel);
3780 SetPixelGreen(q,ScaleAnyToQuantum(pixel,range));
3781 p=PushQuantumPixel(quantum_info,p,&pixel);
3782 SetPixelBlue(q,ScaleAnyToQuantum(pixel,range));
3792 if (quantum_info->format == FloatingPointQuantumFormat)
3794 for (x=0; x < (ssize_t) number_pixels; x++)
3796 p=PushShortPixel(quantum_info->endian,p,&pixel);
3797 SetPixelRed(q,ClampToQuantum((
double) QuantumRange*
3798 (
double) HalfToSinglePrecision(pixel)));
3799 p=PushShortPixel(quantum_info->endian,p,&pixel);
3800 SetPixelGreen(q,ClampToQuantum((
double) QuantumRange*
3801 (
double) HalfToSinglePrecision(pixel)));
3802 p=PushShortPixel(quantum_info->endian,p,&pixel);
3803 SetPixelBlue(q,ClampToQuantum((
double) QuantumRange*
3804 (
double) HalfToSinglePrecision(pixel)));
3805 p+=(ptrdiff_t) quantum_info->pad;
3810 for (x=0; x < (ssize_t) number_pixels; x++)
3812 p=PushShortPixel(quantum_info->endian,p,&pixel);
3813 SetPixelRed(q,ScaleShortToQuantum(pixel));
3814 p=PushShortPixel(quantum_info->endian,p,&pixel);
3815 SetPixelGreen(q,ScaleShortToQuantum(pixel));
3816 p=PushShortPixel(quantum_info->endian,p,&pixel);
3817 SetPixelBlue(q,ScaleShortToQuantum(pixel));
3818 p+=(ptrdiff_t) quantum_info->pad;
3825 if (quantum_info->format == FloatingPointQuantumFormat)
3830 for (x=0; x < (ssize_t) number_pixels; x++)
3832 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
3833 SetPixelRed(q,ClampToQuantum(pixel));
3834 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
3835 SetPixelGreen(q,ClampToQuantum(pixel));
3836 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
3837 SetPixelBlue(q,ClampToQuantum(pixel));
3838 p+=(ptrdiff_t) quantum_info->pad;
3843 for (x=0; x < (ssize_t) number_pixels; x++)
3845 p=PushLongPixel(quantum_info->endian,p,&pixel);
3846 SetPixelRed(q,ScaleLongToQuantum(pixel));
3847 p=PushLongPixel(quantum_info->endian,p,&pixel);
3848 SetPixelGreen(q,ScaleLongToQuantum(pixel));
3849 p=PushLongPixel(quantum_info->endian,p,&pixel);
3850 SetPixelBlue(q,ScaleLongToQuantum(pixel));
3851 p+=(ptrdiff_t) quantum_info->pad;
3858 if (quantum_info->format == FloatingPointQuantumFormat)
3863 for (x=0; x < (ssize_t) number_pixels; x++)
3865 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
3866 SetPixelRed(q,ClampToQuantum(pixel));
3867 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
3868 SetPixelGreen(q,ClampToQuantum(pixel));
3869 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
3870 SetPixelBlue(q,ClampToQuantum(pixel));
3871 p+=(ptrdiff_t) quantum_info->pad;
3880 if (quantum_info->format == FloatingPointQuantumFormat)
3885 for (x=0; x < (ssize_t) number_pixels; x++)
3887 p=PushDoublePixel(quantum_info,p,&pixel);
3888 SetPixelRed(q,ClampToQuantum(pixel));
3889 p=PushDoublePixel(quantum_info,p,&pixel);
3890 SetPixelGreen(q,ClampToQuantum(pixel));
3891 p=PushDoublePixel(quantum_info,p,&pixel);
3892 SetPixelBlue(q,ClampToQuantum(pixel));
3893 p+=(ptrdiff_t) quantum_info->pad;
3902 range=GetQuantumRange(quantum_info->depth);
3903 for (x=0; x < (ssize_t) number_pixels; x++)
3905 p=PushQuantumPixel(quantum_info,p,&pixel);
3906 SetPixelRed(q,ScaleAnyToQuantum(pixel,range));
3907 p=PushQuantumPixel(quantum_info,p,&pixel);
3908 SetPixelGreen(q,ScaleAnyToQuantum(pixel,range));
3909 p=PushQuantumPixel(quantum_info,p,&pixel);
3910 SetPixelBlue(q,ScaleAnyToQuantum(pixel,range));
3918static void ImportRGBAQuantum(
QuantumInfo *quantum_info,
3919 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
3931 switch (quantum_info->depth)
3938 for (x=0; x < (ssize_t) number_pixels; x++)
3940 p=PushCharPixel(p,&pixel);
3941 SetPixelRed(q,ScaleCharToQuantum(pixel));
3942 p=PushCharPixel(p,&pixel);
3943 SetPixelGreen(q,ScaleCharToQuantum(pixel));
3944 p=PushCharPixel(p,&pixel);
3945 SetPixelBlue(q,ScaleCharToQuantum(pixel));
3946 p=PushCharPixel(p,&pixel);
3947 SetPixelAlpha(q,ScaleCharToQuantum(pixel));
3948 p+=(ptrdiff_t) quantum_info->pad;
3956 if (quantum_info->pack == MagickFalse)
3969 for (x=0; x < (ssize_t) number_pixels; x++)
3971 for (i=0; i < 4; i++)
3977 p=PushLongPixel(quantum_info->endian,p,&pixel);
3978 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
3979 (((pixel >> 22) & 0x3ff) << 6)));
3984 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
3985 (((pixel >> 12) & 0x3ff) << 6)));
3990 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
3991 (((pixel >> 2) & 0x3ff) << 6)));
3997 case 0: SetPixelRed(q,quantum);
break;
3998 case 1: SetPixelGreen(q,quantum);
break;
3999 case 2: SetPixelBlue(q,quantum);
break;
4000 case 3: SetPixelAlpha(q,quantum);
break;
4004 p+=(ptrdiff_t) quantum_info->pad;
4009 for (x=0; x < (ssize_t) number_pixels; x++)
4011 p=PushQuantumPixel(quantum_info,p,&pixel);
4012 SetPixelRed(q,ScaleShortToQuantum((
unsigned short) (pixel << 6)));
4013 p=PushQuantumPixel(quantum_info,p,&pixel);
4014 SetPixelGreen(q,ScaleShortToQuantum((
unsigned short) (pixel << 6)));
4015 p=PushQuantumPixel(quantum_info,p,&pixel);
4016 SetPixelBlue(q,ScaleShortToQuantum((
unsigned short) (pixel << 6)));
4017 p=PushQuantumPixel(quantum_info,p,&pixel);
4018 SetPixelAlpha(q,ScaleShortToQuantum((
unsigned short) (pixel << 6)));
4028 if (quantum_info->format == FloatingPointQuantumFormat)
4030 for (x=0; x < (ssize_t) number_pixels; x++)
4032 p=PushShortPixel(quantum_info->endian,p,&pixel);
4033 SetPixelRed(q,ClampToQuantum((
double) QuantumRange*(
double)
4034 HalfToSinglePrecision(pixel)));
4035 p=PushShortPixel(quantum_info->endian,p,&pixel);
4036 SetPixelGreen(q,ClampToQuantum((
double) QuantumRange*(
double)
4037 HalfToSinglePrecision(pixel)));
4038 p=PushShortPixel(quantum_info->endian,p,&pixel);
4039 SetPixelBlue(q,ClampToQuantum((
double) QuantumRange*(
double)
4040 HalfToSinglePrecision(pixel)));
4041 p=PushShortPixel(quantum_info->endian,p,&pixel);
4042 SetPixelAlpha(q,ClampToQuantum((
double) QuantumRange* (
double)
4043 HalfToSinglePrecision(pixel)));
4044 p+=(ptrdiff_t) quantum_info->pad;
4049 for (x=0; x < (ssize_t) number_pixels; x++)
4051 p=PushShortPixel(quantum_info->endian,p,&pixel);
4052 SetPixelRed(q,ScaleShortToQuantum(pixel));
4053 p=PushShortPixel(quantum_info->endian,p,&pixel);
4054 SetPixelGreen(q,ScaleShortToQuantum(pixel));
4055 p=PushShortPixel(quantum_info->endian,p,&pixel);
4056 SetPixelBlue(q,ScaleShortToQuantum(pixel));
4057 p=PushShortPixel(quantum_info->endian,p,&pixel);
4058 SetPixelAlpha(q,ScaleShortToQuantum(pixel));
4059 p+=(ptrdiff_t) quantum_info->pad;
4066 if (quantum_info->format == FloatingPointQuantumFormat)
4071 for (x=0; x < (ssize_t) number_pixels; x++)
4073 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
4074 SetPixelRed(q,ClampToQuantum(pixel));
4075 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
4076 SetPixelGreen(q,ClampToQuantum(pixel));
4077 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
4078 SetPixelBlue(q,ClampToQuantum(pixel));
4079 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
4080 SetPixelAlpha(q,ClampToQuantum(pixel));
4081 p+=(ptrdiff_t) quantum_info->pad;
4086 for (x=0; x < (ssize_t) number_pixels; x++)
4088 p=PushLongPixel(quantum_info->endian,p,&pixel);
4089 SetPixelRed(q,ScaleLongToQuantum(pixel));
4090 p=PushLongPixel(quantum_info->endian,p,&pixel);
4091 SetPixelGreen(q,ScaleLongToQuantum(pixel));
4092 p=PushLongPixel(quantum_info->endian,p,&pixel);
4093 SetPixelBlue(q,ScaleLongToQuantum(pixel));
4094 p=PushLongPixel(quantum_info->endian,p,&pixel);
4095 SetPixelAlpha(q,ScaleLongToQuantum(pixel));
4096 p+=(ptrdiff_t) quantum_info->pad;
4103 if (quantum_info->format == FloatingPointQuantumFormat)
4108 for (x=0; x < (ssize_t) number_pixels; x++)
4110 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
4111 SetPixelRed(q,ClampToQuantum(pixel));
4112 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
4113 SetPixelGreen(q,ClampToQuantum(pixel));
4114 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
4115 SetPixelBlue(q,ClampToQuantum(pixel));
4116 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
4117 SetPixelAlpha(q,ClampToQuantum(pixel));
4118 p+=(ptrdiff_t) quantum_info->pad;
4127 if (quantum_info->format == FloatingPointQuantumFormat)
4132 for (x=0; x < (ssize_t) number_pixels; x++)
4134 p=PushDoublePixel(quantum_info,p,&pixel);
4135 SetPixelRed(q,ClampToQuantum(pixel));
4136 p=PushDoublePixel(quantum_info,p,&pixel);
4137 SetPixelGreen(q,ClampToQuantum(pixel));
4138 p=PushDoublePixel(quantum_info,p,&pixel);
4139 SetPixelBlue(q,ClampToQuantum(pixel));
4140 p=PushDoublePixel(quantum_info,p,&pixel);
4141 SetPixelAlpha(q,ClampToQuantum(pixel));
4142 p+=(ptrdiff_t) quantum_info->pad;
4151 range=GetQuantumRange(quantum_info->depth);
4152 for (x=0; x < (ssize_t) number_pixels; x++)
4154 p=PushQuantumPixel(quantum_info,p,&pixel);
4155 SetPixelRed(q,ScaleAnyToQuantum(pixel,range));
4156 p=PushQuantumPixel(quantum_info,p,&pixel);
4157 SetPixelGreen(q,ScaleAnyToQuantum(pixel,range));
4158 p=PushQuantumPixel(quantum_info,p,&pixel);
4159 SetPixelBlue(q,ScaleAnyToQuantum(pixel,range));
4160 p=PushQuantumPixel(quantum_info,p,&pixel);
4161 SetPixelAlpha(q,ScaleAnyToQuantum(pixel,range));
4169static void ImportRGBOQuantum(
QuantumInfo *quantum_info,
4170 const MagickSizeType number_pixels,
const unsigned char *magick_restrict p,
4182 switch (quantum_info->depth)
4189 for (x=0; x < (ssize_t) number_pixels; x++)
4191 p=PushCharPixel(p,&pixel);
4192 SetPixelRed(q,ScaleCharToQuantum(pixel));
4193 p=PushCharPixel(p,&pixel);
4194 SetPixelGreen(q,ScaleCharToQuantum(pixel));
4195 p=PushCharPixel(p,&pixel);
4196 SetPixelBlue(q,ScaleCharToQuantum(pixel));
4197 p=PushCharPixel(p,&pixel);
4198 SetPixelOpacity(q,ScaleCharToQuantum(pixel));
4199 p+=(ptrdiff_t) quantum_info->pad;
4207 if (quantum_info->pack == MagickFalse)
4220 for (x=0; x < (ssize_t) number_pixels; x++)
4222 for (i=0; i < 4; i++)
4228 p=PushLongPixel(quantum_info->endian,p,&pixel);
4229 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
4230 (((pixel >> 22) & 0x3ff) << 6)));
4235 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
4236 (((pixel >> 12) & 0x3ff) << 6)));
4241 quantum=(size_t) (ScaleShortToQuantum((
unsigned short)
4242 (((pixel >> 2) & 0x3ff) << 6)));
4248 case 0: SetPixelRed(q,quantum);
break;
4249 case 1: SetPixelGreen(q,quantum);
break;
4250 case 2: SetPixelBlue(q,quantum);
break;
4251 case 3: SetPixelOpacity(q,quantum);
break;
4255 p+=(ptrdiff_t) quantum_info->pad;
4260 for (x=0; x < (ssize_t) number_pixels; x++)
4262 p=PushQuantumPixel(quantum_info,p,&pixel);
4263 SetPixelRed(q,ScaleShortToQuantum((
unsigned short) (pixel << 6)));
4264 p=PushQuantumPixel(quantum_info,p,&pixel);
4265 SetPixelGreen(q,ScaleShortToQuantum((
unsigned short) (pixel << 6)));
4266 p=PushQuantumPixel(quantum_info,p,&pixel);
4267 SetPixelBlue(q,ScaleShortToQuantum((
unsigned short) (pixel << 6)));
4268 p=PushQuantumPixel(quantum_info,p,&pixel);
4269 SetPixelOpacity(q,ScaleShortToQuantum((
unsigned short) (pixel << 6)));
4279 if (quantum_info->format == FloatingPointQuantumFormat)
4281 for (x=0; x < (ssize_t) number_pixels; x++)
4283 p=PushShortPixel(quantum_info->endian,p,&pixel);
4284 SetPixelRed(q,ClampToQuantum((
double) QuantumRange*(
double)
4285 HalfToSinglePrecision(pixel)));
4286 p=PushShortPixel(quantum_info->endian,p,&pixel);
4287 SetPixelGreen(q,ClampToQuantum((
double) QuantumRange*(
double)
4288 HalfToSinglePrecision(pixel)));
4289 p=PushShortPixel(quantum_info->endian,p,&pixel);
4290 SetPixelBlue(q,ClampToQuantum((
double) QuantumRange*(
double)
4291 HalfToSinglePrecision(pixel)));
4292 p=PushShortPixel(quantum_info->endian,p,&pixel);
4293 SetPixelOpacity(q,ClampToQuantum((
double) QuantumRange*(
double)
4294 HalfToSinglePrecision(pixel)));
4295 p+=(ptrdiff_t) quantum_info->pad;
4300 for (x=0; x < (ssize_t) number_pixels; x++)
4302 p=PushShortPixel(quantum_info->endian,p,&pixel);
4303 SetPixelRed(q,ScaleShortToQuantum(pixel));
4304 p=PushShortPixel(quantum_info->endian,p,&pixel);
4305 SetPixelGreen(q,ScaleShortToQuantum(pixel));
4306 p=PushShortPixel(quantum_info->endian,p,&pixel);
4307 SetPixelBlue(q,ScaleShortToQuantum(pixel));
4308 p=PushShortPixel(quantum_info->endian,p,&pixel);
4309 SetPixelOpacity(q,ScaleShortToQuantum(pixel));
4310 p+=(ptrdiff_t) quantum_info->pad;
4317 if (quantum_info->format == FloatingPointQuantumFormat)
4322 for (x=0; x < (ssize_t) number_pixels; x++)
4324 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
4325 SetPixelRed(q,ClampToQuantum(pixel));
4326 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
4327 SetPixelGreen(q,ClampToQuantum(pixel));
4328 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
4329 SetPixelBlue(q,ClampToQuantum(pixel));
4330 p=PushQuantumFloatPixel(quantum_info,p,&pixel);
4331 SetPixelOpacity(q,ClampToQuantum(pixel));
4332 p+=(ptrdiff_t) quantum_info->pad;
4337 for (x=0; x < (ssize_t) number_pixels; x++)
4339 p=PushLongPixel(quantum_info->endian,p,&pixel);
4340 SetPixelRed(q,ScaleLongToQuantum(pixel));
4341 p=PushLongPixel(quantum_info->endian,p,&pixel);
4342 SetPixelGreen(q,ScaleLongToQuantum(pixel));
4343 p=PushLongPixel(quantum_info->endian,p,&pixel);
4344 SetPixelBlue(q,ScaleLongToQuantum(pixel));
4345 p=PushLongPixel(quantum_info->endian,p,&pixel);
4346 SetPixelOpacity(q,ScaleLongToQuantum(pixel));
4347 p+=(ptrdiff_t) quantum_info->pad;
4354 if (quantum_info->format == FloatingPointQuantumFormat)
4359 for (x=0; x < (ssize_t) number_pixels; x++)
4361 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
4362 SetPixelRed(q,ClampToQuantum(pixel));
4363 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
4364 SetPixelGreen(q,ClampToQuantum(pixel));
4365 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
4366 SetPixelBlue(q,ClampToQuantum(pixel));
4367 p=PushQuantumFloat24Pixel(quantum_info,p,&pixel);
4368 SetPixelOpacity(q,ClampToQuantum(pixel));
4369 p+=(ptrdiff_t) quantum_info->pad;
4378 if (quantum_info->format == FloatingPointQuantumFormat)
4383 for (x=0; x < (ssize_t) number_pixels; x++)
4385 p=PushDoublePixel(quantum_info,p,&pixel);
4386 SetPixelRed(q,ClampToQuantum(pixel));
4387 p=PushDoublePixel(quantum_info,p,&pixel);
4388 SetPixelGreen(q,ClampToQuantum(pixel));
4389 p=PushDoublePixel(quantum_info,p,&pixel);
4390 SetPixelBlue(q,ClampToQuantum(pixel));
4391 p=PushDoublePixel(quantum_info,p,&pixel);
4392 SetPixelOpacity(q,ClampToQuantum(pixel));
4393 p+=(ptrdiff_t) quantum_info->pad;
4402 range=GetQuantumRange(quantum_info->depth);
4403 for (x=0; x < (ssize_t) number_pixels; x++)
4405 p=PushQuantumPixel(quantum_info,p,&pixel);
4406 SetPixelRed(q,ScaleAnyToQuantum(pixel,range));
4407 p=PushQuantumPixel(quantum_info,p,&pixel);
4408 SetPixelGreen(q,ScaleAnyToQuantum(pixel,range));
4409 p=PushQuantumPixel(quantum_info,p,&pixel);
4410 SetPixelBlue(q,ScaleAnyToQuantum(pixel,range));
4411 p=PushQuantumPixel(quantum_info,p,&pixel);
4412 SetPixelOpacity(q,ScaleAnyToQuantum(pixel,range));
4420MagickExport
size_t ImportQuantumPixels(
Image *image,
CacheView *image_view,
4421 const QuantumInfo *quantum_info,
const QuantumType quantum_type,
4422 const unsigned char *magick_restrict pixels,
ExceptionInfo *exception)
4431 *magick_restrict indexes;
4442 assert(image != (
Image *) NULL);
4443 assert(image->signature == MagickCoreSignature);
4445 assert(quantum_info->signature == MagickCoreSignature);
4446 if (IsEventLogging() != MagickFalse)
4447 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",image->filename);
4448 if (pixels == (
const unsigned char *) NULL)
4449 pixels=GetQuantumPixels(quantum_info);
4454 number_pixels=GetImageExtent(image);
4455 q=GetAuthenticPixelQueue(image);
4456 indexes=GetAuthenticIndexQueue(image);
4460 number_pixels=GetCacheViewExtent(image_view);
4461 q=GetCacheViewAuthenticPixelQueue(image_view);
4462 indexes=GetCacheViewAuthenticIndexQueue(image_view);
4465 extent=GetQuantumExtent(image,quantum_info,quantum_type);
4466 switch (quantum_type)
4470 ImportAlphaQuantum((
QuantumInfo *) quantum_info,number_pixels,p,q);
4475 ImportBGRQuantum((
QuantumInfo *) quantum_info,number_pixels,p,q);
4480 ImportBGRAQuantum((
QuantumInfo *) quantum_info,number_pixels,p,q);
4485 ImportBGROQuantum((
QuantumInfo *) quantum_info,number_pixels,p,q);
4490 ImportBlackQuantum(image,(
QuantumInfo *) quantum_info,number_pixels,p,q,
4497 ImportBlueQuantum((
QuantumInfo *) quantum_info,number_pixels,p,q);
4502 ImportCbYCrYQuantum(image,(
QuantumInfo *) quantum_info,number_pixels,p,
4508 ImportCMYKQuantum(image,(
QuantumInfo *) quantum_info,number_pixels,p,q,
4514 ImportCMYKAQuantum(image,(
QuantumInfo *) quantum_info,number_pixels,p,q,
4520 ImportCMYKOQuantum(image,(
QuantumInfo *) quantum_info,number_pixels,p,q,
4526 ImportGrayQuantum(image,(
QuantumInfo *) quantum_info,number_pixels,p,q);
4529 case GrayAlphaQuantum:
4531 ImportGrayAlphaQuantum((
QuantumInfo *) quantum_info,number_pixels,p,q);
4535 case MagentaQuantum:
4537 ImportGreenQuantum((
QuantumInfo *) quantum_info,number_pixels,p,q);
4542 ImportIndexQuantum(image,(
QuantumInfo *) quantum_info,number_pixels,p,q,
4546 case IndexAlphaQuantum:
4548 ImportIndexAlphaQuantum(image,(
QuantumInfo *) quantum_info,number_pixels,
4549 p,q,indexes,exception);
4555 ImportRedQuantum((
QuantumInfo *) quantum_info,number_pixels,p,q);
4561 ImportRGBQuantum((
QuantumInfo *) quantum_info,number_pixels,p,q);
4567 ImportRGBAQuantum((
QuantumInfo *) quantum_info,number_pixels,p,q);
4572 ImportRGBOQuantum((
QuantumInfo *) quantum_info,number_pixels,p,q);
4578 if ((quantum_type == CbYCrQuantum) || (quantum_type == CbYCrAQuantum))
4586 q=GetAuthenticPixelQueue(image);
4588 q=GetCacheViewAuthenticPixelQueue(image_view);
4589 for (x=0; x < (ssize_t) number_pixels; x++)
4591 quantum=GetPixelRed(q);
4592 SetPixelRed(q,GetPixelGreen(q));
4593 SetPixelGreen(q,quantum);
4597 if (quantum_info->alpha_type == AssociatedQuantumAlpha)
4608 q=GetAuthenticPixelQueue(image);
4610 q=GetCacheViewAuthenticPixelQueue(image_view);
4611 indexes=GetAuthenticIndexQueue(image);
4612 for (x=0; x < (ssize_t) number_pixels; x++)
4614 alpha=QuantumScale*(double) GetPixelAlpha(q);
4615 alpha=PerceptibleReciprocal(alpha);
4616 SetPixelRed(q,ClampToQuantum(alpha*(
double) GetPixelRed(q)));
4617 SetPixelGreen(q,ClampToQuantum(alpha*(
double) GetPixelGreen(q)));
4618 SetPixelBlue(q,ClampToQuantum(alpha*(
double) GetPixelBlue(q)));
4619 if (image->colorspace == CMYKColorspace)
4620 SetPixelBlack(indexes+x,ClampToQuantum(alpha*(
double) GetPixelBlack(