2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6 % QQQ U U AAA N N TTTTT U U M M %
7 % Q Q U U A A NN N T U U MM MM %
8 % Q Q U U AAAAA N N N T U U M M M %
9 % Q QQ U U A A N NN T U U M M %
10 % QQQQ UUU A A N N T UUU M M %
12 % IIIII M M PPPP OOO RRRR TTTTT %
13 % I MM MM P P O O R R T %
14 % I M M M PPPP O O RRRR T %
16 % IIIII M M P OOO R R T %
18 % MagickCore Methods to Import Quantum Pixels %
25 % Copyright 1999-2013 ImageMagick Studio LLC, a non-profit organization %
26 % dedicated to making software imaging solutions freely available. %
28 % You may not use this file except in compliance with the License. You may %
29 % obtain a copy of the License at %
31 % http://www.imagemagick.org/script/license.php %
33 % Unless required by applicable law or agreed to in writing, software %
34 % distributed under the License is distributed on an "AS IS" BASIS, %
35 % WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. %
36 % See the License for the specific language governing permissions and %
37 % limitations under the License. %
39 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
47 #include "MagickCore/studio.h"
48 #include "MagickCore/property.h"
49 #include "MagickCore/blob.h"
50 #include "MagickCore/blob-private.h"
51 #include "MagickCore/color-private.h"
52 #include "MagickCore/exception.h"
53 #include "MagickCore/exception-private.h"
54 #include "MagickCore/cache.h"
55 #include "MagickCore/constitute.h"
56 #include "MagickCore/delegate.h"
57 #include "MagickCore/geometry.h"
58 #include "MagickCore/list.h"
59 #include "MagickCore/magick.h"
60 #include "MagickCore/memory_.h"
61 #include "MagickCore/monitor.h"
62 #include "MagickCore/option.h"
63 #include "MagickCore/pixel.h"
64 #include "MagickCore/pixel-accessor.h"
65 #include "MagickCore/pixel-private.h"
66 #include "MagickCore/quantum.h"
67 #include "MagickCore/quantum-private.h"
68 #include "MagickCore/resource_.h"
69 #include "MagickCore/semaphore.h"
70 #include "MagickCore/statistic.h"
71 #include "MagickCore/stream.h"
72 #include "MagickCore/string_.h"
73 #include "MagickCore/utility.h"
76 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
80 % I m p o r t Q u a n t u m P i x e l s %
84 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
86 % ImportQuantumPixels() transfers one or more pixel components from a user
87 % supplied buffer into the image pixel cache of an image. The pixels are
88 % expected in network byte order. It returns MagickTrue if the pixels are
89 % successfully transferred, otherwise MagickFalse.
91 % The format of the ImportQuantumPixels method is:
93 % size_t ImportQuantumPixels(const Image *image,CacheView *image_view,
94 % QuantumInfo *quantum_info,const QuantumType quantum_type,
95 % const unsigned char *restrict pixels,ExceptionInfo *exception)
97 % A description of each parameter follows:
101 % o image_view: the image cache view.
103 % o quantum_info: the quantum info.
105 % o quantum_type: Declare which pixel components to transfer (red, green,
106 % blue, opacity, RGB, or RGBA).
108 % o pixels: The pixel components are transferred from this buffer.
110 % o exception: return any errors or warnings in this structure.
114 static inline Quantum PushColormapIndex(const Image *image,const size_t index,
115 MagickBooleanType *range_exception)
117 if (index < image->colors)
118 return((Quantum) index);
119 *range_exception=MagickTrue;
123 static inline const unsigned char *PushDoublePixel(QuantumInfo *quantum_info,
124 const unsigned char *restrict pixels,double *pixel)
132 if (quantum_info->endian == LSBEndian)
134 quantum[0]=(*pixels++);
135 quantum[1]=(*pixels++);
136 quantum[2]=(*pixels++);
137 quantum[3]=(*pixels++);
138 quantum[4]=(*pixels++);
139 quantum[5]=(*pixels++);
140 quantum[6]=(*pixels++);
141 quantum[7]=(*pixels++);
142 p=(double *) quantum;
144 *pixel-=quantum_info->minimum;
145 *pixel*=quantum_info->scale;
148 quantum[7]=(*pixels++);
149 quantum[6]=(*pixels++);
150 quantum[5]=(*pixels++);
151 quantum[5]=(*pixels++);
152 quantum[3]=(*pixels++);
153 quantum[2]=(*pixels++);
154 quantum[1]=(*pixels++);
155 quantum[0]=(*pixels++);
156 p=(double *) quantum;
158 *pixel-=quantum_info->minimum;
159 *pixel*=quantum_info->scale;
163 static inline const unsigned char *PushFloatPixel(QuantumInfo *quantum_info,
164 const unsigned char *restrict pixels,float *pixel)
172 if (quantum_info->endian == LSBEndian)
174 quantum[0]=(*pixels++);
175 quantum[1]=(*pixels++);
176 quantum[2]=(*pixels++);
177 quantum[3]=(*pixels++);
180 *pixel-=quantum_info->minimum;
181 *pixel*=quantum_info->scale;
184 quantum[3]=(*pixels++);
185 quantum[2]=(*pixels++);
186 quantum[1]=(*pixels++);
187 quantum[0]=(*pixels++);
190 *pixel-=quantum_info->minimum;
191 *pixel*=quantum_info->scale;
195 static inline const unsigned char *PushQuantumPixel(QuantumInfo *quantum_info,
196 const unsigned char *restrict pixels,unsigned int *quantum)
204 *quantum=(QuantumAny) 0;
205 for (i=(ssize_t) quantum_info->depth; i > 0L; )
207 if (quantum_info->state.bits == 0UL)
209 quantum_info->state.pixel=(*pixels++);
210 quantum_info->state.bits=8UL;
212 quantum_bits=(size_t) i;
213 if (quantum_bits > quantum_info->state.bits)
214 quantum_bits=quantum_info->state.bits;
215 i-=(ssize_t) quantum_bits;
216 quantum_info->state.bits-=quantum_bits;
217 *quantum=(unsigned int) ((*quantum << quantum_bits) |
218 ((quantum_info->state.pixel >> quantum_info->state.bits) &~ ((~0UL) <<
224 static inline const unsigned char *PushQuantumLongPixel(
225 QuantumInfo *quantum_info,const unsigned char *restrict pixels,
226 unsigned int *quantum)
235 for (i=(ssize_t) quantum_info->depth; i > 0; )
237 if (quantum_info->state.bits == 0)
239 pixels=PushLongPixel(quantum_info->endian,pixels,
240 &quantum_info->state.pixel);
241 quantum_info->state.bits=32U;
243 quantum_bits=(size_t) i;
244 if (quantum_bits > quantum_info->state.bits)
245 quantum_bits=quantum_info->state.bits;
246 *quantum|=(((quantum_info->state.pixel >> (32U-quantum_info->state.bits)) &
247 quantum_info->state.mask[quantum_bits]) << (quantum_info->depth-i));
248 i-=(ssize_t) quantum_bits;
249 quantum_info->state.bits-=quantum_bits;
254 static void ImportAlphaQuantum(const Image *image,QuantumInfo *quantum_info,
255 const MagickSizeType number_pixels,const unsigned char *restrict p,
256 Quantum *restrict q,ExceptionInfo *exception)
267 assert(image != (Image *) NULL);
268 assert(image->signature == MagickSignature);
269 switch (quantum_info->depth)
276 for (x=0; x < (ssize_t) number_pixels; x++)
278 p=PushCharPixel(p,&pixel);
279 SetPixelAlpha(image,ScaleCharToQuantum(pixel),q);
280 p+=quantum_info->pad;
281 q+=GetPixelChannels(image);
290 if (quantum_info->format == FloatingPointQuantumFormat)
292 for (x=0; x < (ssize_t) number_pixels; x++)
294 p=PushShortPixel(quantum_info->endian,p,&pixel);
295 SetPixelAlpha(image,ClampToQuantum(QuantumRange*
296 HalfToSinglePrecision(pixel)),q);
297 p+=quantum_info->pad;
298 q+=GetPixelChannels(image);
302 for (x=0; x < (ssize_t) number_pixels; x++)
304 p=PushShortPixel(quantum_info->endian,p,&pixel);
305 SetPixelAlpha(image,ScaleShortToQuantum(pixel),q);
306 p+=quantum_info->pad;
307 q+=GetPixelChannels(image);
316 if (quantum_info->format == FloatingPointQuantumFormat)
321 for (x=0; x < (ssize_t) number_pixels; x++)
323 p=PushFloatPixel(quantum_info,p,&pixel);
324 SetPixelAlpha(image,ClampToQuantum(pixel),q);
325 p+=quantum_info->pad;
326 q+=GetPixelChannels(image);
330 for (x=0; x < (ssize_t) number_pixels; x++)
332 p=PushLongPixel(quantum_info->endian,p,&pixel);
333 SetPixelAlpha(image,ScaleLongToQuantum(pixel),q);
334 p+=quantum_info->pad;
335 q+=GetPixelChannels(image);
341 if (quantum_info->format == FloatingPointQuantumFormat)
346 for (x=0; x < (ssize_t) number_pixels; x++)
348 p=PushDoublePixel(quantum_info,p,&pixel);
349 SetPixelAlpha(image,ClampToQuantum(pixel),q);
350 p+=quantum_info->pad;
351 q+=GetPixelChannels(image);
358 range=GetQuantumRange(quantum_info->depth);
359 for (x=0; x < (ssize_t) number_pixels; x++)
361 p=PushQuantumPixel(quantum_info,p,&pixel);
362 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
363 p+=quantum_info->pad;
364 q+=GetPixelChannels(image);
371 static void ImportBGRQuantum(const Image *image,QuantumInfo *quantum_info,
372 const MagickSizeType number_pixels,const unsigned char *restrict p,
373 Quantum *restrict q,ExceptionInfo *exception)
387 assert(image != (Image *) NULL);
388 assert(image->signature == MagickSignature);
389 switch (quantum_info->depth)
396 for (x=0; x < (ssize_t) number_pixels; x++)
398 p=PushCharPixel(p,&pixel);
399 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
400 p=PushCharPixel(p,&pixel);
401 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
402 p=PushCharPixel(p,&pixel);
403 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
404 SetPixelAlpha(image,OpaqueAlpha,q);
405 p+=quantum_info->pad;
406 q+=GetPixelChannels(image);
412 range=GetQuantumRange(quantum_info->depth);
413 if (quantum_info->pack == MagickFalse)
415 for (x=0; x < (ssize_t) number_pixels; x++)
417 p=PushLongPixel(quantum_info->endian,p,&pixel);
418 SetPixelRed(image,ScaleAnyToQuantum((pixel >> 22) & 0x3ff,range),q);
419 SetPixelGreen(image,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,range),
421 SetPixelBlue(image,ScaleAnyToQuantum((pixel >> 2) & 0x3ff,range),q);
422 p+=quantum_info->pad;
423 q+=GetPixelChannels(image);
427 if (quantum_info->quantum == 32U)
429 for (x=0; x < (ssize_t) number_pixels; x++)
431 p=PushQuantumLongPixel(quantum_info,p,&pixel);
432 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
433 p=PushQuantumLongPixel(quantum_info,p,&pixel);
434 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
435 p=PushQuantumLongPixel(quantum_info,p,&pixel);
436 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
437 q+=GetPixelChannels(image);
441 for (x=0; x < (ssize_t) number_pixels; x++)
443 p=PushQuantumPixel(quantum_info,p,&pixel);
444 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
445 p=PushQuantumPixel(quantum_info,p,&pixel);
446 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
447 p=PushQuantumPixel(quantum_info,p,&pixel);
448 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
449 q+=GetPixelChannels(image);
455 range=GetQuantumRange(quantum_info->depth);
456 if (quantum_info->pack == MagickFalse)
461 for (x=0; x < (ssize_t) (3*number_pixels-1); x+=2)
463 p=PushShortPixel(quantum_info->endian,p,&pixel);
469 SetPixelRed(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
475 SetPixelGreen(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
481 SetPixelBlue(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
483 q+=GetPixelChannels(image);
487 p=PushShortPixel(quantum_info->endian,p,&pixel);
493 SetPixelRed(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
499 SetPixelGreen(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
505 SetPixelBlue(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
507 q+=GetPixelChannels(image);
511 p+=quantum_info->pad;
513 for (bit=0; bit < (ssize_t) (3*number_pixels % 2); bit++)
515 p=PushShortPixel(quantum_info->endian,p,&pixel);
521 SetPixelRed(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
527 SetPixelGreen(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
533 SetPixelBlue(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
535 q+=GetPixelChannels(image);
539 p+=quantum_info->pad;
545 if (quantum_info->quantum == 32U)
547 for (x=0; x < (ssize_t) number_pixels; x++)
549 p=PushQuantumLongPixel(quantum_info,p,&pixel);
550 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
551 p=PushQuantumLongPixel(quantum_info,p,&pixel);
552 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
553 p=PushQuantumLongPixel(quantum_info,p,&pixel);
554 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
555 q+=GetPixelChannels(image);
559 for (x=0; x < (ssize_t) number_pixels; x++)
561 p=PushQuantumPixel(quantum_info,p,&pixel);
562 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
563 p=PushQuantumPixel(quantum_info,p,&pixel);
564 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
565 p=PushQuantumPixel(quantum_info,p,&pixel);
566 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
567 q+=GetPixelChannels(image);
576 if (quantum_info->format == FloatingPointQuantumFormat)
578 for (x=0; x < (ssize_t) number_pixels; x++)
580 p=PushShortPixel(quantum_info->endian,p,&pixel);
581 SetPixelRed(image,ClampToQuantum(QuantumRange*
582 HalfToSinglePrecision(pixel)),q);
583 p=PushShortPixel(quantum_info->endian,p,&pixel);
584 SetPixelGreen(image,ClampToQuantum(QuantumRange*
585 HalfToSinglePrecision(pixel)),q);
586 p=PushShortPixel(quantum_info->endian,p,&pixel);
587 SetPixelBlue(image,ClampToQuantum(QuantumRange*
588 HalfToSinglePrecision(pixel)),q);
589 p+=quantum_info->pad;
590 q+=GetPixelChannels(image);
594 for (x=0; x < (ssize_t) number_pixels; x++)
596 p=PushShortPixel(quantum_info->endian,p,&pixel);
597 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
598 p=PushShortPixel(quantum_info->endian,p,&pixel);
599 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
600 p=PushShortPixel(quantum_info->endian,p,&pixel);
601 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
602 p+=quantum_info->pad;
603 q+=GetPixelChannels(image);
612 if (quantum_info->format == FloatingPointQuantumFormat)
617 for (x=0; x < (ssize_t) number_pixels; x++)
619 p=PushFloatPixel(quantum_info,p,&pixel);
620 SetPixelRed(image,ClampToQuantum(pixel),q);
621 p=PushFloatPixel(quantum_info,p,&pixel);
622 SetPixelGreen(image,ClampToQuantum(pixel),q);
623 p=PushFloatPixel(quantum_info,p,&pixel);
624 SetPixelBlue(image,ClampToQuantum(pixel),q);
625 p+=quantum_info->pad;
626 q+=GetPixelChannels(image);
630 for (x=0; x < (ssize_t) number_pixels; x++)
632 p=PushLongPixel(quantum_info->endian,p,&pixel);
633 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
634 p=PushLongPixel(quantum_info->endian,p,&pixel);
635 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
636 p=PushLongPixel(quantum_info->endian,p,&pixel);
637 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
638 p+=quantum_info->pad;
639 q+=GetPixelChannels(image);
645 if (quantum_info->format == FloatingPointQuantumFormat)
650 for (x=0; x < (ssize_t) number_pixels; x++)
652 p=PushDoublePixel(quantum_info,p,&pixel);
653 SetPixelRed(image,ClampToQuantum(pixel),q);
654 p=PushDoublePixel(quantum_info,p,&pixel);
655 SetPixelGreen(image,ClampToQuantum(pixel),q);
656 p=PushDoublePixel(quantum_info,p,&pixel);
657 SetPixelBlue(image,ClampToQuantum(pixel),q);
658 p+=quantum_info->pad;
659 q+=GetPixelChannels(image);
666 range=GetQuantumRange(quantum_info->depth);
667 for (x=0; x < (ssize_t) number_pixels; x++)
669 p=PushQuantumPixel(quantum_info,p,&pixel);
670 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
671 p=PushQuantumPixel(quantum_info,p,&pixel);
672 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
673 p=PushQuantumPixel(quantum_info,p,&pixel);
674 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
675 q+=GetPixelChannels(image);
682 static void ImportBGRAQuantum(const Image *image,QuantumInfo *quantum_info,
683 const MagickSizeType number_pixels,const unsigned char *restrict p,
684 Quantum *restrict q,ExceptionInfo *exception)
695 assert(image != (Image *) NULL);
696 assert(image->signature == MagickSignature);
697 switch (quantum_info->depth)
704 for (x=0; x < (ssize_t) number_pixels; x++)
706 p=PushCharPixel(p,&pixel);
707 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
708 p=PushCharPixel(p,&pixel);
709 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
710 p=PushCharPixel(p,&pixel);
711 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
712 p=PushCharPixel(p,&pixel);
713 SetPixelAlpha(image,ScaleCharToQuantum(pixel),q);
714 p+=quantum_info->pad;
715 q+=GetPixelChannels(image);
722 if (quantum_info->pack == MagickFalse)
735 for (x=0; x < (ssize_t) number_pixels; x++)
737 for (i=0; i < 4; i++)
743 p=PushLongPixel(quantum_info->endian,p,&pixel);
744 quantum=(size_t) (ScaleShortToQuantum((unsigned short)
745 (((pixel >> 22) & 0x3ff) << 6)));
750 quantum=(size_t) (ScaleShortToQuantum((unsigned short)
751 (((pixel >> 12) & 0x3ff) << 6)));
756 quantum=(size_t) (ScaleShortToQuantum((unsigned short)
757 (((pixel >> 2) & 0x3ff) << 6)));
763 case 0: SetPixelRed(image,(Quantum) quantum,q); break;
764 case 1: SetPixelGreen(image,(Quantum) quantum,q); break;
765 case 2: SetPixelBlue(image,(Quantum) quantum,q); break;
766 case 3: SetPixelAlpha(image,(Quantum) quantum,q); break;
770 p+=quantum_info->pad;
771 q+=GetPixelChannels(image);
775 for (x=0; x < (ssize_t) number_pixels; x++)
777 p=PushQuantumPixel(quantum_info,p,&pixel);
778 SetPixelRed(image,ScaleShortToQuantum((unsigned short) (pixel << 6)),q);
779 p=PushQuantumPixel(quantum_info,p,&pixel);
780 SetPixelGreen(image,ScaleShortToQuantum((unsigned short) (pixel << 6)),
782 p=PushQuantumPixel(quantum_info,p,&pixel);
783 SetPixelBlue(image,ScaleShortToQuantum((unsigned short) (pixel << 6)),
785 p=PushQuantumPixel(quantum_info,p,&pixel);
786 SetPixelAlpha(image,ScaleShortToQuantum((unsigned short) (pixel << 6)),
788 q+=GetPixelChannels(image);
797 if (quantum_info->format == FloatingPointQuantumFormat)
799 for (x=0; x < (ssize_t) number_pixels; x++)
801 p=PushShortPixel(quantum_info->endian,p,&pixel);
802 SetPixelRed(image,ClampToQuantum(QuantumRange*
803 HalfToSinglePrecision(pixel)),q);
804 p=PushShortPixel(quantum_info->endian,p,&pixel);
805 SetPixelGreen(image,ClampToQuantum(QuantumRange*
806 HalfToSinglePrecision(pixel)),q);
807 p=PushShortPixel(quantum_info->endian,p,&pixel);
808 SetPixelBlue(image,ClampToQuantum(QuantumRange*
809 HalfToSinglePrecision(pixel)),q);
810 p=PushShortPixel(quantum_info->endian,p,&pixel);
811 SetPixelAlpha(image,ClampToQuantum(QuantumRange*
812 HalfToSinglePrecision(pixel)),q);
813 p+=quantum_info->pad;
814 q+=GetPixelChannels(image);
818 for (x=0; x < (ssize_t) number_pixels; x++)
820 p=PushShortPixel(quantum_info->endian,p,&pixel);
821 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
822 p=PushShortPixel(quantum_info->endian,p,&pixel);
823 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
824 p=PushShortPixel(quantum_info->endian,p,&pixel);
825 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
826 p=PushShortPixel(quantum_info->endian,p,&pixel);
827 SetPixelAlpha(image,ScaleShortToQuantum(pixel),q);
828 p+=quantum_info->pad;
829 q+=GetPixelChannels(image);
838 if (quantum_info->format == FloatingPointQuantumFormat)
843 for (x=0; x < (ssize_t) number_pixels; x++)
845 p=PushFloatPixel(quantum_info,p,&pixel);
846 SetPixelRed(image,ClampToQuantum(pixel),q);
847 p=PushFloatPixel(quantum_info,p,&pixel);
848 SetPixelGreen(image,ClampToQuantum(pixel),q);
849 p=PushFloatPixel(quantum_info,p,&pixel);
850 SetPixelBlue(image,ClampToQuantum(pixel),q);
851 p=PushFloatPixel(quantum_info,p,&pixel);
852 SetPixelAlpha(image,ClampToQuantum(pixel),q);
853 p+=quantum_info->pad;
854 q+=GetPixelChannels(image);
858 for (x=0; x < (ssize_t) number_pixels; x++)
860 p=PushLongPixel(quantum_info->endian,p,&pixel);
861 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
862 p=PushLongPixel(quantum_info->endian,p,&pixel);
863 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
864 p=PushLongPixel(quantum_info->endian,p,&pixel);
865 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
866 p=PushLongPixel(quantum_info->endian,p,&pixel);
867 SetPixelAlpha(image,ScaleLongToQuantum(pixel),q);
868 p+=quantum_info->pad;
869 q+=GetPixelChannels(image);
875 if (quantum_info->format == FloatingPointQuantumFormat)
880 for (x=0; x < (ssize_t) number_pixels; x++)
882 p=PushDoublePixel(quantum_info,p,&pixel);
883 SetPixelRed(image,ClampToQuantum(pixel),q);
884 p=PushDoublePixel(quantum_info,p,&pixel);
885 SetPixelGreen(image,ClampToQuantum(pixel),q);
886 p=PushDoublePixel(quantum_info,p,&pixel);
887 SetPixelBlue(image,ClampToQuantum(pixel),q);
888 p=PushDoublePixel(quantum_info,p,&pixel);
889 SetPixelAlpha(image,ClampToQuantum(pixel),q);
890 p+=quantum_info->pad;
891 q+=GetPixelChannels(image);
898 range=GetQuantumRange(quantum_info->depth);
899 for (x=0; x < (ssize_t) number_pixels; x++)
901 p=PushQuantumPixel(quantum_info,p,&pixel);
902 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
903 p=PushQuantumPixel(quantum_info,p,&pixel);
904 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
905 p=PushQuantumPixel(quantum_info,p,&pixel);
906 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
907 p=PushQuantumPixel(quantum_info,p,&pixel);
908 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
909 q+=GetPixelChannels(image);
916 static void ImportBlackQuantum(const Image *image,QuantumInfo *quantum_info,
917 const MagickSizeType number_pixels,const unsigned char *restrict p,
918 Quantum *restrict q,ExceptionInfo *exception)
929 if (image->colorspace != CMYKColorspace)
931 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
932 "ColorSeparatedImageRequired","`%s'",image->filename);
935 switch (quantum_info->depth)
942 for (x=0; x < (ssize_t) number_pixels; x++)
944 p=PushCharPixel(p,&pixel);
945 SetPixelBlack(image,ScaleCharToQuantum(pixel),q);
946 p+=quantum_info->pad;
947 q+=GetPixelChannels(image);
956 if (quantum_info->format == FloatingPointQuantumFormat)
958 for (x=0; x < (ssize_t) number_pixels; x++)
960 p=PushShortPixel(quantum_info->endian,p,&pixel);
961 SetPixelBlack(image,ClampToQuantum(QuantumRange*
962 HalfToSinglePrecision(pixel)),q);
963 p+=quantum_info->pad;
964 q+=GetPixelChannels(image);
968 for (x=0; x < (ssize_t) number_pixels; x++)
970 p=PushShortPixel(quantum_info->endian,p,&pixel);
971 SetPixelBlack(image,ScaleShortToQuantum(pixel),q);
972 p+=quantum_info->pad;
973 q+=GetPixelChannels(image);
982 if (quantum_info->format == FloatingPointQuantumFormat)
987 for (x=0; x < (ssize_t) number_pixels; x++)
989 p=PushFloatPixel(quantum_info,p,&pixel);
990 SetPixelBlack(image,ClampToQuantum(pixel),q);
991 p+=quantum_info->pad;
992 q+=GetPixelChannels(image);
996 for (x=0; x < (ssize_t) number_pixels; x++)
998 p=PushLongPixel(quantum_info->endian,p,&pixel);
999 SetPixelBlack(image,ScaleLongToQuantum(pixel),q);
1000 p+=quantum_info->pad;
1001 q+=GetPixelChannels(image);
1007 if (quantum_info->format == FloatingPointQuantumFormat)
1012 for (x=0; x < (ssize_t) number_pixels; x++)
1014 p=PushDoublePixel(quantum_info,p,&pixel);
1015 SetPixelBlack(image,ClampToQuantum(pixel),q);
1016 p+=quantum_info->pad;
1017 q+=GetPixelChannels(image);
1024 range=GetQuantumRange(quantum_info->depth);
1025 for (x=0; x < (ssize_t) number_pixels; x++)
1027 p=PushQuantumPixel(quantum_info,p,&pixel);
1028 SetPixelBlack(image,ScaleAnyToQuantum(pixel,range),q);
1029 p+=quantum_info->pad;
1030 q+=GetPixelChannels(image);
1037 static void ImportBlueQuantum(const Image *image,QuantumInfo *quantum_info,
1038 const MagickSizeType number_pixels,const unsigned char *restrict p,
1039 Quantum *restrict q,ExceptionInfo *exception)
1050 assert(image != (Image *) NULL);
1051 assert(image->signature == MagickSignature);
1052 switch (quantum_info->depth)
1059 for (x=0; x < (ssize_t) number_pixels; x++)
1061 p=PushCharPixel(p,&pixel);
1062 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
1063 p+=quantum_info->pad;
1064 q+=GetPixelChannels(image);
1073 if (quantum_info->format == FloatingPointQuantumFormat)
1075 for (x=0; x < (ssize_t) number_pixels; x++)
1077 p=PushShortPixel(quantum_info->endian,p,&pixel);
1078 SetPixelBlue(image,ClampToQuantum(QuantumRange*
1079 HalfToSinglePrecision(pixel)),q);
1080 p+=quantum_info->pad;
1081 q+=GetPixelChannels(image);
1085 for (x=0; x < (ssize_t) number_pixels; x++)
1087 p=PushShortPixel(quantum_info->endian,p,&pixel);
1088 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
1089 p+=quantum_info->pad;
1090 q+=GetPixelChannels(image);
1099 if (quantum_info->format == FloatingPointQuantumFormat)
1104 for (x=0; x < (ssize_t) number_pixels; x++)
1106 p=PushFloatPixel(quantum_info,p,&pixel);
1107 SetPixelBlue(image,ClampToQuantum(pixel),q);
1108 p+=quantum_info->pad;
1109 q+=GetPixelChannels(image);
1113 for (x=0; x < (ssize_t) number_pixels; x++)
1115 p=PushLongPixel(quantum_info->endian,p,&pixel);
1116 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
1117 p+=quantum_info->pad;
1118 q+=GetPixelChannels(image);
1124 if (quantum_info->format == FloatingPointQuantumFormat)
1129 for (x=0; x < (ssize_t) number_pixels; x++)
1131 p=PushDoublePixel(quantum_info,p,&pixel);
1132 SetPixelBlue(image,ClampToQuantum(pixel),q);
1133 p+=quantum_info->pad;
1134 q+=GetPixelChannels(image);
1141 range=GetQuantumRange(quantum_info->depth);
1142 for (x=0; x < (ssize_t) number_pixels; x++)
1144 p=PushQuantumPixel(quantum_info,p,&pixel);
1145 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
1146 p+=quantum_info->pad;
1147 q+=GetPixelChannels(image);
1154 static void ImportCbYCrYQuantum(const Image *image,QuantumInfo *quantum_info,
1155 const MagickSizeType number_pixels,const unsigned char *restrict p,
1156 Quantum *restrict q,ExceptionInfo *exception)
1167 assert(image != (Image *) NULL);
1168 assert(image->signature == MagickSignature);
1169 switch (quantum_info->depth)
1177 if (quantum_info->pack == MagickFalse)
1190 for (x=0; x < (ssize_t) number_pixels; x+=2)
1192 for (i=0; i < 4; i++)
1198 p=PushLongPixel(quantum_info->endian,p,&pixel);
1199 quantum=(size_t) (ScaleShortToQuantum((unsigned short)
1200 (((pixel >> 22) & 0x3ff) << 6)));
1205 quantum=(size_t) (ScaleShortToQuantum((unsigned short)
1206 (((pixel >> 12) & 0x3ff) << 6)));
1211 quantum=(size_t) (ScaleShortToQuantum((unsigned short)
1212 (((pixel >> 2) & 0x3ff) << 6)));
1216 cbcr[i]=(Quantum) (quantum);
1219 p+=quantum_info->pad;
1220 SetPixelRed(image,cbcr[1],q);
1221 SetPixelGreen(image,cbcr[0],q);
1222 SetPixelBlue(image,cbcr[2],q);
1223 q+=GetPixelChannels(image);
1224 SetPixelRed(image,cbcr[3],q);
1225 SetPixelGreen(image,cbcr[0],q);
1226 SetPixelBlue(image,cbcr[2],q);
1227 q+=GetPixelChannels(image);
1234 range=GetQuantumRange(quantum_info->depth);
1235 for (x=0; x < (ssize_t) number_pixels; x++)
1237 p=PushQuantumPixel(quantum_info,p,&pixel);
1238 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
1239 p=PushQuantumPixel(quantum_info,p,&pixel);
1240 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
1241 q+=GetPixelChannels(image);
1248 static void ImportCMYKQuantum(const Image *image,QuantumInfo *quantum_info,
1249 const MagickSizeType number_pixels,const unsigned char *restrict p,
1250 Quantum *restrict q,ExceptionInfo *exception)
1261 if (image->colorspace != CMYKColorspace)
1263 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1264 "ColorSeparatedImageRequired","`%s'",image->filename);
1267 switch (quantum_info->depth)
1274 for (x=0; x < (ssize_t) number_pixels; x++)
1276 p=PushCharPixel(p,&pixel);
1277 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
1278 p=PushCharPixel(p,&pixel);
1279 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
1280 p=PushCharPixel(p,&pixel);
1281 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
1282 p=PushCharPixel(p,&pixel);
1283 SetPixelBlack(image,ScaleCharToQuantum(pixel),q);
1284 p+=quantum_info->pad;
1285 q+=GetPixelChannels(image);
1294 if (quantum_info->format == FloatingPointQuantumFormat)
1296 for (x=0; x < (ssize_t) number_pixels; x++)
1298 p=PushShortPixel(quantum_info->endian,p,&pixel);
1299 SetPixelRed(image,ClampToQuantum(QuantumRange*
1300 HalfToSinglePrecision(pixel)),q);
1301 p=PushShortPixel(quantum_info->endian,p,&pixel);
1302 SetPixelGreen(image,ClampToQuantum(QuantumRange*
1303 HalfToSinglePrecision(pixel)),q);
1304 p=PushShortPixel(quantum_info->endian,p,&pixel);
1305 SetPixelBlue(image,ClampToQuantum(QuantumRange*
1306 HalfToSinglePrecision(pixel)),q);
1307 p=PushShortPixel(quantum_info->endian,p,&pixel);
1308 SetPixelBlack(image,ClampToQuantum(QuantumRange*
1309 HalfToSinglePrecision(pixel)),q);
1310 p+=quantum_info->pad;
1311 q+=GetPixelChannels(image);
1315 for (x=0; x < (ssize_t) number_pixels; x++)
1317 p=PushShortPixel(quantum_info->endian,p,&pixel);
1318 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
1319 p=PushShortPixel(quantum_info->endian,p,&pixel);
1320 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
1321 p=PushShortPixel(quantum_info->endian,p,&pixel);
1322 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
1323 p=PushShortPixel(quantum_info->endian,p,&pixel);
1324 SetPixelBlack(image,ScaleShortToQuantum(pixel),q);
1325 p+=quantum_info->pad;
1326 q+=GetPixelChannels(image);
1335 if (quantum_info->format == FloatingPointQuantumFormat)
1340 for (x=0; x < (ssize_t) number_pixels; x++)
1342 p=PushFloatPixel(quantum_info,p,&pixel);
1343 SetPixelRed(image,ClampToQuantum(pixel),q);
1344 p=PushFloatPixel(quantum_info,p,&pixel);
1345 SetPixelGreen(image,ClampToQuantum(pixel),q);
1346 p=PushFloatPixel(quantum_info,p,&pixel);
1347 SetPixelBlue(image,ClampToQuantum(pixel),q);
1348 p=PushFloatPixel(quantum_info,p,&pixel);
1349 SetPixelBlack(image,ClampToQuantum(pixel),q);
1350 p+=quantum_info->pad;
1351 q+=GetPixelChannels(image);
1355 for (x=0; x < (ssize_t) number_pixels; x++)
1357 p=PushLongPixel(quantum_info->endian,p,&pixel);
1358 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
1359 p=PushLongPixel(quantum_info->endian,p,&pixel);
1360 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
1361 p=PushLongPixel(quantum_info->endian,p,&pixel);
1362 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
1363 p=PushLongPixel(quantum_info->endian,p,&pixel);
1364 SetPixelBlack(image,ScaleLongToQuantum(pixel),q);
1365 p+=quantum_info->pad;
1366 q+=GetPixelChannels(image);
1372 if (quantum_info->format == FloatingPointQuantumFormat)
1377 for (x=0; x < (ssize_t) number_pixels; x++)
1379 p=PushDoublePixel(quantum_info,p,&pixel);
1380 SetPixelRed(image,ClampToQuantum(pixel),q);
1381 p=PushDoublePixel(quantum_info,p,&pixel);
1382 SetPixelGreen(image,ClampToQuantum(pixel),q);
1383 p=PushDoublePixel(quantum_info,p,&pixel);
1384 SetPixelBlue(image,ClampToQuantum(pixel),q);
1385 p=PushDoublePixel(quantum_info,p,&pixel);
1386 SetPixelBlack(image,ClampToQuantum(pixel),q);
1387 p+=quantum_info->pad;
1388 q+=GetPixelChannels(image);
1395 range=GetQuantumRange(quantum_info->depth);
1396 for (x=0; x < (ssize_t) number_pixels; x++)
1398 p=PushQuantumPixel(quantum_info,p,&pixel);
1399 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
1400 p=PushQuantumPixel(quantum_info,p,&pixel);
1401 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
1402 p=PushQuantumPixel(quantum_info,p,&pixel);
1403 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
1404 p=PushQuantumPixel(quantum_info,p,&pixel);
1405 SetPixelBlack(image,ScaleAnyToQuantum(pixel,range),q);
1406 q+=GetPixelChannels(image);
1413 static void ImportCMYKAQuantum(const Image *image,QuantumInfo *quantum_info,
1414 const MagickSizeType number_pixels,const unsigned char *restrict p,
1415 Quantum *restrict q,ExceptionInfo *exception)
1426 if (image->colorspace != CMYKColorspace)
1428 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1429 "ColorSeparatedImageRequired","`%s'",image->filename);
1432 switch (quantum_info->depth)
1439 for (x=0; x < (ssize_t) number_pixels; x++)
1441 p=PushCharPixel(p,&pixel);
1442 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
1443 p=PushCharPixel(p,&pixel);
1444 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
1445 p=PushCharPixel(p,&pixel);
1446 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
1447 p=PushCharPixel(p,&pixel);
1448 SetPixelBlack(image,ScaleCharToQuantum(pixel),q);
1449 p=PushCharPixel(p,&pixel);
1450 SetPixelAlpha(image,ScaleCharToQuantum(pixel),q);
1451 p+=quantum_info->pad;
1452 q+=GetPixelChannels(image);
1461 if (quantum_info->format == FloatingPointQuantumFormat)
1463 for (x=0; x < (ssize_t) number_pixels; x++)
1465 p=PushShortPixel(quantum_info->endian,p,&pixel);
1466 SetPixelRed(image,ClampToQuantum(QuantumRange*
1467 HalfToSinglePrecision(pixel)),q);
1468 p=PushShortPixel(quantum_info->endian,p,&pixel);
1469 SetPixelGreen(image,ClampToQuantum(QuantumRange*
1470 HalfToSinglePrecision(pixel)),q);
1471 p=PushShortPixel(quantum_info->endian,p,&pixel);
1472 SetPixelBlue(image,ClampToQuantum(QuantumRange*
1473 HalfToSinglePrecision(pixel)),q);
1474 p=PushShortPixel(quantum_info->endian,p,&pixel);
1475 SetPixelBlack(image,ClampToQuantum(QuantumRange*
1476 HalfToSinglePrecision(pixel)),q);
1477 p=PushShortPixel(quantum_info->endian,p,&pixel);
1478 SetPixelAlpha(image,ClampToQuantum(QuantumRange*
1479 HalfToSinglePrecision(pixel)),q);
1480 p+=quantum_info->pad;
1481 q+=GetPixelChannels(image);
1485 for (x=0; x < (ssize_t) number_pixels; x++)
1487 p=PushShortPixel(quantum_info->endian,p,&pixel);
1488 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
1489 p=PushShortPixel(quantum_info->endian,p,&pixel);
1490 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
1491 p=PushShortPixel(quantum_info->endian,p,&pixel);
1492 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
1493 p=PushShortPixel(quantum_info->endian,p,&pixel);
1494 SetPixelBlack(image,ScaleShortToQuantum(pixel),q);
1495 p=PushShortPixel(quantum_info->endian,p,&pixel);
1496 SetPixelAlpha(image,ScaleShortToQuantum(pixel),q);
1497 p+=quantum_info->pad;
1498 q+=GetPixelChannels(image);
1507 if (quantum_info->format == FloatingPointQuantumFormat)
1512 for (x=0; x < (ssize_t) number_pixels; x++)
1514 p=PushFloatPixel(quantum_info,p,&pixel);
1515 SetPixelRed(image,ClampToQuantum(pixel),q);
1516 p=PushFloatPixel(quantum_info,p,&pixel);
1517 SetPixelGreen(image,ClampToQuantum(pixel),q);
1518 p=PushFloatPixel(quantum_info,p,&pixel);
1519 SetPixelBlue(image,ClampToQuantum(pixel),q);
1520 p=PushFloatPixel(quantum_info,p,&pixel);
1521 SetPixelBlack(image,ClampToQuantum(pixel),q);
1522 p=PushFloatPixel(quantum_info,p,&pixel);
1523 SetPixelAlpha(image,ClampToQuantum(pixel),q);
1524 p+=quantum_info->pad;
1525 q+=GetPixelChannels(image);
1529 for (x=0; x < (ssize_t) number_pixels; x++)
1531 p=PushLongPixel(quantum_info->endian,p,&pixel);
1532 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
1533 p=PushLongPixel(quantum_info->endian,p,&pixel);
1534 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
1535 p=PushLongPixel(quantum_info->endian,p,&pixel);
1536 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
1537 p=PushLongPixel(quantum_info->endian,p,&pixel);
1538 SetPixelBlack(image,ScaleLongToQuantum(pixel),q);
1539 p=PushLongPixel(quantum_info->endian,p,&pixel);
1540 SetPixelAlpha(image,ScaleLongToQuantum(pixel),q);
1541 p+=quantum_info->pad;
1542 q+=GetPixelChannels(image);
1548 if (quantum_info->format == FloatingPointQuantumFormat)
1553 for (x=0; x < (ssize_t) number_pixels; x++)
1555 p=PushDoublePixel(quantum_info,p,&pixel);
1556 SetPixelRed(image,ClampToQuantum(pixel),q);
1557 p=PushDoublePixel(quantum_info,p,&pixel);
1558 SetPixelGreen(image,ClampToQuantum(pixel),q);
1559 p=PushDoublePixel(quantum_info,p,&pixel);
1560 SetPixelBlue(image,ClampToQuantum(pixel),q);
1561 p=PushDoublePixel(quantum_info,p,&pixel);
1562 SetPixelBlack(image,ClampToQuantum(pixel),q);
1563 p=PushDoublePixel(quantum_info,p,&pixel);
1564 SetPixelAlpha(image,ClampToQuantum(pixel),q);
1565 p=PushDoublePixel(quantum_info,p,&pixel);
1566 p+=quantum_info->pad;
1567 q+=GetPixelChannels(image);
1574 range=GetQuantumRange(quantum_info->depth);
1575 for (x=0; x < (ssize_t) number_pixels; x++)
1577 p=PushQuantumPixel(quantum_info,p,&pixel);
1578 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
1579 p=PushQuantumPixel(quantum_info,p,&pixel);
1580 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
1581 p=PushQuantumPixel(quantum_info,p,&pixel);
1582 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
1583 p=PushQuantumPixel(quantum_info,p,&pixel);
1584 SetPixelBlack(image,ScaleAnyToQuantum(pixel,range),q);
1585 p=PushQuantumPixel(quantum_info,p,&pixel);
1586 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
1587 q+=GetPixelChannels(image);
1594 static void ImportGrayQuantum(const Image *image,QuantumInfo *quantum_info,
1595 const MagickSizeType number_pixels,const unsigned char *restrict p,
1596 Quantum *restrict q,ExceptionInfo *exception)
1610 assert(image != (Image *) NULL);
1611 assert(image->signature == MagickSignature);
1612 switch (quantum_info->depth)
1622 if (quantum_info->min_is_white != MagickFalse)
1627 for (x=0; x < ((ssize_t) number_pixels-7); x+=8)
1629 for (bit=0; bit < 8; bit++)
1631 SetPixelGray(image,((*p) & (1 << (7-bit))) == 0 ? black : white,q);
1632 q+=GetPixelChannels(image);
1636 for (bit=0; bit < (ssize_t) (number_pixels % 8); bit++)
1638 SetPixelGray(image,((*p) & (0x01 << (7-bit))) == 0 ? black : white,q);
1639 q+=GetPixelChannels(image);
1647 register unsigned char
1650 range=GetQuantumRange(quantum_info->depth);
1651 for (x=0; x < ((ssize_t) number_pixels-1); x+=2)
1653 pixel=(unsigned char) ((*p >> 4) & 0xf);
1654 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
1655 q+=GetPixelChannels(image);
1656 pixel=(unsigned char) ((*p) & 0xf);
1657 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
1659 q+=GetPixelChannels(image);
1661 for (bit=0; bit < (ssize_t) (number_pixels % 2); bit++)
1663 pixel=(unsigned char) (*p++ >> 4);
1664 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
1665 q+=GetPixelChannels(image);
1674 if (quantum_info->min_is_white != MagickFalse)
1676 for (x=0; x < (ssize_t) number_pixels; x++)
1678 p=PushCharPixel(p,&pixel);
1679 SetPixelGray(image,ScaleCharToQuantum(pixel),q);
1680 SetPixelAlpha(image,OpaqueAlpha,q);
1681 p+=quantum_info->pad;
1682 q+=GetPixelChannels(image);
1686 for (x=0; x < (ssize_t) number_pixels; x++)
1688 p=PushCharPixel(p,&pixel);
1689 SetPixelGray(image,ScaleCharToQuantum(pixel),q);
1690 SetPixelAlpha(image,OpaqueAlpha,q);
1691 p+=quantum_info->pad;
1692 q+=GetPixelChannels(image);
1698 range=GetQuantumRange(quantum_info->depth);
1699 if (quantum_info->pack == MagickFalse)
1701 if (image->endian == LSBEndian)
1703 for (x=0; x < (ssize_t) (number_pixels-2); x+=3)
1705 p=PushLongPixel(quantum_info->endian,p,&pixel);
1706 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 22) & 0x3ff,
1708 q+=GetPixelChannels(image);
1709 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,
1711 q+=GetPixelChannels(image);
1712 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 2) & 0x3ff,
1714 p+=quantum_info->pad;
1715 q+=GetPixelChannels(image);
1717 p=PushLongPixel(quantum_info->endian,p,&pixel);
1718 if (x++ < (ssize_t) (number_pixels-1))
1720 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 22) & 0x3ff,
1722 q+=GetPixelChannels(image);
1724 if (x++ < (ssize_t) number_pixels)
1726 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,
1728 q+=GetPixelChannels(image);
1732 for (x=0; x < (ssize_t) (number_pixels-2); x+=3)
1734 p=PushLongPixel(quantum_info->endian,p,&pixel);
1735 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 2) & 0x3ff,range),
1737 q+=GetPixelChannels(image);
1738 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,range),
1740 q+=GetPixelChannels(image);
1741 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 22) & 0x3ff,range),
1743 p+=quantum_info->pad;
1744 q+=GetPixelChannels(image);
1746 p=PushLongPixel(quantum_info->endian,p,&pixel);
1747 if (x++ < (ssize_t) (number_pixels-1))
1749 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 2) & 0x3ff,
1751 q+=GetPixelChannels(image);
1753 if (x++ < (ssize_t) number_pixels)
1755 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,
1757 q+=GetPixelChannels(image);
1761 for (x=0; x < (ssize_t) number_pixels; x++)
1763 p=PushQuantumPixel(quantum_info,p,&pixel);
1764 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
1765 p+=quantum_info->pad;
1766 q+=GetPixelChannels(image);
1772 range=GetQuantumRange(quantum_info->depth);
1773 if (quantum_info->pack == MagickFalse)
1778 for (x=0; x < (ssize_t) (number_pixels-1); x+=2)
1780 p=PushShortPixel(quantum_info->endian,p,&pixel);
1781 SetPixelGray(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
1783 q+=GetPixelChannels(image);
1784 p=PushShortPixel(quantum_info->endian,p,&pixel);
1785 SetPixelGray(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
1787 p+=quantum_info->pad;
1788 q+=GetPixelChannels(image);
1790 for (bit=0; bit < (ssize_t) (number_pixels % 2); bit++)
1792 p=PushShortPixel(quantum_info->endian,p,&pixel);
1793 SetPixelGray(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
1795 p+=quantum_info->pad;
1796 q+=GetPixelChannels(image);
1802 for (x=0; x < (ssize_t) number_pixels; x++)
1804 p=PushQuantumPixel(quantum_info,p,&pixel);
1805 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
1806 p+=quantum_info->pad;
1807 q+=GetPixelChannels(image);
1816 if (quantum_info->min_is_white != MagickFalse)
1818 for (x=0; x < (ssize_t) number_pixels; x++)
1820 p=PushShortPixel(quantum_info->endian,p,&pixel);
1821 SetPixelGray(image,ScaleShortToQuantum(pixel),q);
1822 p+=quantum_info->pad;
1823 q+=GetPixelChannels(image);
1827 if (quantum_info->format == FloatingPointQuantumFormat)
1829 for (x=0; x < (ssize_t) number_pixels; x++)
1831 p=PushShortPixel(quantum_info->endian,p,&pixel);
1832 SetPixelGray(image,ClampToQuantum(QuantumRange*
1833 HalfToSinglePrecision(pixel)),q);
1834 p+=quantum_info->pad;
1835 q+=GetPixelChannels(image);
1839 for (x=0; x < (ssize_t) number_pixels; x++)
1841 p=PushShortPixel(quantum_info->endian,p,&pixel);
1842 SetPixelGray(image,ScaleShortToQuantum(pixel),q);
1843 p+=quantum_info->pad;
1844 q+=GetPixelChannels(image);
1853 if (quantum_info->format == FloatingPointQuantumFormat)
1858 for (x=0; x < (ssize_t) number_pixels; x++)
1860 p=PushFloatPixel(quantum_info,p,&pixel);
1861 SetPixelGray(image,ClampToQuantum(pixel),q);
1862 p+=quantum_info->pad;
1863 q+=GetPixelChannels(image);
1867 for (x=0; x < (ssize_t) number_pixels; x++)
1869 p=PushLongPixel(quantum_info->endian,p,&pixel);
1870 SetPixelGray(image,ScaleLongToQuantum(pixel),q);
1871 p+=quantum_info->pad;
1872 q+=GetPixelChannels(image);
1878 if (quantum_info->format == FloatingPointQuantumFormat)
1883 for (x=0; x < (ssize_t) number_pixels; x++)
1885 p=PushDoublePixel(quantum_info,p,&pixel);
1886 SetPixelGray(image,ClampToQuantum(pixel),q);
1887 p+=quantum_info->pad;
1888 q+=GetPixelChannels(image);
1895 range=GetQuantumRange(quantum_info->depth);
1896 for (x=0; x < (ssize_t) number_pixels; x++)
1898 p=PushQuantumPixel(quantum_info,p,&pixel);
1899 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
1900 p+=quantum_info->pad;
1901 q+=GetPixelChannels(image);
1908 static void ImportGrayAlphaQuantum(const Image *image,QuantumInfo *quantum_info,
1909 const MagickSizeType number_pixels,const unsigned char *restrict p,
1910 Quantum *restrict q,ExceptionInfo *exception)
1924 assert(image != (Image *) NULL);
1925 assert(image->signature == MagickSignature);
1926 switch (quantum_info->depth)
1930 register unsigned char
1933 for (x=((ssize_t) number_pixels-3); x > 0; x-=4)
1935 for (bit=0; bit < 8; bit+=2)
1937 pixel=(unsigned char) (((*p) & (1 << (7-bit))) != 0 ? 0x00 : 0x01);
1938 SetPixelGray(image,(Quantum) (pixel == 0 ? 0 : QuantumRange),q);
1939 SetPixelAlpha(image,((*p) & (1UL << (unsigned char) (6-bit))) == 0 ?
1940 TransparentAlpha : OpaqueAlpha,q);
1941 q+=GetPixelChannels(image);
1945 if ((number_pixels % 4) != 0)
1946 for (bit=3; bit >= (ssize_t) (4-(number_pixels % 4)); bit-=2)
1948 pixel=(unsigned char) (((*p) & (1 << (7-bit))) != 0 ? 0x00 : 0x01);
1949 SetPixelGray(image,(Quantum) (pixel != 0 ? 0 : QuantumRange),q);
1950 SetPixelAlpha(image,((*p) & (1UL << (unsigned char) (6-bit))) == 0 ?
1951 TransparentAlpha : OpaqueAlpha,q);
1952 q+=GetPixelChannels(image);
1960 register unsigned char
1963 range=GetQuantumRange(quantum_info->depth);
1964 for (x=0; x < (ssize_t) number_pixels; x++)
1966 pixel=(unsigned char) ((*p >> 4) & 0xf);
1967 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
1968 pixel=(unsigned char) ((*p) & 0xf);
1969 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
1971 q+=GetPixelChannels(image);
1980 for (x=0; x < (ssize_t) number_pixels; x++)
1982 p=PushCharPixel(p,&pixel);
1983 SetPixelGray(image,ScaleCharToQuantum(pixel),q);
1984 p=PushCharPixel(p,&pixel);
1985 SetPixelAlpha(image,ScaleCharToQuantum(pixel),q);
1986 p+=quantum_info->pad;
1987 q+=GetPixelChannels(image);
1993 range=GetQuantumRange(quantum_info->depth);
1994 for (x=0; x < (ssize_t) number_pixels; x++)
1996 p=PushQuantumPixel(quantum_info,p,&pixel);
1997 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
1998 p=PushQuantumPixel(quantum_info,p,&pixel);
1999 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
2000 p+=quantum_info->pad;
2001 q+=GetPixelChannels(image);
2007 range=GetQuantumRange(quantum_info->depth);
2008 for (x=0; x < (ssize_t) number_pixels; x++)
2010 p=PushQuantumPixel(quantum_info,p,&pixel);
2011 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
2012 p=PushQuantumPixel(quantum_info,p,&pixel);
2013 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
2014 p+=quantum_info->pad;
2015 q+=GetPixelChannels(image);
2024 if (quantum_info->format == FloatingPointQuantumFormat)
2026 for (x=0; x < (ssize_t) number_pixels; x++)
2028 p=PushShortPixel(quantum_info->endian,p,&pixel);
2029 SetPixelGray(image,ClampToQuantum(QuantumRange*
2030 HalfToSinglePrecision(pixel)),q);
2031 p=PushShortPixel(quantum_info->endian,p,&pixel);
2032 SetPixelAlpha(image,ClampToQuantum(QuantumRange*
2033 HalfToSinglePrecision(pixel)),q);
2034 p+=quantum_info->pad;
2035 q+=GetPixelChannels(image);
2039 for (x=0; x < (ssize_t) number_pixels; x++)
2041 p=PushShortPixel(quantum_info->endian,p,&pixel);
2042 SetPixelGray(image,ScaleShortToQuantum(pixel),q);
2043 p=PushShortPixel(quantum_info->endian,p,&pixel);
2044 SetPixelAlpha(image,ScaleShortToQuantum(pixel),q);
2045 p+=quantum_info->pad;
2046 q+=GetPixelChannels(image);
2055 if (quantum_info->format == FloatingPointQuantumFormat)
2060 for (x=0; x < (ssize_t) number_pixels; x++)
2062 p=PushFloatPixel(quantum_info,p,&pixel);
2063 SetPixelGray(image,ClampToQuantum(pixel),q);
2064 p=PushFloatPixel(quantum_info,p,&pixel);
2065 SetPixelAlpha(image,ClampToQuantum(pixel),q);
2066 p+=quantum_info->pad;
2067 q+=GetPixelChannels(image);
2071 for (x=0; x < (ssize_t) number_pixels; x++)
2073 p=PushLongPixel(quantum_info->endian,p,&pixel);
2074 SetPixelGray(image,ScaleLongToQuantum(pixel),q);
2075 p=PushLongPixel(quantum_info->endian,p,&pixel);
2076 SetPixelAlpha(image,ScaleLongToQuantum(pixel),q);
2077 p+=quantum_info->pad;
2078 q+=GetPixelChannels(image);
2084 if (quantum_info->format == FloatingPointQuantumFormat)
2089 for (x=0; x < (ssize_t) number_pixels; x++)
2091 p=PushDoublePixel(quantum_info,p,&pixel);
2092 SetPixelGray(image,ClampToQuantum(pixel),q);
2093 p=PushDoublePixel(quantum_info,p,&pixel);
2094 SetPixelAlpha(image,ClampToQuantum(pixel),q);
2095 p+=quantum_info->pad;
2096 q+=GetPixelChannels(image);
2103 range=GetQuantumRange(quantum_info->depth);
2104 for (x=0; x < (ssize_t) number_pixels; x++)
2106 p=PushQuantumPixel(quantum_info,p,&pixel);
2107 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
2108 p=PushQuantumPixel(quantum_info,p,&pixel);
2109 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
2110 p+=quantum_info->pad;
2111 q+=GetPixelChannels(image);
2118 static void ImportGreenQuantum(const Image *image,QuantumInfo *quantum_info,
2119 const MagickSizeType number_pixels,const unsigned char *restrict p,
2120 Quantum *restrict q,ExceptionInfo *exception)
2131 assert(image != (Image *) NULL);
2132 assert(image->signature == MagickSignature);
2133 switch (quantum_info->depth)
2140 for (x=0; x < (ssize_t) number_pixels; x++)
2142 p=PushCharPixel(p,&pixel);
2143 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
2144 p+=quantum_info->pad;
2145 q+=GetPixelChannels(image);
2154 if (quantum_info->format == FloatingPointQuantumFormat)
2156 for (x=0; x < (ssize_t) number_pixels; x++)
2158 p=PushShortPixel(quantum_info->endian,p,&pixel);
2159 SetPixelGreen(image,ClampToQuantum(QuantumRange*
2160 HalfToSinglePrecision(pixel)),q);
2161 p+=quantum_info->pad;
2162 q+=GetPixelChannels(image);
2166 for (x=0; x < (ssize_t) number_pixels; x++)
2168 p=PushShortPixel(quantum_info->endian,p,&pixel);
2169 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
2170 p+=quantum_info->pad;
2171 q+=GetPixelChannels(image);
2180 if (quantum_info->format == FloatingPointQuantumFormat)
2185 for (x=0; x < (ssize_t) number_pixels; x++)
2187 p=PushFloatPixel(quantum_info,p,&pixel);
2188 SetPixelGreen(image,ClampToQuantum(pixel),q);
2189 p+=quantum_info->pad;
2190 q+=GetPixelChannels(image);
2194 for (x=0; x < (ssize_t) number_pixels; x++)
2196 p=PushLongPixel(quantum_info->endian,p,&pixel);
2197 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
2198 p+=quantum_info->pad;
2199 q+=GetPixelChannels(image);
2205 if (quantum_info->format == FloatingPointQuantumFormat)
2210 for (x=0; x < (ssize_t) number_pixels; x++)
2212 p=PushDoublePixel(quantum_info,p,&pixel);
2213 SetPixelGreen(image,ClampToQuantum(pixel),q);
2214 p+=quantum_info->pad;
2215 q+=GetPixelChannels(image);
2222 range=GetQuantumRange(quantum_info->depth);
2223 for (x=0; x < (ssize_t) number_pixels; x++)
2225 p=PushQuantumPixel(quantum_info,p,&pixel);
2226 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
2227 p+=quantum_info->pad;
2228 q+=GetPixelChannels(image);
2235 static void ImportIndexQuantum(const Image *image,QuantumInfo *quantum_info,
2236 const MagickSizeType number_pixels,const unsigned char *restrict p,
2237 Quantum *restrict q,ExceptionInfo *exception)
2251 if (image->storage_class != PseudoClass)
2253 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2254 "ColormappedImageRequired","`%s'",image->filename);
2257 range_exception=MagickFalse;
2258 switch (quantum_info->depth)
2262 register unsigned char
2265 for (x=0; x < ((ssize_t) number_pixels-7); x+=8)
2267 for (bit=0; bit < 8; bit++)
2269 if (quantum_info->min_is_white == MagickFalse)
2270 pixel=(unsigned char) (((*p) & (1 << (7-bit))) == 0 ?
2273 pixel=(unsigned char) (((*p) & (1 << (7-bit))) != 0 ?
2275 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),
2277 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2278 GetPixelIndex(image,q),q);
2279 q+=GetPixelChannels(image);
2283 for (bit=0; bit < (ssize_t) (number_pixels % 8); bit++)
2285 if (quantum_info->min_is_white == MagickFalse)
2286 pixel=(unsigned char) (((*p) & (1 << (7-bit))) == 0 ? 0x00 : 0x01);
2288 pixel=(unsigned char) (((*p) & (1 << (7-bit))) != 0 ? 0x00 : 0x01);
2289 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2290 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2291 GetPixelIndex(image,q),q);
2292 q+=GetPixelChannels(image);
2298 register unsigned char
2301 for (x=0; x < ((ssize_t) number_pixels-1); x+=2)
2303 pixel=(unsigned char) ((*p >> 4) & 0xf);
2304 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2305 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2306 GetPixelIndex(image,q),q);
2307 q+=GetPixelChannels(image);
2308 pixel=(unsigned char) ((*p) & 0xf);
2309 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2310 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2311 GetPixelIndex(image,q),q);
2313 q+=GetPixelChannels(image);
2315 for (bit=0; bit < (ssize_t) (number_pixels % 2); bit++)
2317 pixel=(unsigned char) ((*p++ >> 4) & 0xf);
2318 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2319 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2320 GetPixelIndex(image,q),q);
2321 q+=GetPixelChannels(image);
2330 for (x=0; x < (ssize_t) number_pixels; x++)
2332 p=PushCharPixel(p,&pixel);
2333 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2334 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2335 GetPixelIndex(image,q),q);
2336 p+=quantum_info->pad;
2337 q+=GetPixelChannels(image);
2346 if (quantum_info->format == FloatingPointQuantumFormat)
2348 for (x=0; x < (ssize_t) number_pixels; x++)
2350 p=PushShortPixel(quantum_info->endian,p,&pixel);
2351 SetPixelIndex(image,PushColormapIndex(image,ClampToQuantum(
2352 (double) QuantumRange*HalfToSinglePrecision(pixel)),
2353 &range_exception),q);
2354 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2355 GetPixelIndex(image,q),q);
2356 p+=quantum_info->pad;
2357 q+=GetPixelChannels(image);
2361 for (x=0; x < (ssize_t) number_pixels; x++)
2363 p=PushShortPixel(quantum_info->endian,p,&pixel);
2364 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2365 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2366 GetPixelIndex(image,q),q);
2367 p+=quantum_info->pad;
2368 q+=GetPixelChannels(image);
2377 if (quantum_info->format == FloatingPointQuantumFormat)
2382 for (x=0; x < (ssize_t) number_pixels; x++)
2384 p=PushFloatPixel(quantum_info,p,&pixel);
2385 SetPixelIndex(image,PushColormapIndex(image,ClampToQuantum(pixel),
2386 &range_exception),q);
2387 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2388 GetPixelIndex(image,q),q);
2389 p+=quantum_info->pad;
2390 q+=GetPixelChannels(image);
2394 for (x=0; x < (ssize_t) number_pixels; x++)
2396 p=PushLongPixel(quantum_info->endian,p,&pixel);
2397 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2398 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2399 GetPixelIndex(image,q),q);
2400 p+=quantum_info->pad;
2401 q+=GetPixelChannels(image);
2407 if (quantum_info->format == FloatingPointQuantumFormat)
2412 for (x=0; x < (ssize_t) number_pixels; x++)
2414 p=PushDoublePixel(quantum_info,p,&pixel);
2415 SetPixelIndex(image,PushColormapIndex(image,ClampToQuantum(pixel),
2416 &range_exception),q);
2417 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2418 GetPixelIndex(image,q),q);
2419 p+=quantum_info->pad;
2420 q+=GetPixelChannels(image);
2427 for (x=0; x < (ssize_t) number_pixels; x++)
2429 p=PushQuantumPixel(quantum_info,p,&pixel);
2430 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2431 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2432 GetPixelIndex(image,q),q);
2433 p+=quantum_info->pad;
2434 q+=GetPixelChannels(image);
2439 if (range_exception != MagickFalse)
2440 (void) ThrowMagickException(exception,GetMagickModule(),CorruptImageError,
2441 "InvalidColormapIndex","`%s'",image->filename);
2444 static void ImportIndexAlphaQuantum(const Image *image,
2445 QuantumInfo *quantum_info,const MagickSizeType number_pixels,
2446 const unsigned char *restrict p,Quantum *restrict q,ExceptionInfo *exception)
2463 if (image->storage_class != PseudoClass)
2465 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2466 "ColormappedImageRequired","`%s'",image->filename);
2469 range_exception=MagickFalse;
2470 switch (quantum_info->depth)
2474 register unsigned char
2477 for (x=((ssize_t) number_pixels-3); x > 0; x-=4)
2479 for (bit=0; bit < 8; bit+=2)
2481 if (quantum_info->min_is_white == MagickFalse)
2482 pixel=(unsigned char) (((*p) & (1 << (7-bit))) == 0 ? 0x00 : 0x01);
2484 pixel=(unsigned char) (((*p) & (1 << (7-bit))) != 0 ? 0x00 : 0x01);
2485 SetPixelGray(image,(Quantum) (pixel == 0 ? 0 : QuantumRange),q);
2486 SetPixelAlpha(image,((*p) & (1UL << (unsigned char) (6-bit))) == 0 ?
2487 TransparentAlpha : OpaqueAlpha,q);
2488 SetPixelIndex(image,(Quantum) (pixel == 0 ? 0 : 1),q);
2489 q+=GetPixelChannels(image);
2492 if ((number_pixels % 4) != 0)
2493 for (bit=3; bit >= (ssize_t) (4-(number_pixels % 4)); bit-=2)
2495 if (quantum_info->min_is_white == MagickFalse)
2496 pixel=(unsigned char) (((*p) & (1 << (7-bit))) == 0 ? 0x00 : 0x01);
2498 pixel=(unsigned char) (((*p) & (1 << (7-bit))) != 0 ? 0x00 : 0x01);
2499 SetPixelIndex(image,(Quantum) (pixel == 0 ? 0 : 1),q);
2500 SetPixelGray(image,(Quantum) (pixel == 0 ? 0 : QuantumRange),q);
2501 SetPixelAlpha(image,((*p) & (1UL << (unsigned char) (6-bit))) == 0 ?
2502 TransparentAlpha : OpaqueAlpha,q);
2503 q+=GetPixelChannels(image);
2509 register unsigned char
2512 range=GetQuantumRange(quantum_info->depth);
2513 for (x=0; x < (ssize_t) number_pixels; x++)
2515 pixel=(unsigned char) ((*p >> 4) & 0xf);
2516 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2517 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2518 GetPixelIndex(image,q),q);
2519 pixel=(unsigned char) ((*p) & 0xf);
2520 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
2522 q+=GetPixelChannels(image);
2531 for (x=0; x < (ssize_t) number_pixels; x++)
2533 p=PushCharPixel(p,&pixel);
2534 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2535 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2536 GetPixelIndex(image,q),q);
2537 p=PushCharPixel(p,&pixel);
2538 SetPixelAlpha(image,ScaleCharToQuantum(pixel),q);
2539 p+=quantum_info->pad;
2540 q+=GetPixelChannels(image);
2549 if (quantum_info->format == FloatingPointQuantumFormat)
2551 for (x=0; x < (ssize_t) number_pixels; x++)
2553 p=PushShortPixel(quantum_info->endian,p,&pixel);
2554 SetPixelIndex(image,PushColormapIndex(image,ClampToQuantum(
2555 (double) QuantumRange*HalfToSinglePrecision(pixel)),
2556 &range_exception),q);
2557 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2558 GetPixelIndex(image,q),q);
2559 p=PushShortPixel(quantum_info->endian,p,&pixel);
2560 SetPixelAlpha(image,ClampToQuantum(QuantumRange*
2561 HalfToSinglePrecision(pixel)),q);
2562 p+=quantum_info->pad;
2563 q+=GetPixelChannels(image);
2567 for (x=0; x < (ssize_t) number_pixels; x++)
2569 p=PushShortPixel(quantum_info->endian,p,&pixel);
2570 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2571 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2572 GetPixelIndex(image,q),q);
2573 p=PushShortPixel(quantum_info->endian,p,&pixel);
2574 SetPixelAlpha(image,ScaleShortToQuantum(pixel),q);
2575 p+=quantum_info->pad;
2576 q+=GetPixelChannels(image);
2585 if (quantum_info->format == FloatingPointQuantumFormat)
2590 for (x=0; x < (ssize_t) number_pixels; x++)
2592 p=PushFloatPixel(quantum_info,p,&pixel);
2593 SetPixelIndex(image,PushColormapIndex(image,
2594 ClampToQuantum(pixel),&range_exception),q);
2595 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2596 GetPixelIndex(image,q),q);
2597 p=PushFloatPixel(quantum_info,p,&pixel);
2598 SetPixelAlpha(image,ClampToQuantum(pixel),q);
2599 p+=quantum_info->pad;
2600 q+=GetPixelChannels(image);
2604 for (x=0; x < (ssize_t) number_pixels; x++)
2606 p=PushLongPixel(quantum_info->endian,p,&pixel);
2607 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2608 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2609 GetPixelIndex(image,q),q);
2610 p=PushLongPixel(quantum_info->endian,p,&pixel);
2611 SetPixelAlpha(image,ScaleLongToQuantum(pixel),q);
2612 p+=quantum_info->pad;
2613 q+=GetPixelChannels(image);
2619 if (quantum_info->format == FloatingPointQuantumFormat)
2624 for (x=0; x < (ssize_t) number_pixels; x++)
2626 p=PushDoublePixel(quantum_info,p,&pixel);
2627 SetPixelIndex(image,PushColormapIndex(image,ClampToQuantum(pixel),
2628 &range_exception),q);
2629 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2630 GetPixelIndex(image,q),q);
2631 p=PushDoublePixel(quantum_info,p,&pixel);
2632 SetPixelAlpha(image,ClampToQuantum(pixel),q);
2633 p+=quantum_info->pad;
2634 q+=GetPixelChannels(image);
2641 range=GetQuantumRange(quantum_info->depth);
2642 for (x=0; x < (ssize_t) number_pixels; x++)
2644 p=PushQuantumPixel(quantum_info,p,&pixel);
2645 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2646 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2647 GetPixelIndex(image,q),q);
2648 p=PushQuantumPixel(quantum_info,p,&pixel);
2649 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
2650 p+=quantum_info->pad;
2651 q+=GetPixelChannels(image);
2656 if (range_exception != MagickFalse)
2657 (void) ThrowMagickException(exception,GetMagickModule(),CorruptImageError,
2658 "InvalidColormapIndex","`%s'",image->filename);
2661 static void ImportOpacityQuantum(const Image *image,QuantumInfo *quantum_info,
2662 const MagickSizeType number_pixels,const unsigned char *restrict p,
2663 Quantum *restrict q,ExceptionInfo *exception)
2674 assert(image != (Image *) NULL);
2675 assert(image->signature == MagickSignature);
2676 switch (quantum_info->depth)
2683 for (x=0; x < (ssize_t) number_pixels; x++)
2685 p=PushCharPixel(p,&pixel);
2686 SetPixelOpacity(image,ScaleCharToQuantum(pixel),q);
2687 p+=quantum_info->pad;
2688 q+=GetPixelChannels(image);
2697 if (quantum_info->format == FloatingPointQuantumFormat)
2699 for (x=0; x < (ssize_t) number_pixels; x++)
2701 p=PushShortPixel(quantum_info->endian,p,&pixel);
2702 SetPixelOpacity(image,ClampToQuantum(QuantumRange*
2703 HalfToSinglePrecision(pixel)),q);
2704 p+=quantum_info->pad;
2705 q+=GetPixelChannels(image);
2709 for (x=0; x < (ssize_t) number_pixels; x++)
2711 p=PushShortPixel(quantum_info->endian,p,&pixel);
2712 SetPixelOpacity(image,ScaleShortToQuantum(pixel),q);
2713 p+=quantum_info->pad;
2714 q+=GetPixelChannels(image);
2723 if (quantum_info->format == FloatingPointQuantumFormat)
2728 for (x=0; x < (ssize_t) number_pixels; x++)
2730 p=PushFloatPixel(quantum_info,p,&pixel);
2731 SetPixelOpacity(image,ClampToQuantum(pixel),q);
2732 p+=quantum_info->pad;
2733 q+=GetPixelChannels(image);
2737 for (x=0; x < (ssize_t) number_pixels; x++)
2739 p=PushLongPixel(quantum_info->endian,p,&pixel);
2740 SetPixelOpacity(image,ScaleLongToQuantum(pixel),q);
2741 p+=quantum_info->pad;
2742 q+=GetPixelChannels(image);
2748 if (quantum_info->format == FloatingPointQuantumFormat)
2753 for (x=0; x < (ssize_t) number_pixels; x++)
2755 p=PushDoublePixel(quantum_info,p,&pixel);
2756 SetPixelOpacity(image,ClampToQuantum(pixel),q);
2757 p+=quantum_info->pad;
2758 q+=GetPixelChannels(image);
2765 range=GetQuantumRange(quantum_info->depth);
2766 for (x=0; x < (ssize_t) number_pixels; x++)
2768 p=PushQuantumPixel(quantum_info,p,&pixel);
2769 SetPixelOpacity(image,ScaleAnyToQuantum(pixel,range),q);
2770 p+=quantum_info->pad;
2771 q+=GetPixelChannels(image);
2778 static void ImportRedQuantum(const Image *image,QuantumInfo *quantum_info,
2779 const MagickSizeType number_pixels,const unsigned char *restrict p,
2780 Quantum *restrict q,ExceptionInfo *exception)
2791 assert(image != (Image *) NULL);
2792 assert(image->signature == MagickSignature);
2793 switch (quantum_info->depth)
2800 for (x=0; x < (ssize_t) number_pixels; x++)
2802 p=PushCharPixel(p,&pixel);
2803 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
2804 p+=quantum_info->pad;
2805 q+=GetPixelChannels(image);
2814 if (quantum_info->format == FloatingPointQuantumFormat)
2816 for (x=0; x < (ssize_t) number_pixels; x++)
2818 p=PushShortPixel(quantum_info->endian,p,&pixel);
2819 SetPixelRed(image,ClampToQuantum(QuantumRange*
2820 HalfToSinglePrecision(pixel)),q);
2821 p+=quantum_info->pad;
2822 q+=GetPixelChannels(image);
2826 for (x=0; x < (ssize_t) number_pixels; x++)
2828 p=PushShortPixel(quantum_info->endian,p,&pixel);
2829 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
2830 p+=quantum_info->pad;
2831 q+=GetPixelChannels(image);
2840 if (quantum_info->format == FloatingPointQuantumFormat)
2845 for (x=0; x < (ssize_t) number_pixels; x++)
2847 p=PushFloatPixel(quantum_info,p,&pixel);
2848 SetPixelRed(image,ClampToQuantum(pixel),q);
2849 p+=quantum_info->pad;
2850 q+=GetPixelChannels(image);
2854 for (x=0; x < (ssize_t) number_pixels; x++)
2856 p=PushLongPixel(quantum_info->endian,p,&pixel);
2857 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
2858 p+=quantum_info->pad;
2859 q+=GetPixelChannels(image);
2865 if (quantum_info->format == FloatingPointQuantumFormat)
2870 for (x=0; x < (ssize_t) number_pixels; x++)
2872 p=PushDoublePixel(quantum_info,p,&pixel);
2873 SetPixelRed(image,ClampToQuantum(pixel),q);
2874 p+=quantum_info->pad;
2875 q+=GetPixelChannels(image);
2882 range=GetQuantumRange(quantum_info->depth);
2883 for (x=0; x < (ssize_t) number_pixels; x++)
2885 p=PushQuantumPixel(quantum_info,p,&pixel);
2886 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
2887 p+=quantum_info->pad;
2888 q+=GetPixelChannels(image);
2895 static void ImportRGBQuantum(const Image *image,QuantumInfo *quantum_info,
2896 const MagickSizeType number_pixels,const unsigned char *restrict p,
2897 Quantum *restrict q,ExceptionInfo *exception)
2911 assert(image != (Image *) NULL);
2912 assert(image->signature == MagickSignature);
2913 switch (quantum_info->depth)
2920 for (x=0; x < (ssize_t) number_pixels; x++)
2922 p=PushCharPixel(p,&pixel);
2923 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
2924 p=PushCharPixel(p,&pixel);
2925 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
2926 p=PushCharPixel(p,&pixel);
2927 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
2928 SetPixelAlpha(image,OpaqueAlpha,q);
2929 p+=quantum_info->pad;
2930 q+=GetPixelChannels(image);
2936 range=GetQuantumRange(quantum_info->depth);
2937 if (quantum_info->pack == MagickFalse)
2939 for (x=0; x < (ssize_t) number_pixels; x++)
2941 p=PushLongPixel(quantum_info->endian,p,&pixel);
2942 SetPixelRed(image,ScaleAnyToQuantum((pixel >> 22) & 0x3ff,range),q);
2943 SetPixelGreen(image,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,range),
2945 SetPixelBlue(image,ScaleAnyToQuantum((pixel >> 2) & 0x3ff,range),q);
2946 p+=quantum_info->pad;
2947 q+=GetPixelChannels(image);
2951 if (quantum_info->quantum == 32U)
2953 for (x=0; x < (ssize_t) number_pixels; x++)
2955 p=PushQuantumLongPixel(quantum_info,p,&pixel);
2956 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
2957 p=PushQuantumLongPixel(quantum_info,p,&pixel);
2958 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
2959 p=PushQuantumLongPixel(quantum_info,p,&pixel);
2960 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
2961 q+=GetPixelChannels(image);
2965 for (x=0; x < (ssize_t) number_pixels; x++)
2967 p=PushQuantumPixel(quantum_info,p,&pixel);
2968 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
2969 p=PushQuantumPixel(quantum_info,p,&pixel);
2970 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
2971 p=PushQuantumPixel(quantum_info,p,&pixel);
2972 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
2973 q+=GetPixelChannels(image);
2979 range=GetQuantumRange(quantum_info->depth);
2980 if (quantum_info->pack == MagickFalse)
2985 for (x=0; x < (ssize_t) (3*number_pixels-1); x+=2)
2987 p=PushShortPixel(quantum_info->endian,p,&pixel);
2993 SetPixelRed(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
2999 SetPixelGreen(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3005 SetPixelBlue(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3007 q+=GetPixelChannels(image);
3011 p=PushShortPixel(quantum_info->endian,p,&pixel);
3017 SetPixelRed(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3023 SetPixelGreen(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3029 SetPixelBlue(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3031 q+=GetPixelChannels(image);
3035 p+=quantum_info->pad;
3037 for (bit=0; bit < (ssize_t) (3*number_pixels % 2); bit++)
3039 p=PushShortPixel(quantum_info->endian,p,&pixel);
3040 switch ((x+bit) % 3)
3045 SetPixelRed(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3051 SetPixelGreen(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3057 SetPixelBlue(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3059 q+=GetPixelChannels(image);
3063 p+=quantum_info->pad;
3069 if (quantum_info->quantum == 32U)
3071 for (x=0; x < (ssize_t) number_pixels; x++)
3073 p=PushQuantumLongPixel(quantum_info,p,&pixel);
3074 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
3075 p=PushQuantumLongPixel(quantum_info,p,&pixel);
3076 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
3077 p=PushQuantumLongPixel(quantum_info,p,&pixel);
3078 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
3079 q+=GetPixelChannels(image);
3083 for (x=0; x < (ssize_t) number_pixels; x++)
3085 p=PushQuantumPixel(quantum_info,p,&pixel);
3086 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
3087 p=PushQuantumPixel(quantum_info,p,&pixel);
3088 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
3089 p=PushQuantumPixel(quantum_info,p,&pixel);
3090 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
3091 q+=GetPixelChannels(image);
3100 if (quantum_info->format == FloatingPointQuantumFormat)
3102 for (x=0; x < (ssize_t) number_pixels; x++)
3104 p=PushShortPixel(quantum_info->endian,p,&pixel);
3105 SetPixelRed(image,ClampToQuantum(QuantumRange*
3106 HalfToSinglePrecision(pixel)),q);
3107 p=PushShortPixel(quantum_info->endian,p,&pixel);
3108 SetPixelGreen(image,ClampToQuantum(QuantumRange*
3109 HalfToSinglePrecision(pixel)),q);
3110 p=PushShortPixel(quantum_info->endian,p,&pixel);
3111 SetPixelBlue(image,ClampToQuantum(QuantumRange*
3112 HalfToSinglePrecision(pixel)),q);
3113 p+=quantum_info->pad;
3114 q+=GetPixelChannels(image);
3118 for (x=0; x < (ssize_t) number_pixels; x++)
3120 p=PushShortPixel(quantum_info->endian,p,&pixel);
3121 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
3122 p=PushShortPixel(quantum_info->endian,p,&pixel);
3123 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
3124 p=PushShortPixel(quantum_info->endian,p,&pixel);
3125 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
3126 p+=quantum_info->pad;
3127 q+=GetPixelChannels(image);
3136 if (quantum_info->format == FloatingPointQuantumFormat)
3141 for (x=0; x < (ssize_t) number_pixels; x++)
3143 p=PushFloatPixel(quantum_info,p,&pixel);
3144 SetPixelRed(image,ClampToQuantum(pixel),q);
3145 p=PushFloatPixel(quantum_info,p,&pixel);
3146 SetPixelGreen(image,ClampToQuantum(pixel),q);
3147 p=PushFloatPixel(quantum_info,p,&pixel);
3148 SetPixelBlue(image,ClampToQuantum(pixel),q);
3149 p+=quantum_info->pad;
3150 q+=GetPixelChannels(image);
3154 for (x=0; x < (ssize_t) number_pixels; x++)
3156 p=PushLongPixel(quantum_info->endian,p,&pixel);
3157 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
3158 p=PushLongPixel(quantum_info->endian,p,&pixel);
3159 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
3160 p=PushLongPixel(quantum_info->endian,p,&pixel);
3161 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
3162 p+=quantum_info->pad;
3163 q+=GetPixelChannels(image);
3169 if (quantum_info->format == FloatingPointQuantumFormat)
3174 for (x=0; x < (ssize_t) number_pixels; x++)
3176 p=PushDoublePixel(quantum_info,p,&pixel);
3177 SetPixelRed(image,ClampToQuantum(pixel),q);
3178 p=PushDoublePixel(quantum_info,p,&pixel);
3179 SetPixelGreen(image,ClampToQuantum(pixel),q);
3180 p=PushDoublePixel(quantum_info,p,&pixel);
3181 SetPixelBlue(image,ClampToQuantum(pixel),q);
3182 p+=quantum_info->pad;
3183 q+=GetPixelChannels(image);
3190 range=GetQuantumRange(quantum_info->depth);
3191 for (x=0; x < (ssize_t) number_pixels; x++)
3193 p=PushQuantumPixel(quantum_info,p,&pixel);
3194 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
3195 p=PushQuantumPixel(quantum_info,p,&pixel);
3196 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
3197 p=PushQuantumPixel(quantum_info,p,&pixel);
3198 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
3199 q+=GetPixelChannels(image);
3206 static void ImportRGBAQuantum(const Image *image,QuantumInfo *quantum_info,
3207 const MagickSizeType number_pixels,const unsigned char *restrict p,
3208 Quantum *restrict q,ExceptionInfo *exception)
3219 assert(image != (Image *) NULL);
3220 assert(image->signature == MagickSignature);
3221 switch (quantum_info->depth)
3228 for (x=0; x < (ssize_t) number_pixels; x++)
3230 p=PushCharPixel(p,&pixel);
3231 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
3232 p=PushCharPixel(p,&pixel);
3233 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
3234 p=PushCharPixel(p,&pixel);
3235 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
3236 p=PushCharPixel(p,&pixel);
3237 SetPixelAlpha(image,ScaleCharToQuantum(pixel),q);
3238 p+=quantum_info->pad;
3239 q+=GetPixelChannels(image);
3246 if (quantum_info->pack == MagickFalse)
3259 for (x=0; x < (ssize_t) number_pixels; x++)
3261 for (i=0; i < 4; i++)
3267 p=PushLongPixel(quantum_info->endian,p,&pixel);
3268 quantum=(size_t) (ScaleShortToQuantum((unsigned short)
3269 (((pixel >> 22) & 0x3ff) << 6)));
3274 quantum=(size_t) (ScaleShortToQuantum((unsigned short)
3275 (((pixel >> 12) & 0x3ff) << 6)));
3280 quantum=(size_t) (ScaleShortToQuantum((unsigned short)
3281 (((pixel >> 2) & 0x3ff) << 6)));
3287 case 0: SetPixelRed(image,(Quantum) quantum,q); break;
3288 case 1: SetPixelGreen(image,(Quantum) quantum,q); break;
3289 case 2: SetPixelBlue(image,(Quantum) quantum,q); break;
3290 case 3: SetPixelAlpha(image,(Quantum) quantum,q); break;
3294 p+=quantum_info->pad;
3295 q+=GetPixelChannels(image);
3299 for (x=0; x < (ssize_t) number_pixels; x++)
3301 p=PushQuantumPixel(quantum_info,p,&pixel);
3302 SetPixelRed(image,ScaleShortToQuantum((unsigned short) (pixel << 6)),q);
3303 p=PushQuantumPixel(quantum_info,p,&pixel);
3304 SetPixelGreen(image,ScaleShortToQuantum((unsigned short) (pixel << 6)),
3306 p=PushQuantumPixel(quantum_info,p,&pixel);
3307 SetPixelBlue(image,ScaleShortToQuantum((unsigned short) (pixel << 6)),
3309 p=PushQuantumPixel(quantum_info,p,&pixel);
3310 SetPixelAlpha(image,ScaleShortToQuantum((unsigned short) (pixel << 6)),
3312 q+=GetPixelChannels(image);
3321 if (quantum_info->format == FloatingPointQuantumFormat)
3323 for (x=0; x < (ssize_t) number_pixels; x++)
3325 p=PushShortPixel(quantum_info->endian,p,&pixel);
3326 SetPixelRed(image,ClampToQuantum(QuantumRange*
3327 HalfToSinglePrecision(pixel)),q);
3328 p=PushShortPixel(quantum_info->endian,p,&pixel);
3329 SetPixelGreen(image,ClampToQuantum(QuantumRange*
3330 HalfToSinglePrecision(pixel)),q);
3331 p=PushShortPixel(quantum_info->endian,p,&pixel);
3332 SetPixelBlue(image,ClampToQuantum(QuantumRange*
3333 HalfToSinglePrecision(pixel)),q);
3334 p=PushShortPixel(quantum_info->endian,p,&pixel);
3335 SetPixelAlpha(image,ClampToQuantum(QuantumRange*
3336 HalfToSinglePrecision(pixel)),q);
3337 p+=quantum_info->pad;
3338 q+=GetPixelChannels(image);
3342 for (x=0; x < (ssize_t) number_pixels; x++)
3344 p=PushShortPixel(quantum_info->endian,p,&pixel);
3345 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
3346 p=PushShortPixel(quantum_info->endian,p,&pixel);
3347 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
3348 p=PushShortPixel(quantum_info->endian,p,&pixel);
3349 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
3350 p=PushShortPixel(quantum_info->endian,p,&pixel);
3351 SetPixelAlpha(image,ScaleShortToQuantum(pixel),q);
3352 p+=quantum_info->pad;
3353 q+=GetPixelChannels(image);
3362 if (quantum_info->format == FloatingPointQuantumFormat)
3367 for (x=0; x < (ssize_t) number_pixels; x++)
3369 p=PushFloatPixel(quantum_info,p,&pixel);
3370 SetPixelRed(image,ClampToQuantum(pixel),q);
3371 p=PushFloatPixel(quantum_info,p,&pixel);
3372 SetPixelGreen(image,ClampToQuantum(pixel),q);
3373 p=PushFloatPixel(quantum_info,p,&pixel);
3374 SetPixelBlue(image,ClampToQuantum(pixel),q);
3375 p=PushFloatPixel(quantum_info,p,&pixel);
3376 SetPixelAlpha(image,ClampToQuantum(pixel),q);
3377 p+=quantum_info->pad;
3378 q+=GetPixelChannels(image);
3382 for (x=0; x < (ssize_t) number_pixels; x++)
3384 p=PushLongPixel(quantum_info->endian,p,&pixel);
3385 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
3386 p=PushLongPixel(quantum_info->endian,p,&pixel);
3387 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
3388 p=PushLongPixel(quantum_info->endian,p,&pixel);
3389 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
3390 p=PushLongPixel(quantum_info->endian,p,&pixel);
3391 SetPixelAlpha(image,ScaleLongToQuantum(pixel),q);
3392 p+=quantum_info->pad;
3393 q+=GetPixelChannels(image);
3399 if (quantum_info->format == FloatingPointQuantumFormat)
3404 for (x=0; x < (ssize_t) number_pixels; x++)
3406 p=PushDoublePixel(quantum_info,p,&pixel);
3407 SetPixelRed(image,ClampToQuantum(pixel),q);
3408 p=PushDoublePixel(quantum_info,p,&pixel);
3409 SetPixelGreen(image,ClampToQuantum(pixel),q);
3410 p=PushDoublePixel(quantum_info,p,&pixel);
3411 SetPixelBlue(image,ClampToQuantum(pixel),q);
3412 p=PushDoublePixel(quantum_info,p,&pixel);
3413 SetPixelAlpha(image,ClampToQuantum(pixel),q);
3414 p+=quantum_info->pad;
3415 q+=GetPixelChannels(image);
3422 range=GetQuantumRange(quantum_info->depth);
3423 for (x=0; x < (ssize_t) number_pixels; x++)
3425 p=PushQuantumPixel(quantum_info,p,&pixel);
3426 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
3427 p=PushQuantumPixel(quantum_info,p,&pixel);
3428 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
3429 p=PushQuantumPixel(quantum_info,p,&pixel);
3430 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
3431 p=PushQuantumPixel(quantum_info,p,&pixel);
3432 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
3433 q+=GetPixelChannels(image);
3440 MagickExport size_t ImportQuantumPixels(const Image *image,
3441 CacheView *image_view,QuantumInfo *quantum_info,
3442 const QuantumType quantum_type,const unsigned char *restrict pixels,
3443 ExceptionInfo *exception)
3448 register const unsigned char
3460 assert(image != (Image *) NULL);
3461 assert(image->signature == MagickSignature);
3462 if (image->debug != MagickFalse)
3463 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
3464 assert(quantum_info != (QuantumInfo *) NULL);
3465 assert(quantum_info->signature == MagickSignature);
3466 if (pixels == (const unsigned char *) NULL)
3467 pixels=GetQuantumPixels(quantum_info);
3470 if (image_view == (CacheView *) NULL)
3472 number_pixels=GetImageExtent(image);
3473 q=GetAuthenticPixelQueue(image);
3477 number_pixels=GetCacheViewExtent(image_view);
3478 q=GetCacheViewAuthenticPixelQueue(image_view);
3480 ResetQuantumState(quantum_info);
3481 extent=GetQuantumExtent(image,quantum_info,quantum_type);
3482 switch (quantum_type)
3486 ImportAlphaQuantum(image,quantum_info,number_pixels,p,q,exception);
3491 ImportBGRQuantum(image,quantum_info,number_pixels,p,q,exception);
3497 ImportBGRAQuantum(image,quantum_info,number_pixels,p,q,exception);
3502 ImportBlackQuantum(image,quantum_info,number_pixels,p,q,exception);
3508 ImportBlueQuantum(image,quantum_info,number_pixels,p,q,exception);
3513 ImportCMYKQuantum(image,quantum_info,number_pixels,p,q,exception);
3519 ImportCMYKAQuantum(image,quantum_info,number_pixels,p,q,exception);
3524 ImportCbYCrYQuantum(image,quantum_info,number_pixels,p,q,exception);
3529 ImportGrayQuantum(image,quantum_info,number_pixels,p,q,exception);
3532 case GrayAlphaQuantum:
3534 ImportGrayAlphaQuantum(image,quantum_info,number_pixels,p,q,exception);
3538 case MagentaQuantum:
3540 ImportGreenQuantum(image,quantum_info,number_pixels,p,q,exception);
3545 ImportIndexQuantum(image,quantum_info,number_pixels,p,q,exception);
3548 case IndexAlphaQuantum:
3550 ImportIndexAlphaQuantum(image,quantum_info,number_pixels,p,q,exception);
3553 case OpacityQuantum:
3555 ImportOpacityQuantum(image,quantum_info,number_pixels,p,q,exception);
3561 ImportRedQuantum(image,quantum_info,number_pixels,p,q,exception);
3567 ImportRGBQuantum(image,quantum_info,number_pixels,p,q,exception);
3574 ImportRGBAQuantum(image,quantum_info,number_pixels,p,q,exception);
3580 if ((quantum_type == CbYCrQuantum) || (quantum_type == CbYCrAQuantum))
3588 q=GetAuthenticPixelQueue(image);
3589 if (image_view != (CacheView *) NULL)
3590 q=GetCacheViewAuthenticPixelQueue(image_view);
3591 for (x=0; x < (ssize_t) number_pixels; x++)
3593 quantum=GetPixelRed(image,q);
3594 SetPixelRed(image,GetPixelGreen(image,q),q);
3595 SetPixelGreen(image,quantum,q);
3596 q+=GetPixelChannels(image);
3599 if ((quantum_type == RGBOQuantum) || (quantum_type == CMYKOQuantum))
3604 q=GetAuthenticPixelQueue(image);
3605 if (image_view != (CacheView *) NULL)
3606 q=GetCacheViewAuthenticPixelQueue(image_view);
3607 for (x=0; x < (ssize_t) number_pixels; x++)
3609 SetPixelAlpha(image,GetPixelAlpha(image,q),q);
3610 q+=GetPixelChannels(image);
3613 if (quantum_info->alpha_type == DisassociatedQuantumAlpha)
3625 q=GetAuthenticPixelQueue(image);
3626 if (image_view != (CacheView *) NULL)
3627 q=GetCacheViewAuthenticPixelQueue(image_view);
3628 for (x=0; x < (ssize_t) number_pixels; x++)
3633 if (GetPixelReadMask(image,q) == 0)
3635 q+=GetPixelChannels(image);
3638 Sa=QuantumScale*GetPixelAlpha(image,q);
3639 gamma=PerceptibleReciprocal(Sa);
3640 for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
3642 PixelChannel channel=GetPixelChannelChannel(image,i);
3643 PixelTrait traits=GetPixelChannelTraits(image,channel);
3644 if ((traits & UpdatePixelTrait) == 0)
3646 q[i]=ClampToQuantum(gamma*q[i]);
3648 q+=GetPixelChannels(image);