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-2014 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[4]=(*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
1934 for (x=((ssize_t) number_pixels-3); x > 0; x-=4)
1936 for (bit=0; bit < 8; bit+=2)
1938 pixel=(unsigned char) (((*p) & (1 << (7-bit))) != 0 ? 0x00 : 0x01);
1939 SetPixelGray(image,(Quantum) (pixel == 0 ? 0 : QuantumRange),q);
1940 SetPixelAlpha(image,((*p) & (1UL << (unsigned char) (6-bit))) == 0 ?
1941 TransparentAlpha : OpaqueAlpha,q);
1942 q+=GetPixelChannels(image);
1946 if ((number_pixels % 4) != 0)
1947 for (bit=3; bit >= (ssize_t) (4-(number_pixels % 4)); bit-=2)
1949 pixel=(unsigned char) (((*p) & (1 << (7-bit))) != 0 ? 0x00 : 0x01);
1950 SetPixelGray(image,(Quantum) (pixel != 0 ? 0 : QuantumRange),q);
1951 SetPixelAlpha(image,((*p) & (1UL << (unsigned char) (6-bit))) == 0 ?
1952 TransparentAlpha : OpaqueAlpha,q);
1953 q+=GetPixelChannels(image);
1961 register unsigned char
1964 range=GetQuantumRange(quantum_info->depth);
1965 for (x=0; x < (ssize_t) number_pixels; x++)
1967 pixel=(unsigned char) ((*p >> 4) & 0xf);
1968 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
1969 pixel=(unsigned char) ((*p) & 0xf);
1970 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
1972 q+=GetPixelChannels(image);
1981 for (x=0; x < (ssize_t) number_pixels; x++)
1983 p=PushCharPixel(p,&pixel);
1984 SetPixelGray(image,ScaleCharToQuantum(pixel),q);
1985 p=PushCharPixel(p,&pixel);
1986 SetPixelAlpha(image,ScaleCharToQuantum(pixel),q);
1987 p+=quantum_info->pad;
1988 q+=GetPixelChannels(image);
1994 range=GetQuantumRange(quantum_info->depth);
1995 for (x=0; x < (ssize_t) number_pixels; x++)
1997 p=PushQuantumPixel(quantum_info,p,&pixel);
1998 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
1999 p=PushQuantumPixel(quantum_info,p,&pixel);
2000 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
2001 p+=quantum_info->pad;
2002 q+=GetPixelChannels(image);
2008 range=GetQuantumRange(quantum_info->depth);
2009 for (x=0; x < (ssize_t) number_pixels; x++)
2011 p=PushQuantumPixel(quantum_info,p,&pixel);
2012 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
2013 p=PushQuantumPixel(quantum_info,p,&pixel);
2014 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
2015 p+=quantum_info->pad;
2016 q+=GetPixelChannels(image);
2025 if (quantum_info->format == FloatingPointQuantumFormat)
2027 for (x=0; x < (ssize_t) number_pixels; x++)
2029 p=PushShortPixel(quantum_info->endian,p,&pixel);
2030 SetPixelGray(image,ClampToQuantum(QuantumRange*
2031 HalfToSinglePrecision(pixel)),q);
2032 p=PushShortPixel(quantum_info->endian,p,&pixel);
2033 SetPixelAlpha(image,ClampToQuantum(QuantumRange*
2034 HalfToSinglePrecision(pixel)),q);
2035 p+=quantum_info->pad;
2036 q+=GetPixelChannels(image);
2040 for (x=0; x < (ssize_t) number_pixels; x++)
2042 p=PushShortPixel(quantum_info->endian,p,&pixel);
2043 SetPixelGray(image,ScaleShortToQuantum(pixel),q);
2044 p=PushShortPixel(quantum_info->endian,p,&pixel);
2045 SetPixelAlpha(image,ScaleShortToQuantum(pixel),q);
2046 p+=quantum_info->pad;
2047 q+=GetPixelChannels(image);
2056 if (quantum_info->format == FloatingPointQuantumFormat)
2061 for (x=0; x < (ssize_t) number_pixels; x++)
2063 p=PushFloatPixel(quantum_info,p,&pixel);
2064 SetPixelGray(image,ClampToQuantum(pixel),q);
2065 p=PushFloatPixel(quantum_info,p,&pixel);
2066 SetPixelAlpha(image,ClampToQuantum(pixel),q);
2067 p+=quantum_info->pad;
2068 q+=GetPixelChannels(image);
2072 for (x=0; x < (ssize_t) number_pixels; x++)
2074 p=PushLongPixel(quantum_info->endian,p,&pixel);
2075 SetPixelGray(image,ScaleLongToQuantum(pixel),q);
2076 p=PushLongPixel(quantum_info->endian,p,&pixel);
2077 SetPixelAlpha(image,ScaleLongToQuantum(pixel),q);
2078 p+=quantum_info->pad;
2079 q+=GetPixelChannels(image);
2085 if (quantum_info->format == FloatingPointQuantumFormat)
2090 for (x=0; x < (ssize_t) number_pixels; x++)
2092 p=PushDoublePixel(quantum_info,p,&pixel);
2093 SetPixelGray(image,ClampToQuantum(pixel),q);
2094 p=PushDoublePixel(quantum_info,p,&pixel);
2095 SetPixelAlpha(image,ClampToQuantum(pixel),q);
2096 p+=quantum_info->pad;
2097 q+=GetPixelChannels(image);
2104 range=GetQuantumRange(quantum_info->depth);
2105 for (x=0; x < (ssize_t) number_pixels; x++)
2107 p=PushQuantumPixel(quantum_info,p,&pixel);
2108 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
2109 p=PushQuantumPixel(quantum_info,p,&pixel);
2110 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
2111 p+=quantum_info->pad;
2112 q+=GetPixelChannels(image);
2119 static void ImportGreenQuantum(const Image *image,QuantumInfo *quantum_info,
2120 const MagickSizeType number_pixels,const unsigned char *restrict p,
2121 Quantum *restrict q,ExceptionInfo *exception)
2132 assert(image != (Image *) NULL);
2133 assert(image->signature == MagickSignature);
2134 switch (quantum_info->depth)
2141 for (x=0; x < (ssize_t) number_pixels; x++)
2143 p=PushCharPixel(p,&pixel);
2144 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
2145 p+=quantum_info->pad;
2146 q+=GetPixelChannels(image);
2155 if (quantum_info->format == FloatingPointQuantumFormat)
2157 for (x=0; x < (ssize_t) number_pixels; x++)
2159 p=PushShortPixel(quantum_info->endian,p,&pixel);
2160 SetPixelGreen(image,ClampToQuantum(QuantumRange*
2161 HalfToSinglePrecision(pixel)),q);
2162 p+=quantum_info->pad;
2163 q+=GetPixelChannels(image);
2167 for (x=0; x < (ssize_t) number_pixels; x++)
2169 p=PushShortPixel(quantum_info->endian,p,&pixel);
2170 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
2171 p+=quantum_info->pad;
2172 q+=GetPixelChannels(image);
2181 if (quantum_info->format == FloatingPointQuantumFormat)
2186 for (x=0; x < (ssize_t) number_pixels; x++)
2188 p=PushFloatPixel(quantum_info,p,&pixel);
2189 SetPixelGreen(image,ClampToQuantum(pixel),q);
2190 p+=quantum_info->pad;
2191 q+=GetPixelChannels(image);
2195 for (x=0; x < (ssize_t) number_pixels; x++)
2197 p=PushLongPixel(quantum_info->endian,p,&pixel);
2198 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
2199 p+=quantum_info->pad;
2200 q+=GetPixelChannels(image);
2206 if (quantum_info->format == FloatingPointQuantumFormat)
2211 for (x=0; x < (ssize_t) number_pixels; x++)
2213 p=PushDoublePixel(quantum_info,p,&pixel);
2214 SetPixelGreen(image,ClampToQuantum(pixel),q);
2215 p+=quantum_info->pad;
2216 q+=GetPixelChannels(image);
2223 range=GetQuantumRange(quantum_info->depth);
2224 for (x=0; x < (ssize_t) number_pixels; x++)
2226 p=PushQuantumPixel(quantum_info,p,&pixel);
2227 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
2228 p+=quantum_info->pad;
2229 q+=GetPixelChannels(image);
2236 static void ImportIndexQuantum(const Image *image,QuantumInfo *quantum_info,
2237 const MagickSizeType number_pixels,const unsigned char *restrict p,
2238 Quantum *restrict q,ExceptionInfo *exception)
2252 if (image->storage_class != PseudoClass)
2254 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2255 "ColormappedImageRequired","`%s'",image->filename);
2258 range_exception=MagickFalse;
2259 switch (quantum_info->depth)
2263 register unsigned char
2266 for (x=0; x < ((ssize_t) number_pixels-7); x+=8)
2268 for (bit=0; bit < 8; bit++)
2270 if (quantum_info->min_is_white == MagickFalse)
2271 pixel=(unsigned char) (((*p) & (1 << (7-bit))) == 0 ?
2274 pixel=(unsigned char) (((*p) & (1 << (7-bit))) != 0 ?
2276 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),
2278 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2279 GetPixelIndex(image,q),q);
2280 q+=GetPixelChannels(image);
2284 for (bit=0; bit < (ssize_t) (number_pixels % 8); bit++)
2286 if (quantum_info->min_is_white == MagickFalse)
2287 pixel=(unsigned char) (((*p) & (1 << (7-bit))) == 0 ? 0x00 : 0x01);
2289 pixel=(unsigned char) (((*p) & (1 << (7-bit))) != 0 ? 0x00 : 0x01);
2290 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2291 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2292 GetPixelIndex(image,q),q);
2293 q+=GetPixelChannels(image);
2299 register unsigned char
2302 for (x=0; x < ((ssize_t) number_pixels-1); x+=2)
2304 pixel=(unsigned char) ((*p >> 4) & 0xf);
2305 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2306 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2307 GetPixelIndex(image,q),q);
2308 q+=GetPixelChannels(image);
2309 pixel=(unsigned char) ((*p) & 0xf);
2310 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2311 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2312 GetPixelIndex(image,q),q);
2314 q+=GetPixelChannels(image);
2316 for (bit=0; bit < (ssize_t) (number_pixels % 2); bit++)
2318 pixel=(unsigned char) ((*p++ >> 4) & 0xf);
2319 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2320 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2321 GetPixelIndex(image,q),q);
2322 q+=GetPixelChannels(image);
2331 for (x=0; x < (ssize_t) number_pixels; x++)
2333 p=PushCharPixel(p,&pixel);
2334 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2335 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2336 GetPixelIndex(image,q),q);
2337 p+=quantum_info->pad;
2338 q+=GetPixelChannels(image);
2347 if (quantum_info->format == FloatingPointQuantumFormat)
2349 for (x=0; x < (ssize_t) number_pixels; x++)
2351 p=PushShortPixel(quantum_info->endian,p,&pixel);
2352 SetPixelIndex(image,PushColormapIndex(image,ClampToQuantum(
2353 (double) QuantumRange*HalfToSinglePrecision(pixel)),
2354 &range_exception),q);
2355 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2356 GetPixelIndex(image,q),q);
2357 p+=quantum_info->pad;
2358 q+=GetPixelChannels(image);
2362 for (x=0; x < (ssize_t) number_pixels; x++)
2364 p=PushShortPixel(quantum_info->endian,p,&pixel);
2365 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2366 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2367 GetPixelIndex(image,q),q);
2368 p+=quantum_info->pad;
2369 q+=GetPixelChannels(image);
2378 if (quantum_info->format == FloatingPointQuantumFormat)
2383 for (x=0; x < (ssize_t) number_pixels; x++)
2385 p=PushFloatPixel(quantum_info,p,&pixel);
2386 SetPixelIndex(image,PushColormapIndex(image,ClampToQuantum(pixel),
2387 &range_exception),q);
2388 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2389 GetPixelIndex(image,q),q);
2390 p+=quantum_info->pad;
2391 q+=GetPixelChannels(image);
2395 for (x=0; x < (ssize_t) number_pixels; x++)
2397 p=PushLongPixel(quantum_info->endian,p,&pixel);
2398 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2399 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2400 GetPixelIndex(image,q),q);
2401 p+=quantum_info->pad;
2402 q+=GetPixelChannels(image);
2408 if (quantum_info->format == FloatingPointQuantumFormat)
2413 for (x=0; x < (ssize_t) number_pixels; x++)
2415 p=PushDoublePixel(quantum_info,p,&pixel);
2416 SetPixelIndex(image,PushColormapIndex(image,ClampToQuantum(pixel),
2417 &range_exception),q);
2418 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2419 GetPixelIndex(image,q),q);
2420 p+=quantum_info->pad;
2421 q+=GetPixelChannels(image);
2428 for (x=0; x < (ssize_t) number_pixels; x++)
2430 p=PushQuantumPixel(quantum_info,p,&pixel);
2431 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2432 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2433 GetPixelIndex(image,q),q);
2434 p+=quantum_info->pad;
2435 q+=GetPixelChannels(image);
2440 if (range_exception != MagickFalse)
2441 (void) ThrowMagickException(exception,GetMagickModule(),CorruptImageError,
2442 "InvalidColormapIndex","`%s'",image->filename);
2445 static void ImportIndexAlphaQuantum(const Image *image,
2446 QuantumInfo *quantum_info,const MagickSizeType number_pixels,
2447 const unsigned char *restrict p,Quantum *restrict q,ExceptionInfo *exception)
2464 if (image->storage_class != PseudoClass)
2466 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2467 "ColormappedImageRequired","`%s'",image->filename);
2470 range_exception=MagickFalse;
2471 switch (quantum_info->depth)
2475 register unsigned char
2478 for (x=((ssize_t) number_pixels-3); x > 0; x-=4)
2480 for (bit=0; bit < 8; bit+=2)
2482 if (quantum_info->min_is_white == MagickFalse)
2483 pixel=(unsigned char) (((*p) & (1 << (7-bit))) == 0 ? 0x00 : 0x01);
2485 pixel=(unsigned char) (((*p) & (1 << (7-bit))) != 0 ? 0x00 : 0x01);
2486 SetPixelGray(image,(Quantum) (pixel == 0 ? 0 : QuantumRange),q);
2487 SetPixelAlpha(image,((*p) & (1UL << (unsigned char) (6-bit))) == 0 ?
2488 TransparentAlpha : OpaqueAlpha,q);
2489 SetPixelIndex(image,(Quantum) (pixel == 0 ? 0 : 1),q);
2490 q+=GetPixelChannels(image);
2493 if ((number_pixels % 4) != 0)
2494 for (bit=3; bit >= (ssize_t) (4-(number_pixels % 4)); bit-=2)
2496 if (quantum_info->min_is_white == MagickFalse)
2497 pixel=(unsigned char) (((*p) & (1 << (7-bit))) == 0 ? 0x00 : 0x01);
2499 pixel=(unsigned char) (((*p) & (1 << (7-bit))) != 0 ? 0x00 : 0x01);
2500 SetPixelIndex(image,(Quantum) (pixel == 0 ? 0 : 1),q);
2501 SetPixelGray(image,(Quantum) (pixel == 0 ? 0 : QuantumRange),q);
2502 SetPixelAlpha(image,((*p) & (1UL << (unsigned char) (6-bit))) == 0 ?
2503 TransparentAlpha : OpaqueAlpha,q);
2504 q+=GetPixelChannels(image);
2510 register unsigned char
2513 range=GetQuantumRange(quantum_info->depth);
2514 for (x=0; x < (ssize_t) number_pixels; x++)
2516 pixel=(unsigned char) ((*p >> 4) & 0xf);
2517 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2518 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2519 GetPixelIndex(image,q),q);
2520 pixel=(unsigned char) ((*p) & 0xf);
2521 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
2523 q+=GetPixelChannels(image);
2532 for (x=0; x < (ssize_t) number_pixels; x++)
2534 p=PushCharPixel(p,&pixel);
2535 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2536 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2537 GetPixelIndex(image,q),q);
2538 p=PushCharPixel(p,&pixel);
2539 SetPixelAlpha(image,ScaleCharToQuantum(pixel),q);
2540 p+=quantum_info->pad;
2541 q+=GetPixelChannels(image);
2550 if (quantum_info->format == FloatingPointQuantumFormat)
2552 for (x=0; x < (ssize_t) number_pixels; x++)
2554 p=PushShortPixel(quantum_info->endian,p,&pixel);
2555 SetPixelIndex(image,PushColormapIndex(image,ClampToQuantum(
2556 (double) QuantumRange*HalfToSinglePrecision(pixel)),
2557 &range_exception),q);
2558 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2559 GetPixelIndex(image,q),q);
2560 p=PushShortPixel(quantum_info->endian,p,&pixel);
2561 SetPixelAlpha(image,ClampToQuantum(QuantumRange*
2562 HalfToSinglePrecision(pixel)),q);
2563 p+=quantum_info->pad;
2564 q+=GetPixelChannels(image);
2568 for (x=0; x < (ssize_t) number_pixels; x++)
2570 p=PushShortPixel(quantum_info->endian,p,&pixel);
2571 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2572 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2573 GetPixelIndex(image,q),q);
2574 p=PushShortPixel(quantum_info->endian,p,&pixel);
2575 SetPixelAlpha(image,ScaleShortToQuantum(pixel),q);
2576 p+=quantum_info->pad;
2577 q+=GetPixelChannels(image);
2586 if (quantum_info->format == FloatingPointQuantumFormat)
2591 for (x=0; x < (ssize_t) number_pixels; x++)
2593 p=PushFloatPixel(quantum_info,p,&pixel);
2594 SetPixelIndex(image,PushColormapIndex(image,
2595 ClampToQuantum(pixel),&range_exception),q);
2596 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2597 GetPixelIndex(image,q),q);
2598 p=PushFloatPixel(quantum_info,p,&pixel);
2599 SetPixelAlpha(image,ClampToQuantum(pixel),q);
2600 p+=quantum_info->pad;
2601 q+=GetPixelChannels(image);
2605 for (x=0; x < (ssize_t) number_pixels; x++)
2607 p=PushLongPixel(quantum_info->endian,p,&pixel);
2608 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2609 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2610 GetPixelIndex(image,q),q);
2611 p=PushLongPixel(quantum_info->endian,p,&pixel);
2612 SetPixelAlpha(image,ScaleLongToQuantum(pixel),q);
2613 p+=quantum_info->pad;
2614 q+=GetPixelChannels(image);
2620 if (quantum_info->format == FloatingPointQuantumFormat)
2625 for (x=0; x < (ssize_t) number_pixels; x++)
2627 p=PushDoublePixel(quantum_info,p,&pixel);
2628 SetPixelIndex(image,PushColormapIndex(image,ClampToQuantum(pixel),
2629 &range_exception),q);
2630 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2631 GetPixelIndex(image,q),q);
2632 p=PushDoublePixel(quantum_info,p,&pixel);
2633 SetPixelAlpha(image,ClampToQuantum(pixel),q);
2634 p+=quantum_info->pad;
2635 q+=GetPixelChannels(image);
2642 range=GetQuantumRange(quantum_info->depth);
2643 for (x=0; x < (ssize_t) number_pixels; x++)
2645 p=PushQuantumPixel(quantum_info,p,&pixel);
2646 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2647 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2648 GetPixelIndex(image,q),q);
2649 p=PushQuantumPixel(quantum_info,p,&pixel);
2650 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
2651 p+=quantum_info->pad;
2652 q+=GetPixelChannels(image);
2657 if (range_exception != MagickFalse)
2658 (void) ThrowMagickException(exception,GetMagickModule(),CorruptImageError,
2659 "InvalidColormapIndex","`%s'",image->filename);
2662 static void ImportOpacityQuantum(const Image *image,QuantumInfo *quantum_info,
2663 const MagickSizeType number_pixels,const unsigned char *restrict p,
2664 Quantum *restrict q,ExceptionInfo *exception)
2675 assert(image != (Image *) NULL);
2676 assert(image->signature == MagickSignature);
2677 switch (quantum_info->depth)
2684 for (x=0; x < (ssize_t) number_pixels; x++)
2686 p=PushCharPixel(p,&pixel);
2687 SetPixelOpacity(image,ScaleCharToQuantum(pixel),q);
2688 p+=quantum_info->pad;
2689 q+=GetPixelChannels(image);
2698 if (quantum_info->format == FloatingPointQuantumFormat)
2700 for (x=0; x < (ssize_t) number_pixels; x++)
2702 p=PushShortPixel(quantum_info->endian,p,&pixel);
2703 SetPixelOpacity(image,ClampToQuantum(QuantumRange*
2704 HalfToSinglePrecision(pixel)),q);
2705 p+=quantum_info->pad;
2706 q+=GetPixelChannels(image);
2710 for (x=0; x < (ssize_t) number_pixels; x++)
2712 p=PushShortPixel(quantum_info->endian,p,&pixel);
2713 SetPixelOpacity(image,ScaleShortToQuantum(pixel),q);
2714 p+=quantum_info->pad;
2715 q+=GetPixelChannels(image);
2724 if (quantum_info->format == FloatingPointQuantumFormat)
2729 for (x=0; x < (ssize_t) number_pixels; x++)
2731 p=PushFloatPixel(quantum_info,p,&pixel);
2732 SetPixelOpacity(image,ClampToQuantum(pixel),q);
2733 p+=quantum_info->pad;
2734 q+=GetPixelChannels(image);
2738 for (x=0; x < (ssize_t) number_pixels; x++)
2740 p=PushLongPixel(quantum_info->endian,p,&pixel);
2741 SetPixelOpacity(image,ScaleLongToQuantum(pixel),q);
2742 p+=quantum_info->pad;
2743 q+=GetPixelChannels(image);
2749 if (quantum_info->format == FloatingPointQuantumFormat)
2754 for (x=0; x < (ssize_t) number_pixels; x++)
2756 p=PushDoublePixel(quantum_info,p,&pixel);
2757 SetPixelOpacity(image,ClampToQuantum(pixel),q);
2758 p+=quantum_info->pad;
2759 q+=GetPixelChannels(image);
2766 range=GetQuantumRange(quantum_info->depth);
2767 for (x=0; x < (ssize_t) number_pixels; x++)
2769 p=PushQuantumPixel(quantum_info,p,&pixel);
2770 SetPixelOpacity(image,ScaleAnyToQuantum(pixel,range),q);
2771 p+=quantum_info->pad;
2772 q+=GetPixelChannels(image);
2779 static void ImportRedQuantum(const Image *image,QuantumInfo *quantum_info,
2780 const MagickSizeType number_pixels,const unsigned char *restrict p,
2781 Quantum *restrict q,ExceptionInfo *exception)
2792 assert(image != (Image *) NULL);
2793 assert(image->signature == MagickSignature);
2794 switch (quantum_info->depth)
2801 for (x=0; x < (ssize_t) number_pixels; x++)
2803 p=PushCharPixel(p,&pixel);
2804 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
2805 p+=quantum_info->pad;
2806 q+=GetPixelChannels(image);
2815 if (quantum_info->format == FloatingPointQuantumFormat)
2817 for (x=0; x < (ssize_t) number_pixels; x++)
2819 p=PushShortPixel(quantum_info->endian,p,&pixel);
2820 SetPixelRed(image,ClampToQuantum(QuantumRange*
2821 HalfToSinglePrecision(pixel)),q);
2822 p+=quantum_info->pad;
2823 q+=GetPixelChannels(image);
2827 for (x=0; x < (ssize_t) number_pixels; x++)
2829 p=PushShortPixel(quantum_info->endian,p,&pixel);
2830 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
2831 p+=quantum_info->pad;
2832 q+=GetPixelChannels(image);
2841 if (quantum_info->format == FloatingPointQuantumFormat)
2846 for (x=0; x < (ssize_t) number_pixels; x++)
2848 p=PushFloatPixel(quantum_info,p,&pixel);
2849 SetPixelRed(image,ClampToQuantum(pixel),q);
2850 p+=quantum_info->pad;
2851 q+=GetPixelChannels(image);
2855 for (x=0; x < (ssize_t) number_pixels; x++)
2857 p=PushLongPixel(quantum_info->endian,p,&pixel);
2858 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
2859 p+=quantum_info->pad;
2860 q+=GetPixelChannels(image);
2866 if (quantum_info->format == FloatingPointQuantumFormat)
2871 for (x=0; x < (ssize_t) number_pixels; x++)
2873 p=PushDoublePixel(quantum_info,p,&pixel);
2874 SetPixelRed(image,ClampToQuantum(pixel),q);
2875 p+=quantum_info->pad;
2876 q+=GetPixelChannels(image);
2883 range=GetQuantumRange(quantum_info->depth);
2884 for (x=0; x < (ssize_t) number_pixels; x++)
2886 p=PushQuantumPixel(quantum_info,p,&pixel);
2887 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
2888 p+=quantum_info->pad;
2889 q+=GetPixelChannels(image);
2896 static void ImportRGBQuantum(const Image *image,QuantumInfo *quantum_info,
2897 const MagickSizeType number_pixels,const unsigned char *restrict p,
2898 Quantum *restrict q,ExceptionInfo *exception)
2912 assert(image != (Image *) NULL);
2913 assert(image->signature == MagickSignature);
2914 switch (quantum_info->depth)
2921 for (x=0; x < (ssize_t) number_pixels; x++)
2923 p=PushCharPixel(p,&pixel);
2924 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
2925 p=PushCharPixel(p,&pixel);
2926 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
2927 p=PushCharPixel(p,&pixel);
2928 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
2929 SetPixelAlpha(image,OpaqueAlpha,q);
2930 p+=quantum_info->pad;
2931 q+=GetPixelChannels(image);
2937 range=GetQuantumRange(quantum_info->depth);
2938 if (quantum_info->pack == MagickFalse)
2940 for (x=0; x < (ssize_t) number_pixels; x++)
2942 p=PushLongPixel(quantum_info->endian,p,&pixel);
2943 SetPixelRed(image,ScaleAnyToQuantum((pixel >> 22) & 0x3ff,range),q);
2944 SetPixelGreen(image,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,range),
2946 SetPixelBlue(image,ScaleAnyToQuantum((pixel >> 2) & 0x3ff,range),q);
2947 p+=quantum_info->pad;
2948 q+=GetPixelChannels(image);
2952 if (quantum_info->quantum == 32U)
2954 for (x=0; x < (ssize_t) number_pixels; x++)
2956 p=PushQuantumLongPixel(quantum_info,p,&pixel);
2957 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
2958 p=PushQuantumLongPixel(quantum_info,p,&pixel);
2959 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
2960 p=PushQuantumLongPixel(quantum_info,p,&pixel);
2961 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
2962 q+=GetPixelChannels(image);
2966 for (x=0; x < (ssize_t) number_pixels; x++)
2968 p=PushQuantumPixel(quantum_info,p,&pixel);
2969 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
2970 p=PushQuantumPixel(quantum_info,p,&pixel);
2971 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
2972 p=PushQuantumPixel(quantum_info,p,&pixel);
2973 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
2974 q+=GetPixelChannels(image);
2980 range=GetQuantumRange(quantum_info->depth);
2981 if (quantum_info->pack == MagickFalse)
2986 for (x=0; x < (ssize_t) (3*number_pixels-1); x+=2)
2988 p=PushShortPixel(quantum_info->endian,p,&pixel);
2994 SetPixelRed(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3000 SetPixelGreen(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3006 SetPixelBlue(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3008 q+=GetPixelChannels(image);
3012 p=PushShortPixel(quantum_info->endian,p,&pixel);
3018 SetPixelRed(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3024 SetPixelGreen(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3030 SetPixelBlue(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3032 q+=GetPixelChannels(image);
3036 p+=quantum_info->pad;
3038 for (bit=0; bit < (ssize_t) (3*number_pixels % 2); bit++)
3040 p=PushShortPixel(quantum_info->endian,p,&pixel);
3041 switch ((x+bit) % 3)
3046 SetPixelRed(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3052 SetPixelGreen(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3058 SetPixelBlue(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3060 q+=GetPixelChannels(image);
3064 p+=quantum_info->pad;
3070 if (quantum_info->quantum == 32U)
3072 for (x=0; x < (ssize_t) number_pixels; x++)
3074 p=PushQuantumLongPixel(quantum_info,p,&pixel);
3075 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
3076 p=PushQuantumLongPixel(quantum_info,p,&pixel);
3077 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
3078 p=PushQuantumLongPixel(quantum_info,p,&pixel);
3079 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
3080 q+=GetPixelChannels(image);
3084 for (x=0; x < (ssize_t) number_pixels; x++)
3086 p=PushQuantumPixel(quantum_info,p,&pixel);
3087 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
3088 p=PushQuantumPixel(quantum_info,p,&pixel);
3089 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
3090 p=PushQuantumPixel(quantum_info,p,&pixel);
3091 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
3092 q+=GetPixelChannels(image);
3101 if (quantum_info->format == FloatingPointQuantumFormat)
3103 for (x=0; x < (ssize_t) number_pixels; x++)
3105 p=PushShortPixel(quantum_info->endian,p,&pixel);
3106 SetPixelRed(image,ClampToQuantum(QuantumRange*
3107 HalfToSinglePrecision(pixel)),q);
3108 p=PushShortPixel(quantum_info->endian,p,&pixel);
3109 SetPixelGreen(image,ClampToQuantum(QuantumRange*
3110 HalfToSinglePrecision(pixel)),q);
3111 p=PushShortPixel(quantum_info->endian,p,&pixel);
3112 SetPixelBlue(image,ClampToQuantum(QuantumRange*
3113 HalfToSinglePrecision(pixel)),q);
3114 p+=quantum_info->pad;
3115 q+=GetPixelChannels(image);
3119 for (x=0; x < (ssize_t) number_pixels; x++)
3121 p=PushShortPixel(quantum_info->endian,p,&pixel);
3122 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
3123 p=PushShortPixel(quantum_info->endian,p,&pixel);
3124 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
3125 p=PushShortPixel(quantum_info->endian,p,&pixel);
3126 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
3127 p+=quantum_info->pad;
3128 q+=GetPixelChannels(image);
3137 if (quantum_info->format == FloatingPointQuantumFormat)
3142 for (x=0; x < (ssize_t) number_pixels; x++)
3144 p=PushFloatPixel(quantum_info,p,&pixel);
3145 SetPixelRed(image,ClampToQuantum(pixel),q);
3146 p=PushFloatPixel(quantum_info,p,&pixel);
3147 SetPixelGreen(image,ClampToQuantum(pixel),q);
3148 p=PushFloatPixel(quantum_info,p,&pixel);
3149 SetPixelBlue(image,ClampToQuantum(pixel),q);
3150 p+=quantum_info->pad;
3151 q+=GetPixelChannels(image);
3155 for (x=0; x < (ssize_t) number_pixels; x++)
3157 p=PushLongPixel(quantum_info->endian,p,&pixel);
3158 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
3159 p=PushLongPixel(quantum_info->endian,p,&pixel);
3160 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
3161 p=PushLongPixel(quantum_info->endian,p,&pixel);
3162 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
3163 p+=quantum_info->pad;
3164 q+=GetPixelChannels(image);
3170 if (quantum_info->format == FloatingPointQuantumFormat)
3175 for (x=0; x < (ssize_t) number_pixels; x++)
3177 p=PushDoublePixel(quantum_info,p,&pixel);
3178 SetPixelRed(image,ClampToQuantum(pixel),q);
3179 p=PushDoublePixel(quantum_info,p,&pixel);
3180 SetPixelGreen(image,ClampToQuantum(pixel),q);
3181 p=PushDoublePixel(quantum_info,p,&pixel);
3182 SetPixelBlue(image,ClampToQuantum(pixel),q);
3183 p+=quantum_info->pad;
3184 q+=GetPixelChannels(image);
3191 range=GetQuantumRange(quantum_info->depth);
3192 for (x=0; x < (ssize_t) number_pixels; x++)
3194 p=PushQuantumPixel(quantum_info,p,&pixel);
3195 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
3196 p=PushQuantumPixel(quantum_info,p,&pixel);
3197 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
3198 p=PushQuantumPixel(quantum_info,p,&pixel);
3199 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
3200 q+=GetPixelChannels(image);
3207 static void ImportRGBAQuantum(const Image *image,QuantumInfo *quantum_info,
3208 const MagickSizeType number_pixels,const unsigned char *restrict p,
3209 Quantum *restrict q,ExceptionInfo *exception)
3220 assert(image != (Image *) NULL);
3221 assert(image->signature == MagickSignature);
3222 switch (quantum_info->depth)
3229 for (x=0; x < (ssize_t) number_pixels; x++)
3231 p=PushCharPixel(p,&pixel);
3232 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
3233 p=PushCharPixel(p,&pixel);
3234 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
3235 p=PushCharPixel(p,&pixel);
3236 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
3237 p=PushCharPixel(p,&pixel);
3238 SetPixelAlpha(image,ScaleCharToQuantum(pixel),q);
3239 p+=quantum_info->pad;
3240 q+=GetPixelChannels(image);
3247 if (quantum_info->pack == MagickFalse)
3260 for (x=0; x < (ssize_t) number_pixels; x++)
3262 for (i=0; i < 4; i++)
3268 p=PushLongPixel(quantum_info->endian,p,&pixel);
3269 quantum=(size_t) (ScaleShortToQuantum((unsigned short)
3270 (((pixel >> 22) & 0x3ff) << 6)));
3275 quantum=(size_t) (ScaleShortToQuantum((unsigned short)
3276 (((pixel >> 12) & 0x3ff) << 6)));
3281 quantum=(size_t) (ScaleShortToQuantum((unsigned short)
3282 (((pixel >> 2) & 0x3ff) << 6)));
3288 case 0: SetPixelRed(image,(Quantum) quantum,q); break;
3289 case 1: SetPixelGreen(image,(Quantum) quantum,q); break;
3290 case 2: SetPixelBlue(image,(Quantum) quantum,q); break;
3291 case 3: SetPixelAlpha(image,(Quantum) quantum,q); break;
3295 p+=quantum_info->pad;
3296 q+=GetPixelChannels(image);
3300 for (x=0; x < (ssize_t) number_pixels; x++)
3302 p=PushQuantumPixel(quantum_info,p,&pixel);
3303 SetPixelRed(image,ScaleShortToQuantum((unsigned short) (pixel << 6)),q);
3304 p=PushQuantumPixel(quantum_info,p,&pixel);
3305 SetPixelGreen(image,ScaleShortToQuantum((unsigned short) (pixel << 6)),
3307 p=PushQuantumPixel(quantum_info,p,&pixel);
3308 SetPixelBlue(image,ScaleShortToQuantum((unsigned short) (pixel << 6)),
3310 p=PushQuantumPixel(quantum_info,p,&pixel);
3311 SetPixelAlpha(image,ScaleShortToQuantum((unsigned short) (pixel << 6)),
3313 q+=GetPixelChannels(image);
3322 if (quantum_info->format == FloatingPointQuantumFormat)
3324 for (x=0; x < (ssize_t) number_pixels; x++)
3326 p=PushShortPixel(quantum_info->endian,p,&pixel);
3327 SetPixelRed(image,ClampToQuantum(QuantumRange*
3328 HalfToSinglePrecision(pixel)),q);
3329 p=PushShortPixel(quantum_info->endian,p,&pixel);
3330 SetPixelGreen(image,ClampToQuantum(QuantumRange*
3331 HalfToSinglePrecision(pixel)),q);
3332 p=PushShortPixel(quantum_info->endian,p,&pixel);
3333 SetPixelBlue(image,ClampToQuantum(QuantumRange*
3334 HalfToSinglePrecision(pixel)),q);
3335 p=PushShortPixel(quantum_info->endian,p,&pixel);
3336 SetPixelAlpha(image,ClampToQuantum(QuantumRange*
3337 HalfToSinglePrecision(pixel)),q);
3338 p+=quantum_info->pad;
3339 q+=GetPixelChannels(image);
3343 for (x=0; x < (ssize_t) number_pixels; x++)
3345 p=PushShortPixel(quantum_info->endian,p,&pixel);
3346 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
3347 p=PushShortPixel(quantum_info->endian,p,&pixel);
3348 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
3349 p=PushShortPixel(quantum_info->endian,p,&pixel);
3350 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
3351 p=PushShortPixel(quantum_info->endian,p,&pixel);
3352 SetPixelAlpha(image,ScaleShortToQuantum(pixel),q);
3353 p+=quantum_info->pad;
3354 q+=GetPixelChannels(image);
3363 if (quantum_info->format == FloatingPointQuantumFormat)
3368 for (x=0; x < (ssize_t) number_pixels; x++)
3370 p=PushFloatPixel(quantum_info,p,&pixel);
3371 SetPixelRed(image,ClampToQuantum(pixel),q);
3372 p=PushFloatPixel(quantum_info,p,&pixel);
3373 SetPixelGreen(image,ClampToQuantum(pixel),q);
3374 p=PushFloatPixel(quantum_info,p,&pixel);
3375 SetPixelBlue(image,ClampToQuantum(pixel),q);
3376 p=PushFloatPixel(quantum_info,p,&pixel);
3377 SetPixelAlpha(image,ClampToQuantum(pixel),q);
3378 p+=quantum_info->pad;
3379 q+=GetPixelChannels(image);
3383 for (x=0; x < (ssize_t) number_pixels; x++)
3385 p=PushLongPixel(quantum_info->endian,p,&pixel);
3386 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
3387 p=PushLongPixel(quantum_info->endian,p,&pixel);
3388 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
3389 p=PushLongPixel(quantum_info->endian,p,&pixel);
3390 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
3391 p=PushLongPixel(quantum_info->endian,p,&pixel);
3392 SetPixelAlpha(image,ScaleLongToQuantum(pixel),q);
3393 p+=quantum_info->pad;
3394 q+=GetPixelChannels(image);
3400 if (quantum_info->format == FloatingPointQuantumFormat)
3405 for (x=0; x < (ssize_t) number_pixels; x++)
3407 p=PushDoublePixel(quantum_info,p,&pixel);
3408 SetPixelRed(image,ClampToQuantum(pixel),q);
3409 p=PushDoublePixel(quantum_info,p,&pixel);
3410 SetPixelGreen(image,ClampToQuantum(pixel),q);
3411 p=PushDoublePixel(quantum_info,p,&pixel);
3412 SetPixelBlue(image,ClampToQuantum(pixel),q);
3413 p=PushDoublePixel(quantum_info,p,&pixel);
3414 SetPixelAlpha(image,ClampToQuantum(pixel),q);
3415 p+=quantum_info->pad;
3416 q+=GetPixelChannels(image);
3423 range=GetQuantumRange(quantum_info->depth);
3424 for (x=0; x < (ssize_t) number_pixels; x++)
3426 p=PushQuantumPixel(quantum_info,p,&pixel);
3427 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
3428 p=PushQuantumPixel(quantum_info,p,&pixel);
3429 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
3430 p=PushQuantumPixel(quantum_info,p,&pixel);
3431 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
3432 p=PushQuantumPixel(quantum_info,p,&pixel);
3433 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
3434 q+=GetPixelChannels(image);
3441 MagickExport size_t ImportQuantumPixels(const Image *image,
3442 CacheView *image_view,QuantumInfo *quantum_info,
3443 const QuantumType quantum_type,const unsigned char *restrict pixels,
3444 ExceptionInfo *exception)
3449 register const unsigned char
3461 assert(image != (Image *) NULL);
3462 assert(image->signature == MagickSignature);
3463 if (image->debug != MagickFalse)
3464 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
3465 assert(quantum_info != (QuantumInfo *) NULL);
3466 assert(quantum_info->signature == MagickSignature);
3467 if (pixels == (const unsigned char *) NULL)
3468 pixels=GetQuantumPixels(quantum_info);
3471 if (image_view == (CacheView *) NULL)
3473 number_pixels=GetImageExtent(image);
3474 q=GetAuthenticPixelQueue(image);
3478 number_pixels=GetCacheViewExtent(image_view);
3479 q=GetCacheViewAuthenticPixelQueue(image_view);
3481 ResetQuantumState(quantum_info);
3482 extent=GetQuantumExtent(image,quantum_info,quantum_type);
3483 switch (quantum_type)
3487 ImportAlphaQuantum(image,quantum_info,number_pixels,p,q,exception);
3492 ImportBGRQuantum(image,quantum_info,number_pixels,p,q,exception);
3498 ImportBGRAQuantum(image,quantum_info,number_pixels,p,q,exception);
3503 ImportBlackQuantum(image,quantum_info,number_pixels,p,q,exception);
3509 ImportBlueQuantum(image,quantum_info,number_pixels,p,q,exception);
3514 ImportCMYKQuantum(image,quantum_info,number_pixels,p,q,exception);
3520 ImportCMYKAQuantum(image,quantum_info,number_pixels,p,q,exception);
3525 ImportCbYCrYQuantum(image,quantum_info,number_pixels,p,q,exception);
3530 ImportGrayQuantum(image,quantum_info,number_pixels,p,q,exception);
3533 case GrayAlphaQuantum:
3535 ImportGrayAlphaQuantum(image,quantum_info,number_pixels,p,q,exception);
3539 case MagentaQuantum:
3541 ImportGreenQuantum(image,quantum_info,number_pixels,p,q,exception);
3546 ImportIndexQuantum(image,quantum_info,number_pixels,p,q,exception);
3549 case IndexAlphaQuantum:
3551 ImportIndexAlphaQuantum(image,quantum_info,number_pixels,p,q,exception);
3554 case OpacityQuantum:
3556 ImportOpacityQuantum(image,quantum_info,number_pixels,p,q,exception);
3562 ImportRedQuantum(image,quantum_info,number_pixels,p,q,exception);
3568 ImportRGBQuantum(image,quantum_info,number_pixels,p,q,exception);
3575 ImportRGBAQuantum(image,quantum_info,number_pixels,p,q,exception);
3581 if ((quantum_type == CbYCrQuantum) || (quantum_type == CbYCrAQuantum))
3589 q=GetAuthenticPixelQueue(image);
3590 if (image_view != (CacheView *) NULL)
3591 q=GetCacheViewAuthenticPixelQueue(image_view);
3592 for (x=0; x < (ssize_t) number_pixels; x++)
3594 quantum=GetPixelRed(image,q);
3595 SetPixelRed(image,GetPixelGreen(image,q),q);
3596 SetPixelGreen(image,quantum,q);
3597 q+=GetPixelChannels(image);
3600 if ((quantum_type == RGBOQuantum) || (quantum_type == CMYKOQuantum))
3605 q=GetAuthenticPixelQueue(image);
3606 if (image_view != (CacheView *) NULL)
3607 q=GetCacheViewAuthenticPixelQueue(image_view);
3608 for (x=0; x < (ssize_t) number_pixels; x++)
3610 SetPixelAlpha(image,GetPixelAlpha(image,q),q);
3611 q+=GetPixelChannels(image);
3614 if (quantum_info->alpha_type == DisassociatedQuantumAlpha)
3626 q=GetAuthenticPixelQueue(image);
3627 if (image_view != (CacheView *) NULL)
3628 q=GetCacheViewAuthenticPixelQueue(image_view);
3629 for (x=0; x < (ssize_t) number_pixels; x++)
3634 if (GetPixelReadMask(image,q) == 0)
3636 q+=GetPixelChannels(image);
3639 Sa=QuantumScale*GetPixelAlpha(image,q);
3640 gamma=PerceptibleReciprocal(Sa);
3641 for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
3643 PixelChannel channel=GetPixelChannelChannel(image,i);
3644 PixelTrait traits=GetPixelChannelTraits(image,channel);
3645 if ((traits & UpdatePixelTrait) == 0)
3647 q[i]=ClampToQuantum(gamma*q[i]);
3649 q+=GetPixelChannels(image);