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-2015 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 ImportBGROQuantum(const Image *image,QuantumInfo *quantum_info,
917 const MagickSizeType number_pixels,const unsigned char *restrict p,
918 Quantum *restrict q,ExceptionInfo *exception)
929 assert(image != (Image *) NULL);
930 assert(image->signature == MagickSignature);
931 switch (quantum_info->depth)
938 for (x=0; x < (ssize_t) number_pixels; x++)
940 p=PushCharPixel(p,&pixel);
941 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
942 p=PushCharPixel(p,&pixel);
943 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
944 p=PushCharPixel(p,&pixel);
945 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
946 p=PushCharPixel(p,&pixel);
947 SetPixelOpacity(image,ScaleCharToQuantum(pixel),q);
948 p+=quantum_info->pad;
949 q+=GetPixelChannels(image);
956 if (quantum_info->pack == MagickFalse)
969 for (x=0; x < (ssize_t) number_pixels; x++)
971 for (i=0; i < 4; i++)
977 p=PushLongPixel(quantum_info->endian,p,&pixel);
978 quantum=(size_t) (ScaleShortToQuantum((unsigned short)
979 (((pixel >> 22) & 0x3ff) << 6)));
984 quantum=(size_t) (ScaleShortToQuantum((unsigned short)
985 (((pixel >> 12) & 0x3ff) << 6)));
990 quantum=(size_t) (ScaleShortToQuantum((unsigned short)
991 (((pixel >> 2) & 0x3ff) << 6)));
997 case 0: SetPixelRed(image,(Quantum) quantum,q); break;
998 case 1: SetPixelGreen(image,(Quantum) quantum,q); break;
999 case 2: SetPixelBlue(image,(Quantum) quantum,q); break;
1000 case 3: SetPixelOpacity(image,(Quantum) quantum,q); break;
1004 p+=quantum_info->pad;
1005 q+=GetPixelChannels(image);
1009 for (x=0; x < (ssize_t) number_pixels; x++)
1011 p=PushQuantumPixel(quantum_info,p,&pixel);
1012 SetPixelRed(image,ScaleShortToQuantum((unsigned short) (pixel << 6)),q);
1013 p=PushQuantumPixel(quantum_info,p,&pixel);
1014 SetPixelGreen(image,ScaleShortToQuantum((unsigned short) (pixel << 6)),
1016 p=PushQuantumPixel(quantum_info,p,&pixel);
1017 SetPixelBlue(image,ScaleShortToQuantum((unsigned short) (pixel << 6)),
1019 p=PushQuantumPixel(quantum_info,p,&pixel);
1020 SetPixelOpacity(image,ScaleShortToQuantum((unsigned short) (pixel << 6)),
1022 q+=GetPixelChannels(image);
1031 if (quantum_info->format == FloatingPointQuantumFormat)
1033 for (x=0; x < (ssize_t) number_pixels; x++)
1035 p=PushShortPixel(quantum_info->endian,p,&pixel);
1036 SetPixelRed(image,ClampToQuantum(QuantumRange*
1037 HalfToSinglePrecision(pixel)),q);
1038 p=PushShortPixel(quantum_info->endian,p,&pixel);
1039 SetPixelGreen(image,ClampToQuantum(QuantumRange*
1040 HalfToSinglePrecision(pixel)),q);
1041 p=PushShortPixel(quantum_info->endian,p,&pixel);
1042 SetPixelBlue(image,ClampToQuantum(QuantumRange*
1043 HalfToSinglePrecision(pixel)),q);
1044 p=PushShortPixel(quantum_info->endian,p,&pixel);
1045 SetPixelOpacity(image,ClampToQuantum(QuantumRange*
1046 HalfToSinglePrecision(pixel)),q);
1047 p+=quantum_info->pad;
1048 q+=GetPixelChannels(image);
1052 for (x=0; x < (ssize_t) number_pixels; x++)
1054 p=PushShortPixel(quantum_info->endian,p,&pixel);
1055 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
1056 p=PushShortPixel(quantum_info->endian,p,&pixel);
1057 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
1058 p=PushShortPixel(quantum_info->endian,p,&pixel);
1059 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
1060 p=PushShortPixel(quantum_info->endian,p,&pixel);
1061 SetPixelOpacity(image,ScaleShortToQuantum(pixel),q);
1062 p+=quantum_info->pad;
1063 q+=GetPixelChannels(image);
1072 if (quantum_info->format == FloatingPointQuantumFormat)
1077 for (x=0; x < (ssize_t) number_pixels; x++)
1079 p=PushFloatPixel(quantum_info,p,&pixel);
1080 SetPixelRed(image,ClampToQuantum(pixel),q);
1081 p=PushFloatPixel(quantum_info,p,&pixel);
1082 SetPixelGreen(image,ClampToQuantum(pixel),q);
1083 p=PushFloatPixel(quantum_info,p,&pixel);
1084 SetPixelBlue(image,ClampToQuantum(pixel),q);
1085 p=PushFloatPixel(quantum_info,p,&pixel);
1086 SetPixelOpacity(image,ClampToQuantum(pixel),q);
1087 p+=quantum_info->pad;
1088 q+=GetPixelChannels(image);
1092 for (x=0; x < (ssize_t) number_pixels; x++)
1094 p=PushLongPixel(quantum_info->endian,p,&pixel);
1095 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
1096 p=PushLongPixel(quantum_info->endian,p,&pixel);
1097 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
1098 p=PushLongPixel(quantum_info->endian,p,&pixel);
1099 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
1100 p=PushLongPixel(quantum_info->endian,p,&pixel);
1101 SetPixelOpacity(image,ScaleLongToQuantum(pixel),q);
1102 p+=quantum_info->pad;
1103 q+=GetPixelChannels(image);
1109 if (quantum_info->format == FloatingPointQuantumFormat)
1114 for (x=0; x < (ssize_t) number_pixels; x++)
1116 p=PushDoublePixel(quantum_info,p,&pixel);
1117 SetPixelRed(image,ClampToQuantum(pixel),q);
1118 p=PushDoublePixel(quantum_info,p,&pixel);
1119 SetPixelGreen(image,ClampToQuantum(pixel),q);
1120 p=PushDoublePixel(quantum_info,p,&pixel);
1121 SetPixelBlue(image,ClampToQuantum(pixel),q);
1122 p=PushDoublePixel(quantum_info,p,&pixel);
1123 SetPixelOpacity(image,ClampToQuantum(pixel),q);
1124 p+=quantum_info->pad;
1125 q+=GetPixelChannels(image);
1132 range=GetQuantumRange(quantum_info->depth);
1133 for (x=0; x < (ssize_t) number_pixels; x++)
1135 p=PushQuantumPixel(quantum_info,p,&pixel);
1136 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
1137 p=PushQuantumPixel(quantum_info,p,&pixel);
1138 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
1139 p=PushQuantumPixel(quantum_info,p,&pixel);
1140 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
1141 p=PushQuantumPixel(quantum_info,p,&pixel);
1142 SetPixelOpacity(image,ScaleAnyToQuantum(pixel,range),q);
1143 q+=GetPixelChannels(image);
1150 static void ImportBlackQuantum(const Image *image,QuantumInfo *quantum_info,
1151 const MagickSizeType number_pixels,const unsigned char *restrict p,
1152 Quantum *restrict q,ExceptionInfo *exception)
1163 if (image->colorspace != CMYKColorspace)
1165 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1166 "ColorSeparatedImageRequired","`%s'",image->filename);
1169 switch (quantum_info->depth)
1176 for (x=0; x < (ssize_t) number_pixels; x++)
1178 p=PushCharPixel(p,&pixel);
1179 SetPixelBlack(image,ScaleCharToQuantum(pixel),q);
1180 p+=quantum_info->pad;
1181 q+=GetPixelChannels(image);
1190 if (quantum_info->format == FloatingPointQuantumFormat)
1192 for (x=0; x < (ssize_t) number_pixels; x++)
1194 p=PushShortPixel(quantum_info->endian,p,&pixel);
1195 SetPixelBlack(image,ClampToQuantum(QuantumRange*
1196 HalfToSinglePrecision(pixel)),q);
1197 p+=quantum_info->pad;
1198 q+=GetPixelChannels(image);
1202 for (x=0; x < (ssize_t) number_pixels; x++)
1204 p=PushShortPixel(quantum_info->endian,p,&pixel);
1205 SetPixelBlack(image,ScaleShortToQuantum(pixel),q);
1206 p+=quantum_info->pad;
1207 q+=GetPixelChannels(image);
1216 if (quantum_info->format == FloatingPointQuantumFormat)
1221 for (x=0; x < (ssize_t) number_pixels; x++)
1223 p=PushFloatPixel(quantum_info,p,&pixel);
1224 SetPixelBlack(image,ClampToQuantum(pixel),q);
1225 p+=quantum_info->pad;
1226 q+=GetPixelChannels(image);
1230 for (x=0; x < (ssize_t) number_pixels; x++)
1232 p=PushLongPixel(quantum_info->endian,p,&pixel);
1233 SetPixelBlack(image,ScaleLongToQuantum(pixel),q);
1234 p+=quantum_info->pad;
1235 q+=GetPixelChannels(image);
1241 if (quantum_info->format == FloatingPointQuantumFormat)
1246 for (x=0; x < (ssize_t) number_pixels; x++)
1248 p=PushDoublePixel(quantum_info,p,&pixel);
1249 SetPixelBlack(image,ClampToQuantum(pixel),q);
1250 p+=quantum_info->pad;
1251 q+=GetPixelChannels(image);
1258 range=GetQuantumRange(quantum_info->depth);
1259 for (x=0; x < (ssize_t) number_pixels; x++)
1261 p=PushQuantumPixel(quantum_info,p,&pixel);
1262 SetPixelBlack(image,ScaleAnyToQuantum(pixel,range),q);
1263 p+=quantum_info->pad;
1264 q+=GetPixelChannels(image);
1271 static void ImportBlueQuantum(const Image *image,QuantumInfo *quantum_info,
1272 const MagickSizeType number_pixels,const unsigned char *restrict p,
1273 Quantum *restrict q,ExceptionInfo *exception)
1284 assert(image != (Image *) NULL);
1285 assert(image->signature == MagickSignature);
1286 switch (quantum_info->depth)
1293 for (x=0; x < (ssize_t) number_pixels; x++)
1295 p=PushCharPixel(p,&pixel);
1296 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
1297 p+=quantum_info->pad;
1298 q+=GetPixelChannels(image);
1307 if (quantum_info->format == FloatingPointQuantumFormat)
1309 for (x=0; x < (ssize_t) number_pixels; x++)
1311 p=PushShortPixel(quantum_info->endian,p,&pixel);
1312 SetPixelBlue(image,ClampToQuantum(QuantumRange*
1313 HalfToSinglePrecision(pixel)),q);
1314 p+=quantum_info->pad;
1315 q+=GetPixelChannels(image);
1319 for (x=0; x < (ssize_t) number_pixels; x++)
1321 p=PushShortPixel(quantum_info->endian,p,&pixel);
1322 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
1323 p+=quantum_info->pad;
1324 q+=GetPixelChannels(image);
1333 if (quantum_info->format == FloatingPointQuantumFormat)
1338 for (x=0; x < (ssize_t) number_pixels; x++)
1340 p=PushFloatPixel(quantum_info,p,&pixel);
1341 SetPixelBlue(image,ClampToQuantum(pixel),q);
1342 p+=quantum_info->pad;
1343 q+=GetPixelChannels(image);
1347 for (x=0; x < (ssize_t) number_pixels; x++)
1349 p=PushLongPixel(quantum_info->endian,p,&pixel);
1350 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
1351 p+=quantum_info->pad;
1352 q+=GetPixelChannels(image);
1358 if (quantum_info->format == FloatingPointQuantumFormat)
1363 for (x=0; x < (ssize_t) number_pixels; x++)
1365 p=PushDoublePixel(quantum_info,p,&pixel);
1366 SetPixelBlue(image,ClampToQuantum(pixel),q);
1367 p+=quantum_info->pad;
1368 q+=GetPixelChannels(image);
1375 range=GetQuantumRange(quantum_info->depth);
1376 for (x=0; x < (ssize_t) number_pixels; x++)
1378 p=PushQuantumPixel(quantum_info,p,&pixel);
1379 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
1380 p+=quantum_info->pad;
1381 q+=GetPixelChannels(image);
1388 static void ImportCbYCrYQuantum(const Image *image,QuantumInfo *quantum_info,
1389 const MagickSizeType number_pixels,const unsigned char *restrict p,
1390 Quantum *restrict q,ExceptionInfo *exception)
1401 assert(image != (Image *) NULL);
1402 assert(image->signature == MagickSignature);
1403 switch (quantum_info->depth)
1411 if (quantum_info->pack == MagickFalse)
1424 for (x=0; x < (ssize_t) number_pixels; x+=2)
1426 for (i=0; i < 4; i++)
1432 p=PushLongPixel(quantum_info->endian,p,&pixel);
1433 quantum=(size_t) (ScaleShortToQuantum((unsigned short)
1434 (((pixel >> 22) & 0x3ff) << 6)));
1439 quantum=(size_t) (ScaleShortToQuantum((unsigned short)
1440 (((pixel >> 12) & 0x3ff) << 6)));
1445 quantum=(size_t) (ScaleShortToQuantum((unsigned short)
1446 (((pixel >> 2) & 0x3ff) << 6)));
1450 cbcr[i]=(Quantum) (quantum);
1453 p+=quantum_info->pad;
1454 SetPixelRed(image,cbcr[1],q);
1455 SetPixelGreen(image,cbcr[0],q);
1456 SetPixelBlue(image,cbcr[2],q);
1457 q+=GetPixelChannels(image);
1458 SetPixelRed(image,cbcr[3],q);
1459 SetPixelGreen(image,cbcr[0],q);
1460 SetPixelBlue(image,cbcr[2],q);
1461 q+=GetPixelChannels(image);
1468 range=GetQuantumRange(quantum_info->depth);
1469 for (x=0; x < (ssize_t) number_pixels; x++)
1471 p=PushQuantumPixel(quantum_info,p,&pixel);
1472 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
1473 p=PushQuantumPixel(quantum_info,p,&pixel);
1474 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
1475 q+=GetPixelChannels(image);
1482 static void ImportCMYKQuantum(const Image *image,QuantumInfo *quantum_info,
1483 const MagickSizeType number_pixels,const unsigned char *restrict p,
1484 Quantum *restrict q,ExceptionInfo *exception)
1495 if (image->colorspace != CMYKColorspace)
1497 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1498 "ColorSeparatedImageRequired","`%s'",image->filename);
1501 switch (quantum_info->depth)
1508 for (x=0; x < (ssize_t) number_pixels; x++)
1510 p=PushCharPixel(p,&pixel);
1511 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
1512 p=PushCharPixel(p,&pixel);
1513 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
1514 p=PushCharPixel(p,&pixel);
1515 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
1516 p=PushCharPixel(p,&pixel);
1517 SetPixelBlack(image,ScaleCharToQuantum(pixel),q);
1518 p+=quantum_info->pad;
1519 q+=GetPixelChannels(image);
1528 if (quantum_info->format == FloatingPointQuantumFormat)
1530 for (x=0; x < (ssize_t) number_pixels; x++)
1532 p=PushShortPixel(quantum_info->endian,p,&pixel);
1533 SetPixelRed(image,ClampToQuantum(QuantumRange*
1534 HalfToSinglePrecision(pixel)),q);
1535 p=PushShortPixel(quantum_info->endian,p,&pixel);
1536 SetPixelGreen(image,ClampToQuantum(QuantumRange*
1537 HalfToSinglePrecision(pixel)),q);
1538 p=PushShortPixel(quantum_info->endian,p,&pixel);
1539 SetPixelBlue(image,ClampToQuantum(QuantumRange*
1540 HalfToSinglePrecision(pixel)),q);
1541 p=PushShortPixel(quantum_info->endian,p,&pixel);
1542 SetPixelBlack(image,ClampToQuantum(QuantumRange*
1543 HalfToSinglePrecision(pixel)),q);
1544 p+=quantum_info->pad;
1545 q+=GetPixelChannels(image);
1549 for (x=0; x < (ssize_t) number_pixels; x++)
1551 p=PushShortPixel(quantum_info->endian,p,&pixel);
1552 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
1553 p=PushShortPixel(quantum_info->endian,p,&pixel);
1554 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
1555 p=PushShortPixel(quantum_info->endian,p,&pixel);
1556 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
1557 p=PushShortPixel(quantum_info->endian,p,&pixel);
1558 SetPixelBlack(image,ScaleShortToQuantum(pixel),q);
1559 p+=quantum_info->pad;
1560 q+=GetPixelChannels(image);
1569 if (quantum_info->format == FloatingPointQuantumFormat)
1574 for (x=0; x < (ssize_t) number_pixels; x++)
1576 p=PushFloatPixel(quantum_info,p,&pixel);
1577 SetPixelRed(image,ClampToQuantum(pixel),q);
1578 p=PushFloatPixel(quantum_info,p,&pixel);
1579 SetPixelGreen(image,ClampToQuantum(pixel),q);
1580 p=PushFloatPixel(quantum_info,p,&pixel);
1581 SetPixelBlue(image,ClampToQuantum(pixel),q);
1582 p=PushFloatPixel(quantum_info,p,&pixel);
1583 SetPixelBlack(image,ClampToQuantum(pixel),q);
1584 p+=quantum_info->pad;
1585 q+=GetPixelChannels(image);
1589 for (x=0; x < (ssize_t) number_pixels; x++)
1591 p=PushLongPixel(quantum_info->endian,p,&pixel);
1592 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
1593 p=PushLongPixel(quantum_info->endian,p,&pixel);
1594 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
1595 p=PushLongPixel(quantum_info->endian,p,&pixel);
1596 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
1597 p=PushLongPixel(quantum_info->endian,p,&pixel);
1598 SetPixelBlack(image,ScaleLongToQuantum(pixel),q);
1599 p+=quantum_info->pad;
1600 q+=GetPixelChannels(image);
1606 if (quantum_info->format == FloatingPointQuantumFormat)
1611 for (x=0; x < (ssize_t) number_pixels; x++)
1613 p=PushDoublePixel(quantum_info,p,&pixel);
1614 SetPixelRed(image,ClampToQuantum(pixel),q);
1615 p=PushDoublePixel(quantum_info,p,&pixel);
1616 SetPixelGreen(image,ClampToQuantum(pixel),q);
1617 p=PushDoublePixel(quantum_info,p,&pixel);
1618 SetPixelBlue(image,ClampToQuantum(pixel),q);
1619 p=PushDoublePixel(quantum_info,p,&pixel);
1620 SetPixelBlack(image,ClampToQuantum(pixel),q);
1621 p+=quantum_info->pad;
1622 q+=GetPixelChannels(image);
1629 range=GetQuantumRange(quantum_info->depth);
1630 for (x=0; x < (ssize_t) number_pixels; x++)
1632 p=PushQuantumPixel(quantum_info,p,&pixel);
1633 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
1634 p=PushQuantumPixel(quantum_info,p,&pixel);
1635 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
1636 p=PushQuantumPixel(quantum_info,p,&pixel);
1637 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
1638 p=PushQuantumPixel(quantum_info,p,&pixel);
1639 SetPixelBlack(image,ScaleAnyToQuantum(pixel,range),q);
1640 q+=GetPixelChannels(image);
1647 static void ImportCMYKAQuantum(const Image *image,QuantumInfo *quantum_info,
1648 const MagickSizeType number_pixels,const unsigned char *restrict p,
1649 Quantum *restrict q,ExceptionInfo *exception)
1660 if (image->colorspace != CMYKColorspace)
1662 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1663 "ColorSeparatedImageRequired","`%s'",image->filename);
1666 switch (quantum_info->depth)
1673 for (x=0; x < (ssize_t) number_pixels; x++)
1675 p=PushCharPixel(p,&pixel);
1676 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
1677 p=PushCharPixel(p,&pixel);
1678 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
1679 p=PushCharPixel(p,&pixel);
1680 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
1681 p=PushCharPixel(p,&pixel);
1682 SetPixelBlack(image,ScaleCharToQuantum(pixel),q);
1683 p=PushCharPixel(p,&pixel);
1684 SetPixelAlpha(image,ScaleCharToQuantum(pixel),q);
1685 p+=quantum_info->pad;
1686 q+=GetPixelChannels(image);
1695 if (quantum_info->format == FloatingPointQuantumFormat)
1697 for (x=0; x < (ssize_t) number_pixels; x++)
1699 p=PushShortPixel(quantum_info->endian,p,&pixel);
1700 SetPixelRed(image,ClampToQuantum(QuantumRange*
1701 HalfToSinglePrecision(pixel)),q);
1702 p=PushShortPixel(quantum_info->endian,p,&pixel);
1703 SetPixelGreen(image,ClampToQuantum(QuantumRange*
1704 HalfToSinglePrecision(pixel)),q);
1705 p=PushShortPixel(quantum_info->endian,p,&pixel);
1706 SetPixelBlue(image,ClampToQuantum(QuantumRange*
1707 HalfToSinglePrecision(pixel)),q);
1708 p=PushShortPixel(quantum_info->endian,p,&pixel);
1709 SetPixelBlack(image,ClampToQuantum(QuantumRange*
1710 HalfToSinglePrecision(pixel)),q);
1711 p=PushShortPixel(quantum_info->endian,p,&pixel);
1712 SetPixelAlpha(image,ClampToQuantum(QuantumRange*
1713 HalfToSinglePrecision(pixel)),q);
1714 p+=quantum_info->pad;
1715 q+=GetPixelChannels(image);
1719 for (x=0; x < (ssize_t) number_pixels; x++)
1721 p=PushShortPixel(quantum_info->endian,p,&pixel);
1722 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
1723 p=PushShortPixel(quantum_info->endian,p,&pixel);
1724 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
1725 p=PushShortPixel(quantum_info->endian,p,&pixel);
1726 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
1727 p=PushShortPixel(quantum_info->endian,p,&pixel);
1728 SetPixelBlack(image,ScaleShortToQuantum(pixel),q);
1729 p=PushShortPixel(quantum_info->endian,p,&pixel);
1730 SetPixelAlpha(image,ScaleShortToQuantum(pixel),q);
1731 p+=quantum_info->pad;
1732 q+=GetPixelChannels(image);
1741 if (quantum_info->format == FloatingPointQuantumFormat)
1746 for (x=0; x < (ssize_t) number_pixels; x++)
1748 p=PushFloatPixel(quantum_info,p,&pixel);
1749 SetPixelRed(image,ClampToQuantum(pixel),q);
1750 p=PushFloatPixel(quantum_info,p,&pixel);
1751 SetPixelGreen(image,ClampToQuantum(pixel),q);
1752 p=PushFloatPixel(quantum_info,p,&pixel);
1753 SetPixelBlue(image,ClampToQuantum(pixel),q);
1754 p=PushFloatPixel(quantum_info,p,&pixel);
1755 SetPixelBlack(image,ClampToQuantum(pixel),q);
1756 p=PushFloatPixel(quantum_info,p,&pixel);
1757 SetPixelAlpha(image,ClampToQuantum(pixel),q);
1758 p+=quantum_info->pad;
1759 q+=GetPixelChannels(image);
1763 for (x=0; x < (ssize_t) number_pixels; x++)
1765 p=PushLongPixel(quantum_info->endian,p,&pixel);
1766 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
1767 p=PushLongPixel(quantum_info->endian,p,&pixel);
1768 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
1769 p=PushLongPixel(quantum_info->endian,p,&pixel);
1770 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
1771 p=PushLongPixel(quantum_info->endian,p,&pixel);
1772 SetPixelBlack(image,ScaleLongToQuantum(pixel),q);
1773 p=PushLongPixel(quantum_info->endian,p,&pixel);
1774 SetPixelAlpha(image,ScaleLongToQuantum(pixel),q);
1775 p+=quantum_info->pad;
1776 q+=GetPixelChannels(image);
1782 if (quantum_info->format == FloatingPointQuantumFormat)
1787 for (x=0; x < (ssize_t) number_pixels; x++)
1789 p=PushDoublePixel(quantum_info,p,&pixel);
1790 SetPixelRed(image,ClampToQuantum(pixel),q);
1791 p=PushDoublePixel(quantum_info,p,&pixel);
1792 SetPixelGreen(image,ClampToQuantum(pixel),q);
1793 p=PushDoublePixel(quantum_info,p,&pixel);
1794 SetPixelBlue(image,ClampToQuantum(pixel),q);
1795 p=PushDoublePixel(quantum_info,p,&pixel);
1796 SetPixelBlack(image,ClampToQuantum(pixel),q);
1797 p=PushDoublePixel(quantum_info,p,&pixel);
1798 SetPixelAlpha(image,ClampToQuantum(pixel),q);
1799 p=PushDoublePixel(quantum_info,p,&pixel);
1800 p+=quantum_info->pad;
1801 q+=GetPixelChannels(image);
1808 range=GetQuantumRange(quantum_info->depth);
1809 for (x=0; x < (ssize_t) number_pixels; x++)
1811 p=PushQuantumPixel(quantum_info,p,&pixel);
1812 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
1813 p=PushQuantumPixel(quantum_info,p,&pixel);
1814 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
1815 p=PushQuantumPixel(quantum_info,p,&pixel);
1816 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
1817 p=PushQuantumPixel(quantum_info,p,&pixel);
1818 SetPixelBlack(image,ScaleAnyToQuantum(pixel,range),q);
1819 p=PushQuantumPixel(quantum_info,p,&pixel);
1820 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
1821 q+=GetPixelChannels(image);
1828 static void ImportCMYKOQuantum(const Image *image,QuantumInfo *quantum_info,
1829 const MagickSizeType number_pixels,const unsigned char *restrict p,
1830 Quantum *restrict q,ExceptionInfo *exception)
1841 if (image->colorspace != CMYKColorspace)
1843 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1844 "ColorSeparatedImageRequired","`%s'",image->filename);
1847 switch (quantum_info->depth)
1854 for (x=0; x < (ssize_t) number_pixels; x++)
1856 p=PushCharPixel(p,&pixel);
1857 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
1858 p=PushCharPixel(p,&pixel);
1859 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
1860 p=PushCharPixel(p,&pixel);
1861 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
1862 p=PushCharPixel(p,&pixel);
1863 SetPixelBlack(image,ScaleCharToQuantum(pixel),q);
1864 p=PushCharPixel(p,&pixel);
1865 SetPixelOpacity(image,ScaleCharToQuantum(pixel),q);
1866 p+=quantum_info->pad;
1867 q+=GetPixelChannels(image);
1876 if (quantum_info->format == FloatingPointQuantumFormat)
1878 for (x=0; x < (ssize_t) number_pixels; x++)
1880 p=PushShortPixel(quantum_info->endian,p,&pixel);
1881 SetPixelRed(image,ClampToQuantum(QuantumRange*
1882 HalfToSinglePrecision(pixel)),q);
1883 p=PushShortPixel(quantum_info->endian,p,&pixel);
1884 SetPixelGreen(image,ClampToQuantum(QuantumRange*
1885 HalfToSinglePrecision(pixel)),q);
1886 p=PushShortPixel(quantum_info->endian,p,&pixel);
1887 SetPixelBlue(image,ClampToQuantum(QuantumRange*
1888 HalfToSinglePrecision(pixel)),q);
1889 p=PushShortPixel(quantum_info->endian,p,&pixel);
1890 SetPixelBlack(image,ClampToQuantum(QuantumRange*
1891 HalfToSinglePrecision(pixel)),q);
1892 p=PushShortPixel(quantum_info->endian,p,&pixel);
1893 SetPixelOpacity(image,ClampToQuantum(QuantumRange*
1894 HalfToSinglePrecision(pixel)),q);
1895 p+=quantum_info->pad;
1896 q+=GetPixelChannels(image);
1900 for (x=0; x < (ssize_t) number_pixels; x++)
1902 p=PushShortPixel(quantum_info->endian,p,&pixel);
1903 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
1904 p=PushShortPixel(quantum_info->endian,p,&pixel);
1905 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
1906 p=PushShortPixel(quantum_info->endian,p,&pixel);
1907 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
1908 p=PushShortPixel(quantum_info->endian,p,&pixel);
1909 SetPixelBlack(image,ScaleShortToQuantum(pixel),q);
1910 p=PushShortPixel(quantum_info->endian,p,&pixel);
1911 SetPixelOpacity(image,ScaleShortToQuantum(pixel),q);
1912 p+=quantum_info->pad;
1913 q+=GetPixelChannels(image);
1922 if (quantum_info->format == FloatingPointQuantumFormat)
1927 for (x=0; x < (ssize_t) number_pixels; x++)
1929 p=PushFloatPixel(quantum_info,p,&pixel);
1930 SetPixelRed(image,ClampToQuantum(pixel),q);
1931 p=PushFloatPixel(quantum_info,p,&pixel);
1932 SetPixelGreen(image,ClampToQuantum(pixel),q);
1933 p=PushFloatPixel(quantum_info,p,&pixel);
1934 SetPixelBlue(image,ClampToQuantum(pixel),q);
1935 p=PushFloatPixel(quantum_info,p,&pixel);
1936 SetPixelBlack(image,ClampToQuantum(pixel),q);
1937 p=PushFloatPixel(quantum_info,p,&pixel);
1938 SetPixelOpacity(image,ClampToQuantum(pixel),q);
1939 p+=quantum_info->pad;
1940 q+=GetPixelChannels(image);
1944 for (x=0; x < (ssize_t) number_pixels; x++)
1946 p=PushLongPixel(quantum_info->endian,p,&pixel);
1947 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
1948 p=PushLongPixel(quantum_info->endian,p,&pixel);
1949 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
1950 p=PushLongPixel(quantum_info->endian,p,&pixel);
1951 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
1952 p=PushLongPixel(quantum_info->endian,p,&pixel);
1953 SetPixelBlack(image,ScaleLongToQuantum(pixel),q);
1954 p=PushLongPixel(quantum_info->endian,p,&pixel);
1955 SetPixelOpacity(image,ScaleLongToQuantum(pixel),q);
1956 p+=quantum_info->pad;
1957 q+=GetPixelChannels(image);
1963 if (quantum_info->format == FloatingPointQuantumFormat)
1968 for (x=0; x < (ssize_t) number_pixels; x++)
1970 p=PushDoublePixel(quantum_info,p,&pixel);
1971 SetPixelRed(image,ClampToQuantum(pixel),q);
1972 p=PushDoublePixel(quantum_info,p,&pixel);
1973 SetPixelGreen(image,ClampToQuantum(pixel),q);
1974 p=PushDoublePixel(quantum_info,p,&pixel);
1975 SetPixelBlue(image,ClampToQuantum(pixel),q);
1976 p=PushDoublePixel(quantum_info,p,&pixel);
1977 SetPixelBlack(image,ClampToQuantum(pixel),q);
1978 p=PushDoublePixel(quantum_info,p,&pixel);
1979 SetPixelOpacity(image,ClampToQuantum(pixel),q);
1980 p=PushDoublePixel(quantum_info,p,&pixel);
1981 p+=quantum_info->pad;
1982 q+=GetPixelChannels(image);
1989 range=GetQuantumRange(quantum_info->depth);
1990 for (x=0; x < (ssize_t) number_pixels; x++)
1992 p=PushQuantumPixel(quantum_info,p,&pixel);
1993 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
1994 p=PushQuantumPixel(quantum_info,p,&pixel);
1995 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
1996 p=PushQuantumPixel(quantum_info,p,&pixel);
1997 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
1998 p=PushQuantumPixel(quantum_info,p,&pixel);
1999 SetPixelBlack(image,ScaleAnyToQuantum(pixel,range),q);
2000 p=PushQuantumPixel(quantum_info,p,&pixel);
2001 SetPixelOpacity(image,ScaleAnyToQuantum(pixel,range),q);
2002 q+=GetPixelChannels(image);
2009 static void ImportGrayQuantum(const Image *image,QuantumInfo *quantum_info,
2010 const MagickSizeType number_pixels,const unsigned char *restrict p,
2011 Quantum *restrict q,ExceptionInfo *exception)
2025 assert(image != (Image *) NULL);
2026 assert(image->signature == MagickSignature);
2027 switch (quantum_info->depth)
2037 if (quantum_info->min_is_white != MagickFalse)
2042 for (x=0; x < ((ssize_t) number_pixels-7); x+=8)
2044 for (bit=0; bit < 8; bit++)
2046 SetPixelGray(image,((*p) & (1 << (7-bit))) == 0 ? black : white,q);
2047 q+=GetPixelChannels(image);
2051 for (bit=0; bit < (ssize_t) (number_pixels % 8); bit++)
2053 SetPixelGray(image,((*p) & (0x01 << (7-bit))) == 0 ? black : white,q);
2054 q+=GetPixelChannels(image);
2062 register unsigned char
2065 range=GetQuantumRange(quantum_info->depth);
2066 for (x=0; x < ((ssize_t) number_pixels-1); x+=2)
2068 pixel=(unsigned char) ((*p >> 4) & 0xf);
2069 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
2070 q+=GetPixelChannels(image);
2071 pixel=(unsigned char) ((*p) & 0xf);
2072 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
2074 q+=GetPixelChannels(image);
2076 for (bit=0; bit < (ssize_t) (number_pixels % 2); bit++)
2078 pixel=(unsigned char) (*p++ >> 4);
2079 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
2080 q+=GetPixelChannels(image);
2089 if (quantum_info->min_is_white != MagickFalse)
2091 for (x=0; x < (ssize_t) number_pixels; x++)
2093 p=PushCharPixel(p,&pixel);
2094 SetPixelGray(image,ScaleCharToQuantum(pixel),q);
2095 SetPixelAlpha(image,OpaqueAlpha,q);
2096 p+=quantum_info->pad;
2097 q+=GetPixelChannels(image);
2101 for (x=0; x < (ssize_t) number_pixels; x++)
2103 p=PushCharPixel(p,&pixel);
2104 SetPixelGray(image,ScaleCharToQuantum(pixel),q);
2105 SetPixelAlpha(image,OpaqueAlpha,q);
2106 p+=quantum_info->pad;
2107 q+=GetPixelChannels(image);
2113 range=GetQuantumRange(quantum_info->depth);
2114 if (quantum_info->pack == MagickFalse)
2116 if (image->endian == LSBEndian)
2118 for (x=0; x < (ssize_t) (number_pixels-2); x+=3)
2120 p=PushLongPixel(quantum_info->endian,p,&pixel);
2121 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 22) & 0x3ff,
2123 q+=GetPixelChannels(image);
2124 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,
2126 q+=GetPixelChannels(image);
2127 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 2) & 0x3ff,
2129 p+=quantum_info->pad;
2130 q+=GetPixelChannels(image);
2132 p=PushLongPixel(quantum_info->endian,p,&pixel);
2133 if (x++ < (ssize_t) (number_pixels-1))
2135 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 22) & 0x3ff,
2137 q+=GetPixelChannels(image);
2139 if (x++ < (ssize_t) number_pixels)
2141 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,
2143 q+=GetPixelChannels(image);
2147 for (x=0; x < (ssize_t) (number_pixels-2); x+=3)
2149 p=PushLongPixel(quantum_info->endian,p,&pixel);
2150 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 2) & 0x3ff,range),
2152 q+=GetPixelChannels(image);
2153 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,range),
2155 q+=GetPixelChannels(image);
2156 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 22) & 0x3ff,range),
2158 p+=quantum_info->pad;
2159 q+=GetPixelChannels(image);
2161 p=PushLongPixel(quantum_info->endian,p,&pixel);
2162 if (x++ < (ssize_t) (number_pixels-1))
2164 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 2) & 0x3ff,
2166 q+=GetPixelChannels(image);
2168 if (x++ < (ssize_t) number_pixels)
2170 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,
2172 q+=GetPixelChannels(image);
2176 for (x=0; x < (ssize_t) number_pixels; x++)
2178 p=PushQuantumPixel(quantum_info,p,&pixel);
2179 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
2180 p+=quantum_info->pad;
2181 q+=GetPixelChannels(image);
2187 range=GetQuantumRange(quantum_info->depth);
2188 if (quantum_info->pack == MagickFalse)
2193 for (x=0; x < (ssize_t) (number_pixels-1); x+=2)
2195 p=PushShortPixel(quantum_info->endian,p,&pixel);
2196 SetPixelGray(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
2198 q+=GetPixelChannels(image);
2199 p=PushShortPixel(quantum_info->endian,p,&pixel);
2200 SetPixelGray(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
2202 p+=quantum_info->pad;
2203 q+=GetPixelChannels(image);
2205 for (bit=0; bit < (ssize_t) (number_pixels % 2); bit++)
2207 p=PushShortPixel(quantum_info->endian,p,&pixel);
2208 SetPixelGray(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
2210 p+=quantum_info->pad;
2211 q+=GetPixelChannels(image);
2217 for (x=0; x < (ssize_t) number_pixels; x++)
2219 p=PushQuantumPixel(quantum_info,p,&pixel);
2220 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
2221 p+=quantum_info->pad;
2222 q+=GetPixelChannels(image);
2231 if (quantum_info->min_is_white != MagickFalse)
2233 for (x=0; x < (ssize_t) number_pixels; x++)
2235 p=PushShortPixel(quantum_info->endian,p,&pixel);
2236 SetPixelGray(image,ScaleShortToQuantum(pixel),q);
2237 p+=quantum_info->pad;
2238 q+=GetPixelChannels(image);
2242 if (quantum_info->format == FloatingPointQuantumFormat)
2244 for (x=0; x < (ssize_t) number_pixels; x++)
2246 p=PushShortPixel(quantum_info->endian,p,&pixel);
2247 SetPixelGray(image,ClampToQuantum(QuantumRange*
2248 HalfToSinglePrecision(pixel)),q);
2249 p+=quantum_info->pad;
2250 q+=GetPixelChannels(image);
2254 for (x=0; x < (ssize_t) number_pixels; x++)
2256 p=PushShortPixel(quantum_info->endian,p,&pixel);
2257 SetPixelGray(image,ScaleShortToQuantum(pixel),q);
2258 p+=quantum_info->pad;
2259 q+=GetPixelChannels(image);
2268 if (quantum_info->format == FloatingPointQuantumFormat)
2273 for (x=0; x < (ssize_t) number_pixels; x++)
2275 p=PushFloatPixel(quantum_info,p,&pixel);
2276 SetPixelGray(image,ClampToQuantum(pixel),q);
2277 p+=quantum_info->pad;
2278 q+=GetPixelChannels(image);
2282 for (x=0; x < (ssize_t) number_pixels; x++)
2284 p=PushLongPixel(quantum_info->endian,p,&pixel);
2285 SetPixelGray(image,ScaleLongToQuantum(pixel),q);
2286 p+=quantum_info->pad;
2287 q+=GetPixelChannels(image);
2293 if (quantum_info->format == FloatingPointQuantumFormat)
2298 for (x=0; x < (ssize_t) number_pixels; x++)
2300 p=PushDoublePixel(quantum_info,p,&pixel);
2301 SetPixelGray(image,ClampToQuantum(pixel),q);
2302 p+=quantum_info->pad;
2303 q+=GetPixelChannels(image);
2310 range=GetQuantumRange(quantum_info->depth);
2311 for (x=0; x < (ssize_t) number_pixels; x++)
2313 p=PushQuantumPixel(quantum_info,p,&pixel);
2314 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
2315 p+=quantum_info->pad;
2316 q+=GetPixelChannels(image);
2323 static void ImportGrayAlphaQuantum(const Image *image,QuantumInfo *quantum_info,
2324 const MagickSizeType number_pixels,const unsigned char *restrict p,
2325 Quantum *restrict q,ExceptionInfo *exception)
2339 assert(image != (Image *) NULL);
2340 assert(image->signature == MagickSignature);
2341 switch (quantum_info->depth)
2345 register unsigned char
2349 for (x=((ssize_t) number_pixels-3); x > 0; x-=4)
2351 for (bit=0; bit < 8; bit+=2)
2353 pixel=(unsigned char) (((*p) & (1 << (7-bit))) != 0 ? 0x00 : 0x01);
2354 SetPixelGray(image,(Quantum) (pixel == 0 ? 0 : QuantumRange),q);
2355 SetPixelAlpha(image,((*p) & (1UL << (unsigned char) (6-bit))) == 0 ?
2356 TransparentAlpha : OpaqueAlpha,q);
2357 q+=GetPixelChannels(image);
2361 if ((number_pixels % 4) != 0)
2362 for (bit=3; bit >= (ssize_t) (4-(number_pixels % 4)); bit-=2)
2364 pixel=(unsigned char) (((*p) & (1 << (7-bit))) != 0 ? 0x00 : 0x01);
2365 SetPixelGray(image,(Quantum) (pixel != 0 ? 0 : QuantumRange),q);
2366 SetPixelAlpha(image,((*p) & (1UL << (unsigned char) (6-bit))) == 0 ?
2367 TransparentAlpha : OpaqueAlpha,q);
2368 q+=GetPixelChannels(image);
2376 register unsigned char
2379 range=GetQuantumRange(quantum_info->depth);
2380 for (x=0; x < (ssize_t) number_pixels; x++)
2382 pixel=(unsigned char) ((*p >> 4) & 0xf);
2383 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
2384 pixel=(unsigned char) ((*p) & 0xf);
2385 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
2387 q+=GetPixelChannels(image);
2396 for (x=0; x < (ssize_t) number_pixels; x++)
2398 p=PushCharPixel(p,&pixel);
2399 SetPixelGray(image,ScaleCharToQuantum(pixel),q);
2400 p=PushCharPixel(p,&pixel);
2401 SetPixelAlpha(image,ScaleCharToQuantum(pixel),q);
2402 p+=quantum_info->pad;
2403 q+=GetPixelChannels(image);
2409 range=GetQuantumRange(quantum_info->depth);
2410 for (x=0; x < (ssize_t) number_pixels; x++)
2412 p=PushQuantumPixel(quantum_info,p,&pixel);
2413 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
2414 p=PushQuantumPixel(quantum_info,p,&pixel);
2415 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
2416 p+=quantum_info->pad;
2417 q+=GetPixelChannels(image);
2423 range=GetQuantumRange(quantum_info->depth);
2424 for (x=0; x < (ssize_t) number_pixels; x++)
2426 p=PushQuantumPixel(quantum_info,p,&pixel);
2427 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
2428 p=PushQuantumPixel(quantum_info,p,&pixel);
2429 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
2430 p+=quantum_info->pad;
2431 q+=GetPixelChannels(image);
2440 if (quantum_info->format == FloatingPointQuantumFormat)
2442 for (x=0; x < (ssize_t) number_pixels; x++)
2444 p=PushShortPixel(quantum_info->endian,p,&pixel);
2445 SetPixelGray(image,ClampToQuantum(QuantumRange*
2446 HalfToSinglePrecision(pixel)),q);
2447 p=PushShortPixel(quantum_info->endian,p,&pixel);
2448 SetPixelAlpha(image,ClampToQuantum(QuantumRange*
2449 HalfToSinglePrecision(pixel)),q);
2450 p+=quantum_info->pad;
2451 q+=GetPixelChannels(image);
2455 for (x=0; x < (ssize_t) number_pixels; x++)
2457 p=PushShortPixel(quantum_info->endian,p,&pixel);
2458 SetPixelGray(image,ScaleShortToQuantum(pixel),q);
2459 p=PushShortPixel(quantum_info->endian,p,&pixel);
2460 SetPixelAlpha(image,ScaleShortToQuantum(pixel),q);
2461 p+=quantum_info->pad;
2462 q+=GetPixelChannels(image);
2471 if (quantum_info->format == FloatingPointQuantumFormat)
2476 for (x=0; x < (ssize_t) number_pixels; x++)
2478 p=PushFloatPixel(quantum_info,p,&pixel);
2479 SetPixelGray(image,ClampToQuantum(pixel),q);
2480 p=PushFloatPixel(quantum_info,p,&pixel);
2481 SetPixelAlpha(image,ClampToQuantum(pixel),q);
2482 p+=quantum_info->pad;
2483 q+=GetPixelChannels(image);
2487 for (x=0; x < (ssize_t) number_pixels; x++)
2489 p=PushLongPixel(quantum_info->endian,p,&pixel);
2490 SetPixelGray(image,ScaleLongToQuantum(pixel),q);
2491 p=PushLongPixel(quantum_info->endian,p,&pixel);
2492 SetPixelAlpha(image,ScaleLongToQuantum(pixel),q);
2493 p+=quantum_info->pad;
2494 q+=GetPixelChannels(image);
2500 if (quantum_info->format == FloatingPointQuantumFormat)
2505 for (x=0; x < (ssize_t) number_pixels; x++)
2507 p=PushDoublePixel(quantum_info,p,&pixel);
2508 SetPixelGray(image,ClampToQuantum(pixel),q);
2509 p=PushDoublePixel(quantum_info,p,&pixel);
2510 SetPixelAlpha(image,ClampToQuantum(pixel),q);
2511 p+=quantum_info->pad;
2512 q+=GetPixelChannels(image);
2519 range=GetQuantumRange(quantum_info->depth);
2520 for (x=0; x < (ssize_t) number_pixels; x++)
2522 p=PushQuantumPixel(quantum_info,p,&pixel);
2523 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
2524 p=PushQuantumPixel(quantum_info,p,&pixel);
2525 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
2526 p+=quantum_info->pad;
2527 q+=GetPixelChannels(image);
2534 static void ImportGreenQuantum(const Image *image,QuantumInfo *quantum_info,
2535 const MagickSizeType number_pixels,const unsigned char *restrict p,
2536 Quantum *restrict q,ExceptionInfo *exception)
2547 assert(image != (Image *) NULL);
2548 assert(image->signature == MagickSignature);
2549 switch (quantum_info->depth)
2556 for (x=0; x < (ssize_t) number_pixels; x++)
2558 p=PushCharPixel(p,&pixel);
2559 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
2560 p+=quantum_info->pad;
2561 q+=GetPixelChannels(image);
2570 if (quantum_info->format == FloatingPointQuantumFormat)
2572 for (x=0; x < (ssize_t) number_pixels; x++)
2574 p=PushShortPixel(quantum_info->endian,p,&pixel);
2575 SetPixelGreen(image,ClampToQuantum(QuantumRange*
2576 HalfToSinglePrecision(pixel)),q);
2577 p+=quantum_info->pad;
2578 q+=GetPixelChannels(image);
2582 for (x=0; x < (ssize_t) number_pixels; x++)
2584 p=PushShortPixel(quantum_info->endian,p,&pixel);
2585 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
2586 p+=quantum_info->pad;
2587 q+=GetPixelChannels(image);
2596 if (quantum_info->format == FloatingPointQuantumFormat)
2601 for (x=0; x < (ssize_t) number_pixels; x++)
2603 p=PushFloatPixel(quantum_info,p,&pixel);
2604 SetPixelGreen(image,ClampToQuantum(pixel),q);
2605 p+=quantum_info->pad;
2606 q+=GetPixelChannels(image);
2610 for (x=0; x < (ssize_t) number_pixels; x++)
2612 p=PushLongPixel(quantum_info->endian,p,&pixel);
2613 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
2614 p+=quantum_info->pad;
2615 q+=GetPixelChannels(image);
2621 if (quantum_info->format == FloatingPointQuantumFormat)
2626 for (x=0; x < (ssize_t) number_pixels; x++)
2628 p=PushDoublePixel(quantum_info,p,&pixel);
2629 SetPixelGreen(image,ClampToQuantum(pixel),q);
2630 p+=quantum_info->pad;
2631 q+=GetPixelChannels(image);
2638 range=GetQuantumRange(quantum_info->depth);
2639 for (x=0; x < (ssize_t) number_pixels; x++)
2641 p=PushQuantumPixel(quantum_info,p,&pixel);
2642 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
2643 p+=quantum_info->pad;
2644 q+=GetPixelChannels(image);
2651 static void ImportIndexQuantum(const Image *image,QuantumInfo *quantum_info,
2652 const MagickSizeType number_pixels,const unsigned char *restrict p,
2653 Quantum *restrict q,ExceptionInfo *exception)
2667 if (image->storage_class != PseudoClass)
2669 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2670 "ColormappedImageRequired","`%s'",image->filename);
2673 range_exception=MagickFalse;
2674 switch (quantum_info->depth)
2678 register unsigned char
2681 for (x=0; x < ((ssize_t) number_pixels-7); x+=8)
2683 for (bit=0; bit < 8; bit++)
2685 if (quantum_info->min_is_white == MagickFalse)
2686 pixel=(unsigned char) (((*p) & (1 << (7-bit))) == 0 ?
2689 pixel=(unsigned char) (((*p) & (1 << (7-bit))) != 0 ?
2691 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),
2693 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
2694 GetPixelIndex(image,q),q);
2695 q+=GetPixelChannels(image);
2699 for (bit=0; bit < (ssize_t) (number_pixels % 8); bit++)
2701 if (quantum_info->min_is_white == MagickFalse)
2702 pixel=(unsigned char) (((*p) & (1 << (7-bit))) == 0 ? 0x00 : 0x01);
2704 pixel=(unsigned char) (((*p) & (1 << (7-bit))) != 0 ? 0x00 : 0x01);
2705 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2706 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
2707 GetPixelIndex(image,q),q);
2708 q+=GetPixelChannels(image);
2714 register unsigned char
2717 for (x=0; x < ((ssize_t) number_pixels-1); x+=2)
2719 pixel=(unsigned char) ((*p >> 4) & 0xf);
2720 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2721 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
2722 GetPixelIndex(image,q),q);
2723 q+=GetPixelChannels(image);
2724 pixel=(unsigned char) ((*p) & 0xf);
2725 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2726 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
2727 GetPixelIndex(image,q),q);
2729 q+=GetPixelChannels(image);
2731 for (bit=0; bit < (ssize_t) (number_pixels % 2); bit++)
2733 pixel=(unsigned char) ((*p++ >> 4) & 0xf);
2734 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2735 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
2736 GetPixelIndex(image,q),q);
2737 q+=GetPixelChannels(image);
2746 for (x=0; x < (ssize_t) number_pixels; x++)
2748 p=PushCharPixel(p,&pixel);
2749 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2750 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
2751 GetPixelIndex(image,q),q);
2752 p+=quantum_info->pad;
2753 q+=GetPixelChannels(image);
2762 if (quantum_info->format == FloatingPointQuantumFormat)
2764 for (x=0; x < (ssize_t) number_pixels; x++)
2766 p=PushShortPixel(quantum_info->endian,p,&pixel);
2767 SetPixelIndex(image,PushColormapIndex(image,ClampToQuantum(
2768 (double) QuantumRange*HalfToSinglePrecision(pixel)),
2769 &range_exception),q);
2770 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
2771 GetPixelIndex(image,q),q);
2772 p+=quantum_info->pad;
2773 q+=GetPixelChannels(image);
2777 for (x=0; x < (ssize_t) number_pixels; x++)
2779 p=PushShortPixel(quantum_info->endian,p,&pixel);
2780 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2781 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
2782 GetPixelIndex(image,q),q);
2783 p+=quantum_info->pad;
2784 q+=GetPixelChannels(image);
2793 if (quantum_info->format == FloatingPointQuantumFormat)
2798 for (x=0; x < (ssize_t) number_pixels; x++)
2800 p=PushFloatPixel(quantum_info,p,&pixel);
2801 SetPixelIndex(image,PushColormapIndex(image,ClampToQuantum(pixel),
2802 &range_exception),q);
2803 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
2804 GetPixelIndex(image,q),q);
2805 p+=quantum_info->pad;
2806 q+=GetPixelChannels(image);
2810 for (x=0; x < (ssize_t) number_pixels; x++)
2812 p=PushLongPixel(quantum_info->endian,p,&pixel);
2813 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2814 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
2815 GetPixelIndex(image,q),q);
2816 p+=quantum_info->pad;
2817 q+=GetPixelChannels(image);
2823 if (quantum_info->format == FloatingPointQuantumFormat)
2828 for (x=0; x < (ssize_t) number_pixels; x++)
2830 p=PushDoublePixel(quantum_info,p,&pixel);
2831 SetPixelIndex(image,PushColormapIndex(image,ClampToQuantum(pixel),
2832 &range_exception),q);
2833 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
2834 GetPixelIndex(image,q),q);
2835 p+=quantum_info->pad;
2836 q+=GetPixelChannels(image);
2843 for (x=0; x < (ssize_t) number_pixels; x++)
2845 p=PushQuantumPixel(quantum_info,p,&pixel);
2846 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2847 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
2848 GetPixelIndex(image,q),q);
2849 p+=quantum_info->pad;
2850 q+=GetPixelChannels(image);
2855 if (range_exception != MagickFalse)
2856 (void) ThrowMagickException(exception,GetMagickModule(),CorruptImageError,
2857 "InvalidColormapIndex","`%s'",image->filename);
2860 static void ImportIndexAlphaQuantum(const Image *image,
2861 QuantumInfo *quantum_info,const MagickSizeType number_pixels,
2862 const unsigned char *restrict p,Quantum *restrict q,ExceptionInfo *exception)
2879 if (image->storage_class != PseudoClass)
2881 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2882 "ColormappedImageRequired","`%s'",image->filename);
2885 range_exception=MagickFalse;
2886 switch (quantum_info->depth)
2890 register unsigned char
2893 for (x=((ssize_t) number_pixels-3); x > 0; x-=4)
2895 for (bit=0; bit < 8; bit+=2)
2897 if (quantum_info->min_is_white == MagickFalse)
2898 pixel=(unsigned char) (((*p) & (1 << (7-bit))) == 0 ? 0x00 : 0x01);
2900 pixel=(unsigned char) (((*p) & (1 << (7-bit))) != 0 ? 0x00 : 0x01);
2901 SetPixelGray(image,(Quantum) (pixel == 0 ? 0 : QuantumRange),q);
2902 SetPixelAlpha(image,((*p) & (1UL << (unsigned char) (6-bit))) == 0 ?
2903 TransparentAlpha : OpaqueAlpha,q);
2904 SetPixelIndex(image,(Quantum) (pixel == 0 ? 0 : 1),q);
2905 q+=GetPixelChannels(image);
2908 if ((number_pixels % 4) != 0)
2909 for (bit=3; bit >= (ssize_t) (4-(number_pixels % 4)); bit-=2)
2911 if (quantum_info->min_is_white == MagickFalse)
2912 pixel=(unsigned char) (((*p) & (1 << (7-bit))) == 0 ? 0x00 : 0x01);
2914 pixel=(unsigned char) (((*p) & (1 << (7-bit))) != 0 ? 0x00 : 0x01);
2915 SetPixelIndex(image,(Quantum) (pixel == 0 ? 0 : 1),q);
2916 SetPixelGray(image,(Quantum) (pixel == 0 ? 0 : QuantumRange),q);
2917 SetPixelAlpha(image,((*p) & (1UL << (unsigned char) (6-bit))) == 0 ?
2918 TransparentAlpha : OpaqueAlpha,q);
2919 q+=GetPixelChannels(image);
2925 register unsigned char
2928 range=GetQuantumRange(quantum_info->depth);
2929 for (x=0; x < (ssize_t) number_pixels; x++)
2931 pixel=(unsigned char) ((*p >> 4) & 0xf);
2932 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2933 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
2934 GetPixelIndex(image,q),q);
2935 pixel=(unsigned char) ((*p) & 0xf);
2936 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
2938 q+=GetPixelChannels(image);
2947 for (x=0; x < (ssize_t) number_pixels; x++)
2949 p=PushCharPixel(p,&pixel);
2950 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2951 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
2952 GetPixelIndex(image,q),q);
2953 p=PushCharPixel(p,&pixel);
2954 SetPixelAlpha(image,ScaleCharToQuantum(pixel),q);
2955 p+=quantum_info->pad;
2956 q+=GetPixelChannels(image);
2965 if (quantum_info->format == FloatingPointQuantumFormat)
2967 for (x=0; x < (ssize_t) number_pixels; x++)
2969 p=PushShortPixel(quantum_info->endian,p,&pixel);
2970 SetPixelIndex(image,PushColormapIndex(image,ClampToQuantum(
2971 (double) QuantumRange*HalfToSinglePrecision(pixel)),
2972 &range_exception),q);
2973 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
2974 GetPixelIndex(image,q),q);
2975 p=PushShortPixel(quantum_info->endian,p,&pixel);
2976 SetPixelAlpha(image,ClampToQuantum(QuantumRange*
2977 HalfToSinglePrecision(pixel)),q);
2978 p+=quantum_info->pad;
2979 q+=GetPixelChannels(image);
2983 for (x=0; x < (ssize_t) number_pixels; x++)
2985 p=PushShortPixel(quantum_info->endian,p,&pixel);
2986 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2987 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
2988 GetPixelIndex(image,q),q);
2989 p=PushShortPixel(quantum_info->endian,p,&pixel);
2990 SetPixelAlpha(image,ScaleShortToQuantum(pixel),q);
2991 p+=quantum_info->pad;
2992 q+=GetPixelChannels(image);
3001 if (quantum_info->format == FloatingPointQuantumFormat)
3006 for (x=0; x < (ssize_t) number_pixels; x++)
3008 p=PushFloatPixel(quantum_info,p,&pixel);
3009 SetPixelIndex(image,PushColormapIndex(image,
3010 ClampToQuantum(pixel),&range_exception),q);
3011 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
3012 GetPixelIndex(image,q),q);
3013 p=PushFloatPixel(quantum_info,p,&pixel);
3014 SetPixelAlpha(image,ClampToQuantum(pixel),q);
3015 p+=quantum_info->pad;
3016 q+=GetPixelChannels(image);
3020 for (x=0; x < (ssize_t) number_pixels; x++)
3022 p=PushLongPixel(quantum_info->endian,p,&pixel);
3023 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
3024 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
3025 GetPixelIndex(image,q),q);
3026 p=PushLongPixel(quantum_info->endian,p,&pixel);
3027 SetPixelAlpha(image,ScaleLongToQuantum(pixel),q);
3028 p+=quantum_info->pad;
3029 q+=GetPixelChannels(image);
3035 if (quantum_info->format == FloatingPointQuantumFormat)
3040 for (x=0; x < (ssize_t) number_pixels; x++)
3042 p=PushDoublePixel(quantum_info,p,&pixel);
3043 SetPixelIndex(image,PushColormapIndex(image,ClampToQuantum(pixel),
3044 &range_exception),q);
3045 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
3046 GetPixelIndex(image,q),q);
3047 p=PushDoublePixel(quantum_info,p,&pixel);
3048 SetPixelAlpha(image,ClampToQuantum(pixel),q);
3049 p+=quantum_info->pad;
3050 q+=GetPixelChannels(image);
3057 range=GetQuantumRange(quantum_info->depth);
3058 for (x=0; x < (ssize_t) number_pixels; x++)
3060 p=PushQuantumPixel(quantum_info,p,&pixel);
3061 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
3062 SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
3063 GetPixelIndex(image,q),q);
3064 p=PushQuantumPixel(quantum_info,p,&pixel);
3065 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
3066 p+=quantum_info->pad;
3067 q+=GetPixelChannels(image);
3072 if (range_exception != MagickFalse)
3073 (void) ThrowMagickException(exception,GetMagickModule(),CorruptImageError,
3074 "InvalidColormapIndex","`%s'",image->filename);
3077 static void ImportOpacityQuantum(const Image *image,QuantumInfo *quantum_info,
3078 const MagickSizeType number_pixels,const unsigned char *restrict p,
3079 Quantum *restrict q,ExceptionInfo *exception)
3090 assert(image != (Image *) NULL);
3091 assert(image->signature == MagickSignature);
3092 switch (quantum_info->depth)
3099 for (x=0; x < (ssize_t) number_pixels; x++)
3101 p=PushCharPixel(p,&pixel);
3102 SetPixelOpacity(image,ScaleCharToQuantum(pixel),q);
3103 p+=quantum_info->pad;
3104 q+=GetPixelChannels(image);
3113 if (quantum_info->format == FloatingPointQuantumFormat)
3115 for (x=0; x < (ssize_t) number_pixels; x++)
3117 p=PushShortPixel(quantum_info->endian,p,&pixel);
3118 SetPixelOpacity(image,ClampToQuantum(QuantumRange*
3119 HalfToSinglePrecision(pixel)),q);
3120 p+=quantum_info->pad;
3121 q+=GetPixelChannels(image);
3125 for (x=0; x < (ssize_t) number_pixels; x++)
3127 p=PushShortPixel(quantum_info->endian,p,&pixel);
3128 SetPixelOpacity(image,ScaleShortToQuantum(pixel),q);
3129 p+=quantum_info->pad;
3130 q+=GetPixelChannels(image);
3139 if (quantum_info->format == FloatingPointQuantumFormat)
3144 for (x=0; x < (ssize_t) number_pixels; x++)
3146 p=PushFloatPixel(quantum_info,p,&pixel);
3147 SetPixelOpacity(image,ClampToQuantum(pixel),q);
3148 p+=quantum_info->pad;
3149 q+=GetPixelChannels(image);
3153 for (x=0; x < (ssize_t) number_pixels; x++)
3155 p=PushLongPixel(quantum_info->endian,p,&pixel);
3156 SetPixelOpacity(image,ScaleLongToQuantum(pixel),q);
3157 p+=quantum_info->pad;
3158 q+=GetPixelChannels(image);
3164 if (quantum_info->format == FloatingPointQuantumFormat)
3169 for (x=0; x < (ssize_t) number_pixels; x++)
3171 p=PushDoublePixel(quantum_info,p,&pixel);
3172 SetPixelOpacity(image,ClampToQuantum(pixel),q);
3173 p+=quantum_info->pad;
3174 q+=GetPixelChannels(image);
3181 range=GetQuantumRange(quantum_info->depth);
3182 for (x=0; x < (ssize_t) number_pixels; x++)
3184 p=PushQuantumPixel(quantum_info,p,&pixel);
3185 SetPixelOpacity(image,ScaleAnyToQuantum(pixel,range),q);
3186 p+=quantum_info->pad;
3187 q+=GetPixelChannels(image);
3194 static void ImportRedQuantum(const Image *image,QuantumInfo *quantum_info,
3195 const MagickSizeType number_pixels,const unsigned char *restrict p,
3196 Quantum *restrict q,ExceptionInfo *exception)
3207 assert(image != (Image *) NULL);
3208 assert(image->signature == MagickSignature);
3209 switch (quantum_info->depth)
3216 for (x=0; x < (ssize_t) number_pixels; x++)
3218 p=PushCharPixel(p,&pixel);
3219 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
3220 p+=quantum_info->pad;
3221 q+=GetPixelChannels(image);
3230 if (quantum_info->format == FloatingPointQuantumFormat)
3232 for (x=0; x < (ssize_t) number_pixels; x++)
3234 p=PushShortPixel(quantum_info->endian,p,&pixel);
3235 SetPixelRed(image,ClampToQuantum(QuantumRange*
3236 HalfToSinglePrecision(pixel)),q);
3237 p+=quantum_info->pad;
3238 q+=GetPixelChannels(image);
3242 for (x=0; x < (ssize_t) number_pixels; x++)
3244 p=PushShortPixel(quantum_info->endian,p,&pixel);
3245 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
3246 p+=quantum_info->pad;
3247 q+=GetPixelChannels(image);
3256 if (quantum_info->format == FloatingPointQuantumFormat)
3261 for (x=0; x < (ssize_t) number_pixels; x++)
3263 p=PushFloatPixel(quantum_info,p,&pixel);
3264 SetPixelRed(image,ClampToQuantum(pixel),q);
3265 p+=quantum_info->pad;
3266 q+=GetPixelChannels(image);
3270 for (x=0; x < (ssize_t) number_pixels; x++)
3272 p=PushLongPixel(quantum_info->endian,p,&pixel);
3273 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
3274 p+=quantum_info->pad;
3275 q+=GetPixelChannels(image);
3281 if (quantum_info->format == FloatingPointQuantumFormat)
3286 for (x=0; x < (ssize_t) number_pixels; x++)
3288 p=PushDoublePixel(quantum_info,p,&pixel);
3289 SetPixelRed(image,ClampToQuantum(pixel),q);
3290 p+=quantum_info->pad;
3291 q+=GetPixelChannels(image);
3298 range=GetQuantumRange(quantum_info->depth);
3299 for (x=0; x < (ssize_t) number_pixels; x++)
3301 p=PushQuantumPixel(quantum_info,p,&pixel);
3302 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
3303 p+=quantum_info->pad;
3304 q+=GetPixelChannels(image);
3311 static void ImportRGBQuantum(const Image *image,QuantumInfo *quantum_info,
3312 const MagickSizeType number_pixels,const unsigned char *restrict p,
3313 Quantum *restrict q,ExceptionInfo *exception)
3327 assert(image != (Image *) NULL);
3328 assert(image->signature == MagickSignature);
3329 switch (quantum_info->depth)
3336 for (x=0; x < (ssize_t) number_pixels; x++)
3338 p=PushCharPixel(p,&pixel);
3339 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
3340 p=PushCharPixel(p,&pixel);
3341 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
3342 p=PushCharPixel(p,&pixel);
3343 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
3344 SetPixelAlpha(image,OpaqueAlpha,q);
3345 p+=quantum_info->pad;
3346 q+=GetPixelChannels(image);
3352 range=GetQuantumRange(quantum_info->depth);
3353 if (quantum_info->pack == MagickFalse)
3355 for (x=0; x < (ssize_t) number_pixels; x++)
3357 p=PushLongPixel(quantum_info->endian,p,&pixel);
3358 SetPixelRed(image,ScaleAnyToQuantum((pixel >> 22) & 0x3ff,range),q);
3359 SetPixelGreen(image,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,range),
3361 SetPixelBlue(image,ScaleAnyToQuantum((pixel >> 2) & 0x3ff,range),q);
3362 p+=quantum_info->pad;
3363 q+=GetPixelChannels(image);
3367 if (quantum_info->quantum == 32U)
3369 for (x=0; x < (ssize_t) number_pixels; x++)
3371 p=PushQuantumLongPixel(quantum_info,p,&pixel);
3372 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
3373 p=PushQuantumLongPixel(quantum_info,p,&pixel);
3374 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
3375 p=PushQuantumLongPixel(quantum_info,p,&pixel);
3376 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
3377 q+=GetPixelChannels(image);
3381 for (x=0; x < (ssize_t) number_pixels; x++)
3383 p=PushQuantumPixel(quantum_info,p,&pixel);
3384 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
3385 p=PushQuantumPixel(quantum_info,p,&pixel);
3386 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
3387 p=PushQuantumPixel(quantum_info,p,&pixel);
3388 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
3389 q+=GetPixelChannels(image);
3395 range=GetQuantumRange(quantum_info->depth);
3396 if (quantum_info->pack == MagickFalse)
3401 for (x=0; x < (ssize_t) (3*number_pixels-1); x+=2)
3403 p=PushShortPixel(quantum_info->endian,p,&pixel);
3409 SetPixelRed(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3415 SetPixelGreen(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3421 SetPixelBlue(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3423 q+=GetPixelChannels(image);
3427 p=PushShortPixel(quantum_info->endian,p,&pixel);
3433 SetPixelRed(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3439 SetPixelGreen(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3445 SetPixelBlue(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3447 q+=GetPixelChannels(image);
3451 p+=quantum_info->pad;
3453 for (bit=0; bit < (ssize_t) (3*number_pixels % 2); bit++)
3455 p=PushShortPixel(quantum_info->endian,p,&pixel);
3456 switch ((x+bit) % 3)
3461 SetPixelRed(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3467 SetPixelGreen(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3473 SetPixelBlue(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3475 q+=GetPixelChannels(image);
3479 p+=quantum_info->pad;
3485 if (quantum_info->quantum == 32U)
3487 for (x=0; x < (ssize_t) number_pixels; x++)
3489 p=PushQuantumLongPixel(quantum_info,p,&pixel);
3490 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
3491 p=PushQuantumLongPixel(quantum_info,p,&pixel);
3492 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
3493 p=PushQuantumLongPixel(quantum_info,p,&pixel);
3494 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
3495 q+=GetPixelChannels(image);
3499 for (x=0; x < (ssize_t) number_pixels; x++)
3501 p=PushQuantumPixel(quantum_info,p,&pixel);
3502 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
3503 p=PushQuantumPixel(quantum_info,p,&pixel);
3504 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
3505 p=PushQuantumPixel(quantum_info,p,&pixel);
3506 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
3507 q+=GetPixelChannels(image);
3516 if (quantum_info->format == FloatingPointQuantumFormat)
3518 for (x=0; x < (ssize_t) number_pixels; x++)
3520 p=PushShortPixel(quantum_info->endian,p,&pixel);
3521 SetPixelRed(image,ClampToQuantum(QuantumRange*
3522 HalfToSinglePrecision(pixel)),q);
3523 p=PushShortPixel(quantum_info->endian,p,&pixel);
3524 SetPixelGreen(image,ClampToQuantum(QuantumRange*
3525 HalfToSinglePrecision(pixel)),q);
3526 p=PushShortPixel(quantum_info->endian,p,&pixel);
3527 SetPixelBlue(image,ClampToQuantum(QuantumRange*
3528 HalfToSinglePrecision(pixel)),q);
3529 p+=quantum_info->pad;
3530 q+=GetPixelChannels(image);
3534 for (x=0; x < (ssize_t) number_pixels; x++)
3536 p=PushShortPixel(quantum_info->endian,p,&pixel);
3537 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
3538 p=PushShortPixel(quantum_info->endian,p,&pixel);
3539 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
3540 p=PushShortPixel(quantum_info->endian,p,&pixel);
3541 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
3542 p+=quantum_info->pad;
3543 q+=GetPixelChannels(image);
3552 if (quantum_info->format == FloatingPointQuantumFormat)
3557 for (x=0; x < (ssize_t) number_pixels; x++)
3559 p=PushFloatPixel(quantum_info,p,&pixel);
3560 SetPixelRed(image,ClampToQuantum(pixel),q);
3561 p=PushFloatPixel(quantum_info,p,&pixel);
3562 SetPixelGreen(image,ClampToQuantum(pixel),q);
3563 p=PushFloatPixel(quantum_info,p,&pixel);
3564 SetPixelBlue(image,ClampToQuantum(pixel),q);
3565 p+=quantum_info->pad;
3566 q+=GetPixelChannels(image);
3570 for (x=0; x < (ssize_t) number_pixels; x++)
3572 p=PushLongPixel(quantum_info->endian,p,&pixel);
3573 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
3574 p=PushLongPixel(quantum_info->endian,p,&pixel);
3575 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
3576 p=PushLongPixel(quantum_info->endian,p,&pixel);
3577 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
3578 p+=quantum_info->pad;
3579 q+=GetPixelChannels(image);
3585 if (quantum_info->format == FloatingPointQuantumFormat)
3590 for (x=0; x < (ssize_t) number_pixels; x++)
3592 p=PushDoublePixel(quantum_info,p,&pixel);
3593 SetPixelRed(image,ClampToQuantum(pixel),q);
3594 p=PushDoublePixel(quantum_info,p,&pixel);
3595 SetPixelGreen(image,ClampToQuantum(pixel),q);
3596 p=PushDoublePixel(quantum_info,p,&pixel);
3597 SetPixelBlue(image,ClampToQuantum(pixel),q);
3598 p+=quantum_info->pad;
3599 q+=GetPixelChannels(image);
3606 range=GetQuantumRange(quantum_info->depth);
3607 for (x=0; x < (ssize_t) number_pixels; x++)
3609 p=PushQuantumPixel(quantum_info,p,&pixel);
3610 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
3611 p=PushQuantumPixel(quantum_info,p,&pixel);
3612 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
3613 p=PushQuantumPixel(quantum_info,p,&pixel);
3614 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
3615 q+=GetPixelChannels(image);
3622 static void ImportRGBAQuantum(const Image *image,QuantumInfo *quantum_info,
3623 const MagickSizeType number_pixels,const unsigned char *restrict p,
3624 Quantum *restrict q,ExceptionInfo *exception)
3635 assert(image != (Image *) NULL);
3636 assert(image->signature == MagickSignature);
3637 switch (quantum_info->depth)
3644 for (x=0; x < (ssize_t) number_pixels; x++)
3646 p=PushCharPixel(p,&pixel);
3647 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
3648 p=PushCharPixel(p,&pixel);
3649 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
3650 p=PushCharPixel(p,&pixel);
3651 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
3652 p=PushCharPixel(p,&pixel);
3653 SetPixelAlpha(image,ScaleCharToQuantum(pixel),q);
3654 p+=quantum_info->pad;
3655 q+=GetPixelChannels(image);
3662 if (quantum_info->pack == MagickFalse)
3675 for (x=0; x < (ssize_t) number_pixels; x++)
3677 for (i=0; i < 4; i++)
3683 p=PushLongPixel(quantum_info->endian,p,&pixel);
3684 quantum=(size_t) (ScaleShortToQuantum((unsigned short)
3685 (((pixel >> 22) & 0x3ff) << 6)));
3690 quantum=(size_t) (ScaleShortToQuantum((unsigned short)
3691 (((pixel >> 12) & 0x3ff) << 6)));
3696 quantum=(size_t) (ScaleShortToQuantum((unsigned short)
3697 (((pixel >> 2) & 0x3ff) << 6)));
3703 case 0: SetPixelRed(image,(Quantum) quantum,q); break;
3704 case 1: SetPixelGreen(image,(Quantum) quantum,q); break;
3705 case 2: SetPixelBlue(image,(Quantum) quantum,q); break;
3706 case 3: SetPixelAlpha(image,(Quantum) quantum,q); break;
3710 p+=quantum_info->pad;
3711 q+=GetPixelChannels(image);
3715 for (x=0; x < (ssize_t) number_pixels; x++)
3717 p=PushQuantumPixel(quantum_info,p,&pixel);
3718 SetPixelRed(image,ScaleShortToQuantum((unsigned short) (pixel << 6)),q);
3719 p=PushQuantumPixel(quantum_info,p,&pixel);
3720 SetPixelGreen(image,ScaleShortToQuantum((unsigned short) (pixel << 6)),
3722 p=PushQuantumPixel(quantum_info,p,&pixel);
3723 SetPixelBlue(image,ScaleShortToQuantum((unsigned short) (pixel << 6)),
3725 p=PushQuantumPixel(quantum_info,p,&pixel);
3726 SetPixelAlpha(image,ScaleShortToQuantum((unsigned short) (pixel << 6)),
3728 q+=GetPixelChannels(image);
3737 if (quantum_info->format == FloatingPointQuantumFormat)
3739 for (x=0; x < (ssize_t) number_pixels; x++)
3741 p=PushShortPixel(quantum_info->endian,p,&pixel);
3742 SetPixelRed(image,ClampToQuantum(QuantumRange*
3743 HalfToSinglePrecision(pixel)),q);
3744 p=PushShortPixel(quantum_info->endian,p,&pixel);
3745 SetPixelGreen(image,ClampToQuantum(QuantumRange*
3746 HalfToSinglePrecision(pixel)),q);
3747 p=PushShortPixel(quantum_info->endian,p,&pixel);
3748 SetPixelBlue(image,ClampToQuantum(QuantumRange*
3749 HalfToSinglePrecision(pixel)),q);
3750 p=PushShortPixel(quantum_info->endian,p,&pixel);
3751 SetPixelAlpha(image,ClampToQuantum(QuantumRange*
3752 HalfToSinglePrecision(pixel)),q);
3753 p+=quantum_info->pad;
3754 q+=GetPixelChannels(image);
3758 for (x=0; x < (ssize_t) number_pixels; x++)
3760 p=PushShortPixel(quantum_info->endian,p,&pixel);
3761 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
3762 p=PushShortPixel(quantum_info->endian,p,&pixel);
3763 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
3764 p=PushShortPixel(quantum_info->endian,p,&pixel);
3765 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
3766 p=PushShortPixel(quantum_info->endian,p,&pixel);
3767 SetPixelAlpha(image,ScaleShortToQuantum(pixel),q);
3768 p+=quantum_info->pad;
3769 q+=GetPixelChannels(image);
3778 if (quantum_info->format == FloatingPointQuantumFormat)
3783 for (x=0; x < (ssize_t) number_pixels; x++)
3785 p=PushFloatPixel(quantum_info,p,&pixel);
3786 SetPixelRed(image,ClampToQuantum(pixel),q);
3787 p=PushFloatPixel(quantum_info,p,&pixel);
3788 SetPixelGreen(image,ClampToQuantum(pixel),q);
3789 p=PushFloatPixel(quantum_info,p,&pixel);
3790 SetPixelBlue(image,ClampToQuantum(pixel),q);
3791 p=PushFloatPixel(quantum_info,p,&pixel);
3792 SetPixelAlpha(image,ClampToQuantum(pixel),q);
3793 p+=quantum_info->pad;
3794 q+=GetPixelChannels(image);
3798 for (x=0; x < (ssize_t) number_pixels; x++)
3800 p=PushLongPixel(quantum_info->endian,p,&pixel);
3801 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
3802 p=PushLongPixel(quantum_info->endian,p,&pixel);
3803 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
3804 p=PushLongPixel(quantum_info->endian,p,&pixel);
3805 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
3806 p=PushLongPixel(quantum_info->endian,p,&pixel);
3807 SetPixelAlpha(image,ScaleLongToQuantum(pixel),q);
3808 p+=quantum_info->pad;
3809 q+=GetPixelChannels(image);
3815 if (quantum_info->format == FloatingPointQuantumFormat)
3820 for (x=0; x < (ssize_t) number_pixels; x++)
3822 p=PushDoublePixel(quantum_info,p,&pixel);
3823 SetPixelRed(image,ClampToQuantum(pixel),q);
3824 p=PushDoublePixel(quantum_info,p,&pixel);
3825 SetPixelGreen(image,ClampToQuantum(pixel),q);
3826 p=PushDoublePixel(quantum_info,p,&pixel);
3827 SetPixelBlue(image,ClampToQuantum(pixel),q);
3828 p=PushDoublePixel(quantum_info,p,&pixel);
3829 SetPixelAlpha(image,ClampToQuantum(pixel),q);
3830 p+=quantum_info->pad;
3831 q+=GetPixelChannels(image);
3838 range=GetQuantumRange(quantum_info->depth);
3839 for (x=0; x < (ssize_t) number_pixels; x++)
3841 p=PushQuantumPixel(quantum_info,p,&pixel);
3842 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
3843 p=PushQuantumPixel(quantum_info,p,&pixel);
3844 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
3845 p=PushQuantumPixel(quantum_info,p,&pixel);
3846 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
3847 p=PushQuantumPixel(quantum_info,p,&pixel);
3848 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
3849 q+=GetPixelChannels(image);
3856 static void ImportRGBOQuantum(const Image *image,QuantumInfo *quantum_info,
3857 const MagickSizeType number_pixels,const unsigned char *restrict p,
3858 Quantum *restrict q,ExceptionInfo *exception)
3869 assert(image != (Image *) NULL);
3870 assert(image->signature == MagickSignature);
3871 switch (quantum_info->depth)
3878 for (x=0; x < (ssize_t) number_pixels; x++)
3880 p=PushCharPixel(p,&pixel);
3881 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
3882 p=PushCharPixel(p,&pixel);
3883 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
3884 p=PushCharPixel(p,&pixel);
3885 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
3886 p=PushCharPixel(p,&pixel);
3887 SetPixelOpacity(image,ScaleCharToQuantum(pixel),q);
3888 p+=quantum_info->pad;
3889 q+=GetPixelChannels(image);
3896 if (quantum_info->pack == MagickFalse)
3909 for (x=0; x < (ssize_t) number_pixels; x++)
3911 for (i=0; i < 4; i++)
3917 p=PushLongPixel(quantum_info->endian,p,&pixel);
3918 quantum=(size_t) (ScaleShortToQuantum((unsigned short)
3919 (((pixel >> 22) & 0x3ff) << 6)));
3924 quantum=(size_t) (ScaleShortToQuantum((unsigned short)
3925 (((pixel >> 12) & 0x3ff) << 6)));
3930 quantum=(size_t) (ScaleShortToQuantum((unsigned short)
3931 (((pixel >> 2) & 0x3ff) << 6)));
3937 case 0: SetPixelRed(image,(Quantum) quantum,q); break;
3938 case 1: SetPixelGreen(image,(Quantum) quantum,q); break;
3939 case 2: SetPixelBlue(image,(Quantum) quantum,q); break;
3940 case 3: SetPixelOpacity(image,(Quantum) quantum,q); break;
3944 p+=quantum_info->pad;
3945 q+=GetPixelChannels(image);
3949 for (x=0; x < (ssize_t) number_pixels; x++)
3951 p=PushQuantumPixel(quantum_info,p,&pixel);
3952 SetPixelRed(image,ScaleShortToQuantum((unsigned short) (pixel << 6)),q);
3953 p=PushQuantumPixel(quantum_info,p,&pixel);
3954 SetPixelGreen(image,ScaleShortToQuantum((unsigned short) (pixel << 6)),
3956 p=PushQuantumPixel(quantum_info,p,&pixel);
3957 SetPixelBlue(image,ScaleShortToQuantum((unsigned short) (pixel << 6)),
3959 p=PushQuantumPixel(quantum_info,p,&pixel);
3960 SetPixelOpacity(image,ScaleShortToQuantum((unsigned short) (pixel << 6)),
3962 q+=GetPixelChannels(image);
3971 if (quantum_info->format == FloatingPointQuantumFormat)
3973 for (x=0; x < (ssize_t) number_pixels; x++)
3975 p=PushShortPixel(quantum_info->endian,p,&pixel);
3976 SetPixelRed(image,ClampToQuantum(QuantumRange*
3977 HalfToSinglePrecision(pixel)),q);
3978 p=PushShortPixel(quantum_info->endian,p,&pixel);
3979 SetPixelGreen(image,ClampToQuantum(QuantumRange*
3980 HalfToSinglePrecision(pixel)),q);
3981 p=PushShortPixel(quantum_info->endian,p,&pixel);
3982 SetPixelBlue(image,ClampToQuantum(QuantumRange*
3983 HalfToSinglePrecision(pixel)),q);
3984 p=PushShortPixel(quantum_info->endian,p,&pixel);
3985 SetPixelOpacity(image,ClampToQuantum(QuantumRange*
3986 HalfToSinglePrecision(pixel)),q);
3987 p+=quantum_info->pad;
3988 q+=GetPixelChannels(image);
3992 for (x=0; x < (ssize_t) number_pixels; x++)
3994 p=PushShortPixel(quantum_info->endian,p,&pixel);
3995 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
3996 p=PushShortPixel(quantum_info->endian,p,&pixel);
3997 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
3998 p=PushShortPixel(quantum_info->endian,p,&pixel);
3999 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
4000 p=PushShortPixel(quantum_info->endian,p,&pixel);
4001 SetPixelOpacity(image,ScaleShortToQuantum(pixel),q);
4002 p+=quantum_info->pad;
4003 q+=GetPixelChannels(image);
4012 if (quantum_info->format == FloatingPointQuantumFormat)
4017 for (x=0; x < (ssize_t) number_pixels; x++)
4019 p=PushFloatPixel(quantum_info,p,&pixel);
4020 SetPixelRed(image,ClampToQuantum(pixel),q);
4021 p=PushFloatPixel(quantum_info,p,&pixel);
4022 SetPixelGreen(image,ClampToQuantum(pixel),q);
4023 p=PushFloatPixel(quantum_info,p,&pixel);
4024 SetPixelBlue(image,ClampToQuantum(pixel),q);
4025 p=PushFloatPixel(quantum_info,p,&pixel);
4026 SetPixelOpacity(image,ClampToQuantum(pixel),q);
4027 p+=quantum_info->pad;
4028 q+=GetPixelChannels(image);
4032 for (x=0; x < (ssize_t) number_pixels; x++)
4034 p=PushLongPixel(quantum_info->endian,p,&pixel);
4035 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
4036 p=PushLongPixel(quantum_info->endian,p,&pixel);
4037 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
4038 p=PushLongPixel(quantum_info->endian,p,&pixel);
4039 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
4040 p=PushLongPixel(quantum_info->endian,p,&pixel);
4041 SetPixelOpacity(image,ScaleLongToQuantum(pixel),q);
4042 p+=quantum_info->pad;
4043 q+=GetPixelChannels(image);
4049 if (quantum_info->format == FloatingPointQuantumFormat)
4054 for (x=0; x < (ssize_t) number_pixels; x++)
4056 p=PushDoublePixel(quantum_info,p,&pixel);
4057 SetPixelRed(image,ClampToQuantum(pixel),q);
4058 p=PushDoublePixel(quantum_info,p,&pixel);
4059 SetPixelGreen(image,ClampToQuantum(pixel),q);
4060 p=PushDoublePixel(quantum_info,p,&pixel);
4061 SetPixelBlue(image,ClampToQuantum(pixel),q);
4062 p=PushDoublePixel(quantum_info,p,&pixel);
4063 SetPixelOpacity(image,ClampToQuantum(pixel),q);
4064 p+=quantum_info->pad;
4065 q+=GetPixelChannels(image);
4072 range=GetQuantumRange(quantum_info->depth);
4073 for (x=0; x < (ssize_t) number_pixels; x++)
4075 p=PushQuantumPixel(quantum_info,p,&pixel);
4076 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
4077 p=PushQuantumPixel(quantum_info,p,&pixel);
4078 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
4079 p=PushQuantumPixel(quantum_info,p,&pixel);
4080 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
4081 p=PushQuantumPixel(quantum_info,p,&pixel);
4082 SetPixelOpacity(image,ScaleAnyToQuantum(pixel,range),q);
4083 q+=GetPixelChannels(image);
4090 MagickExport size_t ImportQuantumPixels(const Image *image,
4091 CacheView *image_view,QuantumInfo *quantum_info,
4092 const QuantumType quantum_type,const unsigned char *restrict pixels,
4093 ExceptionInfo *exception)
4098 register const unsigned char
4110 assert(image != (Image *) NULL);
4111 assert(image->signature == MagickSignature);
4112 if (image->debug != MagickFalse)
4113 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
4114 assert(quantum_info != (QuantumInfo *) NULL);
4115 assert(quantum_info->signature == MagickSignature);
4116 if (pixels == (const unsigned char *) NULL)
4117 pixels=(const unsigned char *) GetQuantumPixels(quantum_info);
4120 if (image_view == (CacheView *) NULL)
4122 number_pixels=GetImageExtent(image);
4123 q=GetAuthenticPixelQueue(image);
4127 number_pixels=GetCacheViewExtent(image_view);
4128 q=GetCacheViewAuthenticPixelQueue(image_view);
4130 ResetQuantumState(quantum_info);
4131 extent=GetQuantumExtent(image,quantum_info,quantum_type);
4132 switch (quantum_type)
4136 ImportAlphaQuantum(image,quantum_info,number_pixels,p,q,exception);
4141 ImportBGRQuantum(image,quantum_info,number_pixels,p,q,exception);
4146 ImportBGRAQuantum(image,quantum_info,number_pixels,p,q,exception);
4151 ImportBGROQuantum(image,quantum_info,number_pixels,p,q,exception);
4156 ImportBlackQuantum(image,quantum_info,number_pixels,p,q,exception);
4162 ImportBlueQuantum(image,quantum_info,number_pixels,p,q,exception);
4167 ImportCMYKQuantum(image,quantum_info,number_pixels,p,q,exception);
4172 ImportCMYKAQuantum(image,quantum_info,number_pixels,p,q,exception);
4177 ImportCMYKOQuantum(image,quantum_info,number_pixels,p,q,exception);
4182 ImportCbYCrYQuantum(image,quantum_info,number_pixels,p,q,exception);
4187 ImportGrayQuantum(image,quantum_info,number_pixels,p,q,exception);
4190 case GrayAlphaQuantum:
4192 ImportGrayAlphaQuantum(image,quantum_info,number_pixels,p,q,exception);
4196 case MagentaQuantum:
4198 ImportGreenQuantum(image,quantum_info,number_pixels,p,q,exception);
4203 ImportIndexQuantum(image,quantum_info,number_pixels,p,q,exception);
4206 case IndexAlphaQuantum:
4208 ImportIndexAlphaQuantum(image,quantum_info,number_pixels,p,q,exception);
4211 case OpacityQuantum:
4213 ImportOpacityQuantum(image,quantum_info,number_pixels,p,q,exception);
4219 ImportRedQuantum(image,quantum_info,number_pixels,p,q,exception);
4225 ImportRGBQuantum(image,quantum_info,number_pixels,p,q,exception);
4231 ImportRGBAQuantum(image,quantum_info,number_pixels,p,q,exception);
4236 ImportRGBOQuantum(image,quantum_info,number_pixels,p,q,exception);
4242 if ((quantum_type == CbYCrQuantum) || (quantum_type == CbYCrAQuantum))
4250 q=GetAuthenticPixelQueue(image);
4251 if (image_view != (CacheView *) NULL)
4252 q=GetCacheViewAuthenticPixelQueue(image_view);
4253 for (x=0; x < (ssize_t) number_pixels; x++)
4255 quantum=GetPixelRed(image,q);
4256 SetPixelRed(image,GetPixelGreen(image,q),q);
4257 SetPixelGreen(image,quantum,q);
4258 q+=GetPixelChannels(image);
4261 if (quantum_info->alpha_type == DisassociatedQuantumAlpha)
4273 q=GetAuthenticPixelQueue(image);
4274 if (image_view != (CacheView *) NULL)
4275 q=GetCacheViewAuthenticPixelQueue(image_view);
4276 for (x=0; x < (ssize_t) number_pixels; x++)
4281 if (GetPixelReadMask(image,q) == 0)
4283 q+=GetPixelChannels(image);
4286 Sa=QuantumScale*GetPixelAlpha(image,q);
4287 gamma=PerceptibleReciprocal(Sa);
4288 for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
4290 PixelChannel channel=GetPixelChannelChannel(image,i);
4291 PixelTrait traits=GetPixelChannelTraits(image,channel);
4292 if ((channel == AlphaPixelChannel) ||
4293 ((traits & UpdatePixelTrait) == 0))
4295 q[i]=ClampToQuantum(gamma*q[i]);
4297 q+=GetPixelChannels(image);