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-2008 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/quantum.h"
66 #include "MagickCore/quantum-private.h"
67 #include "MagickCore/resource_.h"
68 #include "MagickCore/semaphore.h"
69 #include "MagickCore/statistic.h"
70 #include "MagickCore/stream.h"
71 #include "MagickCore/string_.h"
72 #include "MagickCore/utility.h"
75 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
79 % I m p o r t Q u a n t u m P i x e l s %
83 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
85 % ImportQuantumPixels() transfers one or more pixel components from a user
86 % supplied buffer into the image pixel cache of an image. The pixels are
87 % expected in network byte order. It returns MagickTrue if the pixels are
88 % successfully transferred, otherwise MagickFalse.
90 % The format of the ImportQuantumPixels method is:
92 % size_t ImportQuantumPixels(const Image *image,CacheView *image_view,
93 % QuantumInfo *quantum_info,const QuantumType quantum_type,
94 % const unsigned char *pixels,ExceptionInfo *exception)
96 % A description of each parameter follows:
100 % o image_view: the image cache view.
102 % o quantum_info: the quantum info.
104 % o quantum_type: Declare which pixel components to transfer (red, green,
105 % blue, opacity, RGB, or RGBA).
107 % o pixels: The pixel components are transferred from this buffer.
109 % o exception: return any errors or warnings in this structure.
113 static inline Quantum PushColormapIndex(const Image *image,const size_t index,
114 MagickBooleanType *range_exception)
116 if (index < image->colors)
117 return((Quantum) index);
118 *range_exception=MagickTrue;
122 static inline const unsigned char *PushDoublePixel(QuantumInfo *quantum_info,
123 const unsigned char *pixels,double *pixel)
131 if (quantum_info->endian != LSBEndian)
133 quantum[7]=(*pixels++);
134 quantum[6]=(*pixels++);
135 quantum[5]=(*pixels++);
136 quantum[5]=(*pixels++);
137 quantum[3]=(*pixels++);
138 quantum[2]=(*pixels++);
139 quantum[1]=(*pixels++);
140 quantum[0]=(*pixels++);
141 p=(double *) quantum;
143 *pixel-=quantum_info->minimum;
144 *pixel*=quantum_info->scale;
147 quantum[0]=(*pixels++);
148 quantum[1]=(*pixels++);
149 quantum[2]=(*pixels++);
150 quantum[3]=(*pixels++);
151 quantum[4]=(*pixels++);
152 quantum[5]=(*pixels++);
153 quantum[6]=(*pixels++);
154 quantum[7]=(*pixels++);
155 p=(double *) quantum;
157 *pixel-=quantum_info->minimum;
158 *pixel*=quantum_info->scale;
162 static inline const unsigned char *PushFloatPixel(QuantumInfo *quantum_info,
163 const unsigned char *pixels,float *pixel)
171 if (quantum_info->endian != LSBEndian)
173 quantum[3]=(*pixels++);
174 quantum[2]=(*pixels++);
175 quantum[1]=(*pixels++);
176 quantum[0]=(*pixels++);
179 *pixel-=quantum_info->minimum;
180 *pixel*=quantum_info->scale;
183 quantum[0]=(*pixels++);
184 quantum[1]=(*pixels++);
185 quantum[2]=(*pixels++);
186 quantum[3]=(*pixels++);
189 *pixel-=quantum_info->minimum;
190 *pixel*=quantum_info->scale;
194 static inline const unsigned char *PushQuantumPixel(QuantumInfo *quantum_info,
195 const unsigned char *pixels,unsigned int *quantum)
203 *quantum=(QuantumAny) 0;
204 for (i=(ssize_t) quantum_info->depth; i > 0L; )
206 if (quantum_info->state.bits == 0UL)
208 quantum_info->state.pixel=(*pixels++);
209 quantum_info->state.bits=8UL;
211 quantum_bits=(size_t) i;
212 if (quantum_bits > quantum_info->state.bits)
213 quantum_bits=quantum_info->state.bits;
214 i-=(ssize_t) quantum_bits;
215 quantum_info->state.bits-=quantum_bits;
216 *quantum=(unsigned int) ((*quantum << quantum_bits) |
217 ((quantum_info->state.pixel >> quantum_info->state.bits) &~ ((~0UL) <<
223 static inline const unsigned char *PushQuantumLongPixel(
224 QuantumInfo *quantum_info,const unsigned char *pixels,unsigned int *quantum)
233 for (i=(ssize_t) quantum_info->depth; i > 0; )
235 if (quantum_info->state.bits == 0)
237 pixels=PushLongPixel(quantum_info->endian,pixels,
238 &quantum_info->state.pixel);
239 quantum_info->state.bits=32U;
241 quantum_bits=(size_t) i;
242 if (quantum_bits > quantum_info->state.bits)
243 quantum_bits=quantum_info->state.bits;
244 *quantum|=(((quantum_info->state.pixel >> (32U-quantum_info->state.bits)) &
245 quantum_info->state.mask[quantum_bits]) << (quantum_info->depth-i));
246 i-=(ssize_t) quantum_bits;
247 quantum_info->state.bits-=quantum_bits;
252 static void ImportAlphaQuantum(const Image *image,QuantumInfo *quantum_info,
253 const MagickSizeType number_pixels,const unsigned char *restrict p,
254 Quantum *restrict q,ExceptionInfo *exception)
265 switch (quantum_info->depth)
272 for (x=0; x < (ssize_t) number_pixels; x++)
274 p=PushCharPixel(p,&pixel);
275 SetPixelAlpha(image,ScaleCharToQuantum(pixel),q);
276 p+=quantum_info->pad;
277 q+=GetPixelChannels(image);
286 if (quantum_info->format == FloatingPointQuantumFormat)
288 for (x=0; x < (ssize_t) number_pixels; x++)
290 p=PushShortPixel(quantum_info->endian,p,&pixel);
291 SetPixelAlpha(image,ClampToQuantum((MagickRealType) QuantumRange*
292 HalfToSinglePrecision(pixel)),q);
293 p+=quantum_info->pad;
294 q+=GetPixelChannels(image);
298 for (x=0; x < (ssize_t) number_pixels; x++)
300 p=PushShortPixel(quantum_info->endian,p,&pixel);
301 SetPixelAlpha(image,ScaleShortToQuantum(pixel),q);
302 p+=quantum_info->pad;
303 q+=GetPixelChannels(image);
312 if (quantum_info->format == FloatingPointQuantumFormat)
317 for (x=0; x < (ssize_t) number_pixels; x++)
319 p=PushFloatPixel(quantum_info,p,&pixel);
320 SetPixelAlpha(image,ClampToQuantum(pixel),q);
321 p+=quantum_info->pad;
322 q+=GetPixelChannels(image);
326 for (x=0; x < (ssize_t) number_pixels; x++)
328 p=PushLongPixel(quantum_info->endian,p,&pixel);
329 SetPixelAlpha(image,ScaleLongToQuantum(pixel),q);
330 p+=quantum_info->pad;
331 q+=GetPixelChannels(image);
337 if (quantum_info->format == FloatingPointQuantumFormat)
342 for (x=0; x < (ssize_t) number_pixels; x++)
344 p=PushDoublePixel(quantum_info,p,&pixel);
345 SetPixelAlpha(image,ClampToQuantum(pixel),q);
346 p+=quantum_info->pad;
347 q+=GetPixelChannels(image);
354 range=GetQuantumRange(quantum_info->depth);
355 for (x=0; x < (ssize_t) number_pixels; x++)
357 p=PushQuantumPixel(quantum_info,p,&pixel);
358 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
359 p+=quantum_info->pad;
360 q+=GetPixelChannels(image);
367 static void ImportBGRQuantum(const Image *image,QuantumInfo *quantum_info,
368 const MagickSizeType number_pixels,const unsigned char *restrict p,
369 Quantum *restrict q,ExceptionInfo *exception)
383 switch (quantum_info->depth)
390 for (x=0; x < (ssize_t) number_pixels; x++)
392 p=PushCharPixel(p,&pixel);
393 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
394 p=PushCharPixel(p,&pixel);
395 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
396 p=PushCharPixel(p,&pixel);
397 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
398 SetPixelAlpha(image,OpaqueAlpha,q);
399 p+=quantum_info->pad;
400 q+=GetPixelChannels(image);
406 range=GetQuantumRange(quantum_info->depth);
407 if (quantum_info->pack == MagickFalse)
409 for (x=0; x < (ssize_t) number_pixels; x++)
411 p=PushLongPixel(quantum_info->endian,p,&pixel);
412 SetPixelRed(image,ScaleAnyToQuantum((pixel >> 22) & 0x3ff,range),q);
413 SetPixelGreen(image,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,range),
415 SetPixelBlue(image,ScaleAnyToQuantum((pixel >> 2) & 0x3ff,range),q);
416 p+=quantum_info->pad;
417 q+=GetPixelChannels(image);
421 if (quantum_info->quantum == 32U)
423 for (x=0; x < (ssize_t) number_pixels; x++)
425 p=PushQuantumLongPixel(quantum_info,p,&pixel);
426 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
427 p=PushQuantumLongPixel(quantum_info,p,&pixel);
428 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
429 p=PushQuantumLongPixel(quantum_info,p,&pixel);
430 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
431 q+=GetPixelChannels(image);
435 for (x=0; x < (ssize_t) number_pixels; x++)
437 p=PushQuantumPixel(quantum_info,p,&pixel);
438 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
439 p=PushQuantumPixel(quantum_info,p,&pixel);
440 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
441 p=PushQuantumPixel(quantum_info,p,&pixel);
442 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
443 q+=GetPixelChannels(image);
449 range=GetQuantumRange(quantum_info->depth);
450 if (quantum_info->pack == MagickFalse)
455 for (x=0; x < (ssize_t) (3*number_pixels-1); x+=2)
457 p=PushShortPixel(quantum_info->endian,p,&pixel);
463 SetPixelRed(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
469 SetPixelGreen(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
475 SetPixelBlue(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
477 q+=GetPixelChannels(image);
481 p=PushShortPixel(quantum_info->endian,p,&pixel);
487 SetPixelRed(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
493 SetPixelGreen(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
499 SetPixelBlue(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
501 q+=GetPixelChannels(image);
505 p+=quantum_info->pad;
507 for (bit=0; bit < (ssize_t) (3*number_pixels % 2); bit++)
509 p=PushShortPixel(quantum_info->endian,p,&pixel);
515 SetPixelRed(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
521 SetPixelGreen(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
527 SetPixelBlue(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
529 q+=GetPixelChannels(image);
533 p+=quantum_info->pad;
539 if (quantum_info->quantum == 32U)
541 for (x=0; x < (ssize_t) number_pixels; x++)
543 p=PushQuantumLongPixel(quantum_info,p,&pixel);
544 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
545 p=PushQuantumLongPixel(quantum_info,p,&pixel);
546 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
547 p=PushQuantumLongPixel(quantum_info,p,&pixel);
548 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
549 q+=GetPixelChannels(image);
553 for (x=0; x < (ssize_t) number_pixels; x++)
555 p=PushQuantumPixel(quantum_info,p,&pixel);
556 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
557 p=PushQuantumPixel(quantum_info,p,&pixel);
558 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
559 p=PushQuantumPixel(quantum_info,p,&pixel);
560 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
561 q+=GetPixelChannels(image);
570 if (quantum_info->format == FloatingPointQuantumFormat)
572 for (x=0; x < (ssize_t) number_pixels; x++)
574 p=PushShortPixel(quantum_info->endian,p,&pixel);
575 SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
576 HalfToSinglePrecision(pixel)),q);
577 p=PushShortPixel(quantum_info->endian,p,&pixel);
578 SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
579 HalfToSinglePrecision(pixel)),q);
580 p=PushShortPixel(quantum_info->endian,p,&pixel);
581 SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
582 HalfToSinglePrecision(pixel)),q);
583 p+=quantum_info->pad;
584 q+=GetPixelChannels(image);
588 for (x=0; x < (ssize_t) number_pixels; x++)
590 p=PushShortPixel(quantum_info->endian,p,&pixel);
591 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
592 p=PushShortPixel(quantum_info->endian,p,&pixel);
593 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
594 p=PushShortPixel(quantum_info->endian,p,&pixel);
595 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
596 p+=quantum_info->pad;
597 q+=GetPixelChannels(image);
606 if (quantum_info->format == FloatingPointQuantumFormat)
611 for (x=0; x < (ssize_t) number_pixels; x++)
613 p=PushFloatPixel(quantum_info,p,&pixel);
614 SetPixelRed(image,ClampToQuantum(pixel),q);
615 p=PushFloatPixel(quantum_info,p,&pixel);
616 SetPixelGreen(image,ClampToQuantum(pixel),q);
617 p=PushFloatPixel(quantum_info,p,&pixel);
618 SetPixelBlue(image,ClampToQuantum(pixel),q);
619 p+=quantum_info->pad;
620 q+=GetPixelChannels(image);
624 for (x=0; x < (ssize_t) number_pixels; x++)
626 p=PushLongPixel(quantum_info->endian,p,&pixel);
627 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
628 p=PushLongPixel(quantum_info->endian,p,&pixel);
629 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
630 p=PushLongPixel(quantum_info->endian,p,&pixel);
631 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
632 p+=quantum_info->pad;
633 q+=GetPixelChannels(image);
639 if (quantum_info->format == FloatingPointQuantumFormat)
644 for (x=0; x < (ssize_t) number_pixels; x++)
646 p=PushDoublePixel(quantum_info,p,&pixel);
647 SetPixelRed(image,ClampToQuantum(pixel),q);
648 p=PushDoublePixel(quantum_info,p,&pixel);
649 SetPixelGreen(image,ClampToQuantum(pixel),q);
650 p=PushDoublePixel(quantum_info,p,&pixel);
651 SetPixelBlue(image,ClampToQuantum(pixel),q);
652 p+=quantum_info->pad;
653 q+=GetPixelChannels(image);
660 range=GetQuantumRange(quantum_info->depth);
661 for (x=0; x < (ssize_t) number_pixels; x++)
663 p=PushQuantumPixel(quantum_info,p,&pixel);
664 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
665 p=PushQuantumPixel(quantum_info,p,&pixel);
666 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
667 p=PushQuantumPixel(quantum_info,p,&pixel);
668 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
669 q+=GetPixelChannels(image);
676 static void ImportBGRAQuantum(const Image *image,QuantumInfo *quantum_info,
677 const MagickSizeType number_pixels,const unsigned char *restrict p,
678 Quantum *restrict q,ExceptionInfo *exception)
689 switch (quantum_info->depth)
696 for (x=0; x < (ssize_t) number_pixels; x++)
698 p=PushCharPixel(p,&pixel);
699 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
700 p=PushCharPixel(p,&pixel);
701 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
702 p=PushCharPixel(p,&pixel);
703 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
704 p=PushCharPixel(p,&pixel);
705 SetPixelAlpha(image,ScaleCharToQuantum(pixel),q);
706 p+=quantum_info->pad;
707 q+=GetPixelChannels(image);
714 if (quantum_info->pack == MagickFalse)
727 for (x=0; x < (ssize_t) number_pixels; x++)
729 for (i=0; i < 4; i++)
735 p=PushLongPixel(quantum_info->endian,p,&pixel);
736 quantum=(size_t) (ScaleShortToQuantum((unsigned short)
737 (((pixel >> 22) & 0x3ff) << 6)));
742 quantum=(size_t) (ScaleShortToQuantum((unsigned short)
743 (((pixel >> 12) & 0x3ff) << 6)));
748 quantum=(size_t) (ScaleShortToQuantum((unsigned short)
749 (((pixel >> 2) & 0x3ff) << 6)));
755 case 0: SetPixelRed(image,(Quantum) quantum,q); break;
756 case 1: SetPixelGreen(image,(Quantum) quantum,q); break;
757 case 2: SetPixelBlue(image,(Quantum) quantum,q); break;
758 case 3: SetPixelAlpha(image,(Quantum) quantum,q); break;
762 p+=quantum_info->pad;
763 q+=GetPixelChannels(image);
767 for (x=0; x < (ssize_t) number_pixels; x++)
769 p=PushQuantumPixel(quantum_info,p,&pixel);
770 SetPixelRed(image,ScaleShortToQuantum((unsigned short) (pixel << 6)),q);
771 p=PushQuantumPixel(quantum_info,p,&pixel);
772 SetPixelGreen(image,ScaleShortToQuantum((unsigned short) (pixel << 6)),
774 p=PushQuantumPixel(quantum_info,p,&pixel);
775 SetPixelBlue(image,ScaleShortToQuantum((unsigned short) (pixel << 6)),
777 p=PushQuantumPixel(quantum_info,p,&pixel);
778 SetPixelAlpha(image,ScaleShortToQuantum((unsigned short) (pixel << 6)),
780 q+=GetPixelChannels(image);
789 if (quantum_info->format == FloatingPointQuantumFormat)
791 for (x=0; x < (ssize_t) number_pixels; x++)
793 p=PushShortPixel(quantum_info->endian,p,&pixel);
794 SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
795 HalfToSinglePrecision(pixel)),q);
796 p=PushShortPixel(quantum_info->endian,p,&pixel);
797 SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
798 HalfToSinglePrecision(pixel)),q);
799 p=PushShortPixel(quantum_info->endian,p,&pixel);
800 SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
801 HalfToSinglePrecision(pixel)),q);
802 p=PushShortPixel(quantum_info->endian,p,&pixel);
803 SetPixelAlpha(image,ClampToQuantum((MagickRealType) QuantumRange*
804 HalfToSinglePrecision(pixel)),q);
805 p+=quantum_info->pad;
806 q+=GetPixelChannels(image);
810 for (x=0; x < (ssize_t) number_pixels; x++)
812 p=PushShortPixel(quantum_info->endian,p,&pixel);
813 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
814 p=PushShortPixel(quantum_info->endian,p,&pixel);
815 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
816 p=PushShortPixel(quantum_info->endian,p,&pixel);
817 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
818 p=PushShortPixel(quantum_info->endian,p,&pixel);
819 SetPixelAlpha(image,ScaleShortToQuantum(pixel),q);
820 p+=quantum_info->pad;
821 q+=GetPixelChannels(image);
830 if (quantum_info->format == FloatingPointQuantumFormat)
835 for (x=0; x < (ssize_t) number_pixels; x++)
837 p=PushFloatPixel(quantum_info,p,&pixel);
838 SetPixelRed(image,ClampToQuantum(pixel),q);
839 p=PushFloatPixel(quantum_info,p,&pixel);
840 SetPixelGreen(image,ClampToQuantum(pixel),q);
841 p=PushFloatPixel(quantum_info,p,&pixel);
842 SetPixelBlue(image,ClampToQuantum(pixel),q);
843 p=PushFloatPixel(quantum_info,p,&pixel);
844 SetPixelAlpha(image,ClampToQuantum(pixel),q);
845 p+=quantum_info->pad;
846 q+=GetPixelChannels(image);
850 for (x=0; x < (ssize_t) number_pixels; x++)
852 p=PushLongPixel(quantum_info->endian,p,&pixel);
853 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
854 p=PushLongPixel(quantum_info->endian,p,&pixel);
855 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
856 p=PushLongPixel(quantum_info->endian,p,&pixel);
857 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
858 p=PushLongPixel(quantum_info->endian,p,&pixel);
859 SetPixelAlpha(image,ScaleLongToQuantum(pixel),q);
860 p+=quantum_info->pad;
861 q+=GetPixelChannels(image);
867 if (quantum_info->format == FloatingPointQuantumFormat)
872 for (x=0; x < (ssize_t) number_pixels; x++)
874 p=PushDoublePixel(quantum_info,p,&pixel);
875 SetPixelRed(image,ClampToQuantum(pixel),q);
876 p=PushDoublePixel(quantum_info,p,&pixel);
877 SetPixelGreen(image,ClampToQuantum(pixel),q);
878 p=PushDoublePixel(quantum_info,p,&pixel);
879 SetPixelBlue(image,ClampToQuantum(pixel),q);
880 p=PushDoublePixel(quantum_info,p,&pixel);
881 SetPixelAlpha(image,ClampToQuantum(pixel),q);
882 p+=quantum_info->pad;
883 q+=GetPixelChannels(image);
890 range=GetQuantumRange(quantum_info->depth);
891 for (x=0; x < (ssize_t) number_pixels; x++)
893 p=PushQuantumPixel(quantum_info,p,&pixel);
894 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
895 p=PushQuantumPixel(quantum_info,p,&pixel);
896 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
897 p=PushQuantumPixel(quantum_info,p,&pixel);
898 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
899 p=PushQuantumPixel(quantum_info,p,&pixel);
900 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
901 q+=GetPixelChannels(image);
908 static void ImportBlackQuantum(const Image *image,QuantumInfo *quantum_info,
909 const MagickSizeType number_pixels,const unsigned char *restrict p,
910 Quantum *restrict q,ExceptionInfo *exception)
921 if (image->colorspace != CMYKColorspace)
923 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
924 "ColorSeparatedImageRequired","'%s'",image->filename);
927 switch (quantum_info->depth)
934 for (x=0; x < (ssize_t) number_pixels; x++)
936 p=PushCharPixel(p,&pixel);
937 SetPixelBlack(image,ScaleCharToQuantum(pixel),q);
938 p+=quantum_info->pad;
939 q+=GetPixelChannels(image);
948 if (quantum_info->format == FloatingPointQuantumFormat)
950 for (x=0; x < (ssize_t) number_pixels; x++)
952 p=PushShortPixel(quantum_info->endian,p,&pixel);
953 SetPixelBlack(image,ClampToQuantum((MagickRealType) QuantumRange*
954 HalfToSinglePrecision(pixel)),q);
955 p+=quantum_info->pad;
956 q+=GetPixelChannels(image);
960 for (x=0; x < (ssize_t) number_pixels; x++)
962 p=PushShortPixel(quantum_info->endian,p,&pixel);
963 SetPixelBlack(image,ScaleShortToQuantum(pixel),q);
964 p+=quantum_info->pad;
965 q+=GetPixelChannels(image);
974 if (quantum_info->format == FloatingPointQuantumFormat)
979 for (x=0; x < (ssize_t) number_pixels; x++)
981 p=PushFloatPixel(quantum_info,p,&pixel);
982 SetPixelBlack(image,ClampToQuantum(pixel),q);
983 p+=quantum_info->pad;
984 q+=GetPixelChannels(image);
988 for (x=0; x < (ssize_t) number_pixels; x++)
990 p=PushLongPixel(quantum_info->endian,p,&pixel);
991 SetPixelBlack(image,ScaleLongToQuantum(pixel),q);
992 p+=quantum_info->pad;
993 q+=GetPixelChannels(image);
999 if (quantum_info->format == FloatingPointQuantumFormat)
1004 for (x=0; x < (ssize_t) number_pixels; x++)
1006 p=PushDoublePixel(quantum_info,p,&pixel);
1007 SetPixelBlack(image,ClampToQuantum(pixel),q);
1008 p+=quantum_info->pad;
1009 q+=GetPixelChannels(image);
1016 range=GetQuantumRange(quantum_info->depth);
1017 for (x=0; x < (ssize_t) number_pixels; x++)
1019 p=PushQuantumPixel(quantum_info,p,&pixel);
1020 SetPixelBlack(image,ScaleAnyToQuantum(pixel,range),q);
1021 p+=quantum_info->pad;
1022 q+=GetPixelChannels(image);
1029 static void ImportBlueQuantum(const Image *image,QuantumInfo *quantum_info,
1030 const MagickSizeType number_pixels,const unsigned char *restrict p,
1031 Quantum *restrict q,ExceptionInfo *exception)
1042 switch (quantum_info->depth)
1049 for (x=0; x < (ssize_t) number_pixels; x++)
1051 p=PushCharPixel(p,&pixel);
1052 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
1053 p+=quantum_info->pad;
1054 q+=GetPixelChannels(image);
1063 if (quantum_info->format == FloatingPointQuantumFormat)
1065 for (x=0; x < (ssize_t) number_pixels; x++)
1067 p=PushShortPixel(quantum_info->endian,p,&pixel);
1068 SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
1069 HalfToSinglePrecision(pixel)),q);
1070 p+=quantum_info->pad;
1071 q+=GetPixelChannels(image);
1075 for (x=0; x < (ssize_t) number_pixels; x++)
1077 p=PushShortPixel(quantum_info->endian,p,&pixel);
1078 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
1079 p+=quantum_info->pad;
1080 q+=GetPixelChannels(image);
1089 if (quantum_info->format == FloatingPointQuantumFormat)
1094 for (x=0; x < (ssize_t) number_pixels; x++)
1096 p=PushFloatPixel(quantum_info,p,&pixel);
1097 SetPixelBlue(image,ClampToQuantum(pixel),q);
1098 p+=quantum_info->pad;
1099 q+=GetPixelChannels(image);
1103 for (x=0; x < (ssize_t) number_pixels; x++)
1105 p=PushLongPixel(quantum_info->endian,p,&pixel);
1106 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
1107 p+=quantum_info->pad;
1108 q+=GetPixelChannels(image);
1114 if (quantum_info->format == FloatingPointQuantumFormat)
1119 for (x=0; x < (ssize_t) number_pixels; x++)
1121 p=PushDoublePixel(quantum_info,p,&pixel);
1122 SetPixelBlue(image,ClampToQuantum(pixel),q);
1123 p+=quantum_info->pad;
1124 q+=GetPixelChannels(image);
1131 range=GetQuantumRange(quantum_info->depth);
1132 for (x=0; x < (ssize_t) number_pixels; x++)
1134 p=PushQuantumPixel(quantum_info,p,&pixel);
1135 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
1136 p+=quantum_info->pad;
1137 q+=GetPixelChannels(image);
1144 static void ImportCbYCrYQuantum(const Image *image,QuantumInfo *quantum_info,
1145 const MagickSizeType number_pixels,const unsigned char *restrict p,
1146 Quantum *restrict q,ExceptionInfo *exception)
1157 switch (quantum_info->depth)
1165 if (quantum_info->pack == MagickFalse)
1178 for (x=0; x < (ssize_t) number_pixels; x+=2)
1180 for (i=0; i < 4; i++)
1186 p=PushLongPixel(quantum_info->endian,p,&pixel);
1187 quantum=(size_t) (ScaleShortToQuantum((unsigned short)
1188 (((pixel >> 22) & 0x3ff) << 6)));
1193 quantum=(size_t) (ScaleShortToQuantum((unsigned short)
1194 (((pixel >> 12) & 0x3ff) << 6)));
1199 quantum=(size_t) (ScaleShortToQuantum((unsigned short)
1200 (((pixel >> 2) & 0x3ff) << 6)));
1204 cbcr[i]=(Quantum) (quantum);
1207 p+=quantum_info->pad;
1208 SetPixelRed(image,cbcr[1],q);
1209 SetPixelGreen(image,cbcr[0],q);
1210 SetPixelBlue(image,cbcr[2],q);
1211 q+=GetPixelChannels(image);
1212 SetPixelRed(image,cbcr[3],q);
1213 SetPixelGreen(image,cbcr[0],q);
1214 SetPixelBlue(image,cbcr[2],q);
1215 q+=GetPixelChannels(image);
1222 range=GetQuantumRange(quantum_info->depth);
1223 for (x=0; x < (ssize_t) number_pixels; x++)
1225 p=PushQuantumPixel(quantum_info,p,&pixel);
1226 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
1227 p=PushQuantumPixel(quantum_info,p,&pixel);
1228 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
1229 q+=GetPixelChannels(image);
1236 static void ImportCMYKQuantum(const Image *image,QuantumInfo *quantum_info,
1237 const MagickSizeType number_pixels,const unsigned char *restrict p,
1238 Quantum *restrict q,ExceptionInfo *exception)
1249 if (image->colorspace != CMYKColorspace)
1251 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1252 "ColorSeparatedImageRequired","'%s'",image->filename);
1255 switch (quantum_info->depth)
1262 for (x=0; x < (ssize_t) number_pixels; x++)
1264 p=PushCharPixel(p,&pixel);
1265 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
1266 p=PushCharPixel(p,&pixel);
1267 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
1268 p=PushCharPixel(p,&pixel);
1269 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
1270 p=PushCharPixel(p,&pixel);
1271 SetPixelBlack(image,ScaleCharToQuantum(pixel),q);
1272 p+=quantum_info->pad;
1273 q+=GetPixelChannels(image);
1282 if (quantum_info->format == FloatingPointQuantumFormat)
1284 for (x=0; x < (ssize_t) number_pixels; x++)
1286 p=PushShortPixel(quantum_info->endian,p,&pixel);
1287 SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
1288 HalfToSinglePrecision(pixel)),q);
1289 p=PushShortPixel(quantum_info->endian,p,&pixel);
1290 SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
1291 HalfToSinglePrecision(pixel)),q);
1292 p=PushShortPixel(quantum_info->endian,p,&pixel);
1293 SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
1294 HalfToSinglePrecision(pixel)),q);
1295 p=PushShortPixel(quantum_info->endian,p,&pixel);
1296 SetPixelBlack(image,ClampToQuantum((MagickRealType) QuantumRange*
1297 HalfToSinglePrecision(pixel)),q);
1298 p+=quantum_info->pad;
1299 q+=GetPixelChannels(image);
1303 for (x=0; x < (ssize_t) number_pixels; x++)
1305 p=PushShortPixel(quantum_info->endian,p,&pixel);
1306 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
1307 p=PushShortPixel(quantum_info->endian,p,&pixel);
1308 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
1309 p=PushShortPixel(quantum_info->endian,p,&pixel);
1310 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
1311 p=PushShortPixel(quantum_info->endian,p,&pixel);
1312 SetPixelBlack(image,ScaleShortToQuantum(pixel),q);
1313 p+=quantum_info->pad;
1314 q+=GetPixelChannels(image);
1323 if (quantum_info->format == FloatingPointQuantumFormat)
1328 for (x=0; x < (ssize_t) number_pixels; x++)
1330 p=PushFloatPixel(quantum_info,p,&pixel);
1331 SetPixelRed(image,ClampToQuantum(pixel),q);
1332 p=PushFloatPixel(quantum_info,p,&pixel);
1333 SetPixelGreen(image,ClampToQuantum(pixel),q);
1334 p=PushFloatPixel(quantum_info,p,&pixel);
1335 SetPixelBlue(image,ClampToQuantum(pixel),q);
1336 p=PushFloatPixel(quantum_info,p,&pixel);
1337 SetPixelBlack(image,ClampToQuantum(pixel),q);
1338 p+=quantum_info->pad;
1339 q+=GetPixelChannels(image);
1343 for (x=0; x < (ssize_t) number_pixels; x++)
1345 p=PushLongPixel(quantum_info->endian,p,&pixel);
1346 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
1347 p=PushLongPixel(quantum_info->endian,p,&pixel);
1348 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
1349 p=PushLongPixel(quantum_info->endian,p,&pixel);
1350 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
1351 p=PushLongPixel(quantum_info->endian,p,&pixel);
1352 SetPixelBlack(image,ScaleLongToQuantum(pixel),q);
1353 p+=quantum_info->pad;
1354 q+=GetPixelChannels(image);
1360 if (quantum_info->format == FloatingPointQuantumFormat)
1365 for (x=0; x < (ssize_t) number_pixels; x++)
1367 p=PushDoublePixel(quantum_info,p,&pixel);
1368 SetPixelRed(image,ClampToQuantum(pixel),q);
1369 p=PushDoublePixel(quantum_info,p,&pixel);
1370 SetPixelGreen(image,ClampToQuantum(pixel),q);
1371 p=PushDoublePixel(quantum_info,p,&pixel);
1372 SetPixelBlue(image,ClampToQuantum(pixel),q);
1373 p=PushDoublePixel(quantum_info,p,&pixel);
1374 SetPixelBlack(image,ClampToQuantum(pixel),q);
1375 p+=quantum_info->pad;
1376 q+=GetPixelChannels(image);
1383 range=GetQuantumRange(quantum_info->depth);
1384 for (x=0; x < (ssize_t) number_pixels; x++)
1386 p=PushQuantumPixel(quantum_info,p,&pixel);
1387 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
1388 p=PushQuantumPixel(quantum_info,p,&pixel);
1389 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
1390 p=PushQuantumPixel(quantum_info,p,&pixel);
1391 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
1392 p=PushQuantumPixel(quantum_info,p,&pixel);
1393 SetPixelBlack(image,ScaleAnyToQuantum(pixel,range),q);
1394 q+=GetPixelChannels(image);
1401 static void ImportCMYKAQuantum(const Image *image,QuantumInfo *quantum_info,
1402 const MagickSizeType number_pixels,const unsigned char *restrict p,
1403 Quantum *restrict q,ExceptionInfo *exception)
1414 if (image->colorspace != CMYKColorspace)
1416 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1417 "ColorSeparatedImageRequired","'%s'",image->filename);
1420 switch (quantum_info->depth)
1427 for (x=0; x < (ssize_t) number_pixels; x++)
1429 p=PushCharPixel(p,&pixel);
1430 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
1431 p=PushCharPixel(p,&pixel);
1432 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
1433 p=PushCharPixel(p,&pixel);
1434 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
1435 p=PushCharPixel(p,&pixel);
1436 SetPixelBlack(image,ScaleCharToQuantum(pixel),q);
1437 p=PushCharPixel(p,&pixel);
1438 SetPixelAlpha(image,ScaleCharToQuantum(pixel),q);
1439 p+=quantum_info->pad;
1440 q+=GetPixelChannels(image);
1449 if (quantum_info->format == FloatingPointQuantumFormat)
1451 for (x=0; x < (ssize_t) number_pixels; x++)
1453 p=PushShortPixel(quantum_info->endian,p,&pixel);
1454 SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
1455 HalfToSinglePrecision(pixel)),q);
1456 p=PushShortPixel(quantum_info->endian,p,&pixel);
1457 SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
1458 HalfToSinglePrecision(pixel)),q);
1459 p=PushShortPixel(quantum_info->endian,p,&pixel);
1460 SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
1461 HalfToSinglePrecision(pixel)),q);
1462 p=PushShortPixel(quantum_info->endian,p,&pixel);
1463 SetPixelBlack(image,ClampToQuantum((MagickRealType) QuantumRange*
1464 HalfToSinglePrecision(pixel)),q);
1465 p=PushShortPixel(quantum_info->endian,p,&pixel);
1466 SetPixelAlpha(image,ClampToQuantum((MagickRealType) QuantumRange*
1467 HalfToSinglePrecision(pixel)),q);
1468 p+=quantum_info->pad;
1469 q+=GetPixelChannels(image);
1473 for (x=0; x < (ssize_t) number_pixels; x++)
1475 p=PushShortPixel(quantum_info->endian,p,&pixel);
1476 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
1477 p=PushShortPixel(quantum_info->endian,p,&pixel);
1478 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
1479 p=PushShortPixel(quantum_info->endian,p,&pixel);
1480 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
1481 p=PushShortPixel(quantum_info->endian,p,&pixel);
1482 SetPixelBlack(image,ScaleShortToQuantum(pixel),q);
1483 p=PushShortPixel(quantum_info->endian,p,&pixel);
1484 SetPixelAlpha(image,ScaleShortToQuantum(pixel),q);
1485 p+=quantum_info->pad;
1486 q+=GetPixelChannels(image);
1495 if (quantum_info->format == FloatingPointQuantumFormat)
1500 for (x=0; x < (ssize_t) number_pixels; x++)
1502 p=PushFloatPixel(quantum_info,p,&pixel);
1503 SetPixelRed(image,ClampToQuantum(pixel),q);
1504 p=PushFloatPixel(quantum_info,p,&pixel);
1505 SetPixelGreen(image,ClampToQuantum(pixel),q);
1506 p=PushFloatPixel(quantum_info,p,&pixel);
1507 SetPixelBlue(image,ClampToQuantum(pixel),q);
1508 p=PushFloatPixel(quantum_info,p,&pixel);
1509 SetPixelBlack(image,ClampToQuantum(pixel),q);
1510 p=PushFloatPixel(quantum_info,p,&pixel);
1511 SetPixelAlpha(image,ClampToQuantum(pixel),q);
1512 p+=quantum_info->pad;
1513 q+=GetPixelChannels(image);
1517 for (x=0; x < (ssize_t) number_pixels; x++)
1519 p=PushLongPixel(quantum_info->endian,p,&pixel);
1520 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
1521 p=PushLongPixel(quantum_info->endian,p,&pixel);
1522 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
1523 p=PushLongPixel(quantum_info->endian,p,&pixel);
1524 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
1525 p=PushLongPixel(quantum_info->endian,p,&pixel);
1526 SetPixelBlack(image,ScaleLongToQuantum(pixel),q);
1527 p=PushLongPixel(quantum_info->endian,p,&pixel);
1528 SetPixelAlpha(image,ScaleLongToQuantum(pixel),q);
1529 p+=quantum_info->pad;
1530 q+=GetPixelChannels(image);
1536 if (quantum_info->format == FloatingPointQuantumFormat)
1541 for (x=0; x < (ssize_t) number_pixels; x++)
1543 p=PushDoublePixel(quantum_info,p,&pixel);
1544 SetPixelRed(image,ClampToQuantum(pixel),q);
1545 p=PushDoublePixel(quantum_info,p,&pixel);
1546 SetPixelGreen(image,ClampToQuantum(pixel),q);
1547 p=PushDoublePixel(quantum_info,p,&pixel);
1548 SetPixelBlue(image,ClampToQuantum(pixel),q);
1549 p=PushDoublePixel(quantum_info,p,&pixel);
1550 SetPixelBlack(image,ClampToQuantum(pixel),q);
1551 p=PushDoublePixel(quantum_info,p,&pixel);
1552 SetPixelAlpha(image,ClampToQuantum(pixel),q);
1553 p=PushDoublePixel(quantum_info,p,&pixel);
1554 p+=quantum_info->pad;
1555 q+=GetPixelChannels(image);
1562 range=GetQuantumRange(quantum_info->depth);
1563 for (x=0; x < (ssize_t) number_pixels; x++)
1565 p=PushQuantumPixel(quantum_info,p,&pixel);
1566 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
1567 p=PushQuantumPixel(quantum_info,p,&pixel);
1568 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
1569 p=PushQuantumPixel(quantum_info,p,&pixel);
1570 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
1571 p=PushQuantumPixel(quantum_info,p,&pixel);
1572 SetPixelBlack(image,ScaleAnyToQuantum(pixel,range),q);
1573 p=PushQuantumPixel(quantum_info,p,&pixel);
1574 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
1575 q+=GetPixelChannels(image);
1582 static void ImportGrayQuantum(const Image *image,QuantumInfo *quantum_info,
1583 const MagickSizeType number_pixels,const unsigned char *restrict p,
1584 Quantum *restrict q,ExceptionInfo *exception)
1598 switch (quantum_info->depth)
1607 white=(Quantum) QuantumRange;
1608 if (quantum_info->min_is_white != MagickFalse)
1610 black=(Quantum) QuantumRange;
1613 for (x=0; x < ((ssize_t) number_pixels-7); x+=8)
1615 for (bit=0; bit < 8; bit++)
1617 SetPixelGray(image,((*p) & (1 << (7-bit))) == 0 ? black : white,q);
1618 q+=GetPixelChannels(image);
1622 for (bit=0; bit < (ssize_t) (number_pixels % 8); bit++)
1624 SetPixelGray(image,((*p) & (0x01 << (7-bit))) == 0 ? black : white,q);
1625 q+=GetPixelChannels(image);
1633 register unsigned char
1636 range=GetQuantumRange(quantum_info->depth);
1637 for (x=0; x < ((ssize_t) number_pixels-1); x+=2)
1639 pixel=(unsigned char) ((*p >> 4) & 0xf);
1640 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
1641 q+=GetPixelChannels(image);
1642 pixel=(unsigned char) ((*p) & 0xf);
1643 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
1645 q+=GetPixelChannels(image);
1647 for (bit=0; bit < (ssize_t) (number_pixels % 2); bit++)
1649 pixel=(unsigned char) (*p++ >> 4);
1650 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
1651 q+=GetPixelChannels(image);
1660 if (quantum_info->min_is_white != MagickFalse)
1662 for (x=0; x < (ssize_t) number_pixels; x++)
1664 p=PushCharPixel(p,&pixel);
1665 SetPixelGray(image,ScaleCharToQuantum(pixel),q);
1666 SetPixelAlpha(image,OpaqueAlpha,q);
1667 p+=quantum_info->pad;
1668 q+=GetPixelChannels(image);
1672 for (x=0; x < (ssize_t) number_pixels; x++)
1674 p=PushCharPixel(p,&pixel);
1675 SetPixelGray(image,ScaleCharToQuantum(pixel),q);
1676 SetPixelAlpha(image,OpaqueAlpha,q);
1677 p+=quantum_info->pad;
1678 q+=GetPixelChannels(image);
1684 range=GetQuantumRange(quantum_info->depth);
1685 if (quantum_info->pack == MagickFalse)
1687 if (image->endian != LSBEndian)
1689 for (x=0; x < (ssize_t) (number_pixels-2); x+=3)
1691 p=PushLongPixel(quantum_info->endian,p,&pixel);
1692 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 2) & 0x3ff,
1694 q+=GetPixelChannels(image);
1695 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,
1697 q+=GetPixelChannels(image);
1698 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 22) & 0x3ff,
1700 p+=quantum_info->pad;
1701 q+=GetPixelChannels(image);
1703 p=PushLongPixel(quantum_info->endian,p,&pixel);
1704 if (x++ < (ssize_t) (number_pixels-1))
1706 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 2) & 0x3ff,
1708 q+=GetPixelChannels(image);
1710 if (x++ < (ssize_t) number_pixels)
1712 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,
1714 q+=GetPixelChannels(image);
1718 for (x=0; x < (ssize_t) (number_pixels-2); x+=3)
1720 p=PushLongPixel(quantum_info->endian,p,&pixel);
1721 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 22) & 0x3ff,range),
1723 q+=GetPixelChannels(image);
1724 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,range),
1726 q+=GetPixelChannels(image);
1727 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 2) & 0x3ff,range),
1729 p+=quantum_info->pad;
1730 q+=GetPixelChannels(image);
1732 p=PushLongPixel(quantum_info->endian,p,&pixel);
1733 if (x++ < (ssize_t) (number_pixels-1))
1735 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 22) & 0x3ff,range),
1737 q+=GetPixelChannels(image);
1739 if (x++ < (ssize_t) number_pixels)
1741 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,range),
1743 q+=GetPixelChannels(image);
1747 for (x=0; x < (ssize_t) number_pixels; x++)
1749 p=PushQuantumPixel(quantum_info,p,&pixel);
1750 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
1751 p+=quantum_info->pad;
1752 q+=GetPixelChannels(image);
1758 range=GetQuantumRange(quantum_info->depth);
1759 if (quantum_info->pack == MagickFalse)
1764 for (x=0; x < (ssize_t) (number_pixels-1); x+=2)
1766 p=PushShortPixel(quantum_info->endian,p,&pixel);
1767 SetPixelGray(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
1769 q+=GetPixelChannels(image);
1770 p=PushShortPixel(quantum_info->endian,p,&pixel);
1771 SetPixelGray(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
1773 p+=quantum_info->pad;
1774 q+=GetPixelChannels(image);
1776 for (bit=0; bit < (ssize_t) (number_pixels % 2); bit++)
1778 p=PushShortPixel(quantum_info->endian,p,&pixel);
1779 SetPixelGray(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
1781 p+=quantum_info->pad;
1782 q+=GetPixelChannels(image);
1788 for (x=0; x < (ssize_t) number_pixels; x++)
1790 p=PushQuantumPixel(quantum_info,p,&pixel);
1791 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
1792 p+=quantum_info->pad;
1793 q+=GetPixelChannels(image);
1802 if (quantum_info->min_is_white != MagickFalse)
1804 for (x=0; x < (ssize_t) number_pixels; x++)
1806 p=PushShortPixel(quantum_info->endian,p,&pixel);
1807 SetPixelGray(image,ScaleShortToQuantum(pixel),q);
1808 p+=quantum_info->pad;
1809 q+=GetPixelChannels(image);
1813 if (quantum_info->format == FloatingPointQuantumFormat)
1815 for (x=0; x < (ssize_t) number_pixels; x++)
1817 p=PushShortPixel(quantum_info->endian,p,&pixel);
1818 SetPixelGray(image,ClampToQuantum((MagickRealType) QuantumRange*
1819 HalfToSinglePrecision(pixel)),q);
1820 p+=quantum_info->pad;
1821 q+=GetPixelChannels(image);
1825 for (x=0; x < (ssize_t) number_pixels; x++)
1827 p=PushShortPixel(quantum_info->endian,p,&pixel);
1828 SetPixelGray(image,ScaleShortToQuantum(pixel),q);
1829 p+=quantum_info->pad;
1830 q+=GetPixelChannels(image);
1839 if (quantum_info->format == FloatingPointQuantumFormat)
1844 for (x=0; x < (ssize_t) number_pixels; x++)
1846 p=PushFloatPixel(quantum_info,p,&pixel);
1847 SetPixelGray(image,ClampToQuantum(pixel),q);
1848 p+=quantum_info->pad;
1849 q+=GetPixelChannels(image);
1853 for (x=0; x < (ssize_t) number_pixels; x++)
1855 p=PushLongPixel(quantum_info->endian,p,&pixel);
1856 SetPixelGray(image,ScaleLongToQuantum(pixel),q);
1857 p+=quantum_info->pad;
1858 q+=GetPixelChannels(image);
1864 if (quantum_info->format == FloatingPointQuantumFormat)
1869 for (x=0; x < (ssize_t) number_pixels; x++)
1871 p=PushDoublePixel(quantum_info,p,&pixel);
1872 SetPixelGray(image,ClampToQuantum(pixel),q);
1873 p+=quantum_info->pad;
1874 q+=GetPixelChannels(image);
1881 range=GetQuantumRange(quantum_info->depth);
1882 for (x=0; x < (ssize_t) number_pixels; x++)
1884 p=PushQuantumPixel(quantum_info,p,&pixel);
1885 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
1886 p+=quantum_info->pad;
1887 q+=GetPixelChannels(image);
1894 static void ImportGrayAlphaQuantum(const Image *image,QuantumInfo *quantum_info,
1895 const MagickSizeType number_pixels,const unsigned char *restrict p,
1896 Quantum *restrict q,ExceptionInfo *exception)
1910 switch (quantum_info->depth)
1914 register unsigned char
1917 for (x=((ssize_t) number_pixels-3); x > 0; x-=4)
1919 for (bit=0; bit < 8; bit+=2)
1921 pixel=(unsigned char) (((*p) & (1 << (7-bit))) != 0 ? 0x00 : 0x01);
1922 SetPixelGray(image,(Quantum) (pixel == 0 ? 0 : QuantumRange),q);
1923 SetPixelAlpha(image,((*p) & (1UL << (unsigned char) (6-bit))) == 0 ?
1924 TransparentAlpha : OpaqueAlpha,q);
1925 q+=GetPixelChannels(image);
1929 if ((number_pixels % 4) != 0)
1930 for (bit=3; bit >= (ssize_t) (4-(number_pixels % 4)); bit-=2)
1932 pixel=(unsigned char) (((*p) & (1 << (7-bit))) != 0 ? 0x00 : 0x01);
1933 SetPixelGray(image,(Quantum) (pixel != 0 ? 0 : QuantumRange),q);
1934 SetPixelAlpha(image,((*p) & (1UL << (unsigned char) (6-bit))) == 0 ?
1935 TransparentAlpha : OpaqueAlpha,q);
1936 q+=GetPixelChannels(image);
1944 register unsigned char
1947 range=GetQuantumRange(quantum_info->depth);
1948 for (x=0; x < (ssize_t) number_pixels; x++)
1950 pixel=(unsigned char) ((*p >> 4) & 0xf);
1951 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
1952 pixel=(unsigned char) ((*p) & 0xf);
1953 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
1955 q+=GetPixelChannels(image);
1964 for (x=0; x < (ssize_t) number_pixels; x++)
1966 p=PushCharPixel(p,&pixel);
1967 SetPixelGray(image,ScaleCharToQuantum(pixel),q);
1968 p=PushCharPixel(p,&pixel);
1969 SetPixelAlpha(image,ScaleCharToQuantum(pixel),q);
1970 p+=quantum_info->pad;
1971 q+=GetPixelChannels(image);
1977 range=GetQuantumRange(quantum_info->depth);
1978 for (x=0; x < (ssize_t) number_pixels; x++)
1980 p=PushQuantumPixel(quantum_info,p,&pixel);
1981 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
1982 p=PushQuantumPixel(quantum_info,p,&pixel);
1983 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
1984 p+=quantum_info->pad;
1985 q+=GetPixelChannels(image);
1991 range=GetQuantumRange(quantum_info->depth);
1992 for (x=0; x < (ssize_t) number_pixels; x++)
1994 p=PushQuantumPixel(quantum_info,p,&pixel);
1995 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
1996 p=PushQuantumPixel(quantum_info,p,&pixel);
1997 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
1998 p+=quantum_info->pad;
1999 q+=GetPixelChannels(image);
2008 if (quantum_info->format == FloatingPointQuantumFormat)
2010 for (x=0; x < (ssize_t) number_pixels; x++)
2012 p=PushShortPixel(quantum_info->endian,p,&pixel);
2013 SetPixelGray(image,ClampToQuantum((MagickRealType) QuantumRange*
2014 HalfToSinglePrecision(pixel)),q);
2015 p=PushShortPixel(quantum_info->endian,p,&pixel);
2016 SetPixelAlpha(image,ClampToQuantum((MagickRealType) QuantumRange*
2017 HalfToSinglePrecision(pixel)),q);
2018 p+=quantum_info->pad;
2019 q+=GetPixelChannels(image);
2023 for (x=0; x < (ssize_t) number_pixels; x++)
2025 p=PushShortPixel(quantum_info->endian,p,&pixel);
2026 SetPixelGray(image,ScaleShortToQuantum(pixel),q);
2027 p=PushShortPixel(quantum_info->endian,p,&pixel);
2028 SetPixelAlpha(image,ScaleShortToQuantum(pixel),q);
2029 p+=quantum_info->pad;
2030 q+=GetPixelChannels(image);
2039 if (quantum_info->format == FloatingPointQuantumFormat)
2044 for (x=0; x < (ssize_t) number_pixels; x++)
2046 p=PushFloatPixel(quantum_info,p,&pixel);
2047 SetPixelGray(image,ClampToQuantum(pixel),q);
2048 p=PushFloatPixel(quantum_info,p,&pixel);
2049 SetPixelAlpha(image,ClampToQuantum(pixel),q);
2050 p+=quantum_info->pad;
2051 q+=GetPixelChannels(image);
2055 for (x=0; x < (ssize_t) number_pixels; x++)
2057 p=PushLongPixel(quantum_info->endian,p,&pixel);
2058 SetPixelGray(image,ScaleLongToQuantum(pixel),q);
2059 p=PushLongPixel(quantum_info->endian,p,&pixel);
2060 SetPixelAlpha(image,ScaleLongToQuantum(pixel),q);
2061 p+=quantum_info->pad;
2062 q+=GetPixelChannels(image);
2068 if (quantum_info->format == FloatingPointQuantumFormat)
2073 for (x=0; x < (ssize_t) number_pixels; x++)
2075 p=PushDoublePixel(quantum_info,p,&pixel);
2076 SetPixelGray(image,ClampToQuantum(pixel),q);
2077 p=PushDoublePixel(quantum_info,p,&pixel);
2078 SetPixelAlpha(image,ClampToQuantum(pixel),q);
2079 p+=quantum_info->pad;
2080 q+=GetPixelChannels(image);
2087 range=GetQuantumRange(quantum_info->depth);
2088 for (x=0; x < (ssize_t) number_pixels; x++)
2090 p=PushQuantumPixel(quantum_info,p,&pixel);
2091 SetPixelGray(image,ScaleAnyToQuantum(pixel,range),q);
2092 p=PushQuantumPixel(quantum_info,p,&pixel);
2093 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
2094 p+=quantum_info->pad;
2095 q+=GetPixelChannels(image);
2102 static void ImportGreenQuantum(const Image *image,QuantumInfo *quantum_info,
2103 const MagickSizeType number_pixels,const unsigned char *restrict p,
2104 Quantum *restrict q,ExceptionInfo *exception)
2115 switch (quantum_info->depth)
2122 for (x=0; x < (ssize_t) number_pixels; x++)
2124 p=PushCharPixel(p,&pixel);
2125 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
2126 p+=quantum_info->pad;
2127 q+=GetPixelChannels(image);
2136 if (quantum_info->format == FloatingPointQuantumFormat)
2138 for (x=0; x < (ssize_t) number_pixels; x++)
2140 p=PushShortPixel(quantum_info->endian,p,&pixel);
2141 SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
2142 HalfToSinglePrecision(pixel)),q);
2143 p+=quantum_info->pad;
2144 q+=GetPixelChannels(image);
2148 for (x=0; x < (ssize_t) number_pixels; x++)
2150 p=PushShortPixel(quantum_info->endian,p,&pixel);
2151 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
2152 p+=quantum_info->pad;
2153 q+=GetPixelChannels(image);
2162 if (quantum_info->format == FloatingPointQuantumFormat)
2167 for (x=0; x < (ssize_t) number_pixels; x++)
2169 p=PushFloatPixel(quantum_info,p,&pixel);
2170 SetPixelGreen(image,ClampToQuantum(pixel),q);
2171 p+=quantum_info->pad;
2172 q+=GetPixelChannels(image);
2176 for (x=0; x < (ssize_t) number_pixels; x++)
2178 p=PushLongPixel(quantum_info->endian,p,&pixel);
2179 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
2180 p+=quantum_info->pad;
2181 q+=GetPixelChannels(image);
2187 if (quantum_info->format == FloatingPointQuantumFormat)
2192 for (x=0; x < (ssize_t) number_pixels; x++)
2194 p=PushDoublePixel(quantum_info,p,&pixel);
2195 SetPixelGreen(image,ClampToQuantum(pixel),q);
2196 p+=quantum_info->pad;
2197 q+=GetPixelChannels(image);
2204 range=GetQuantumRange(quantum_info->depth);
2205 for (x=0; x < (ssize_t) number_pixels; x++)
2207 p=PushQuantumPixel(quantum_info,p,&pixel);
2208 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
2209 p+=quantum_info->pad;
2210 q+=GetPixelChannels(image);
2217 static void ImportIndexQuantum(const Image *image,QuantumInfo *quantum_info,
2218 const MagickSizeType number_pixels,const unsigned char *restrict p,
2219 Quantum *restrict q,ExceptionInfo *exception)
2233 if (image->storage_class != PseudoClass)
2235 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2236 "ColormappedImageRequired","'%s'",image->filename);
2239 range_exception=MagickFalse;
2240 switch (quantum_info->depth)
2244 register unsigned char
2247 for (x=0; x < ((ssize_t) number_pixels-7); x+=8)
2249 for (bit=0; bit < 8; bit++)
2251 if (quantum_info->min_is_white == MagickFalse)
2252 pixel=(unsigned char) (((*p) & (1 << (7-bit))) == 0 ?
2255 pixel=(unsigned char) (((*p) & (1 << (7-bit))) != 0 ?
2257 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),
2259 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2260 GetPixelIndex(image,q),q);
2261 q+=GetPixelChannels(image);
2265 for (bit=0; bit < (ssize_t) (number_pixels % 8); bit++)
2267 if (quantum_info->min_is_white == MagickFalse)
2268 pixel=(unsigned char) (((*p) & (1 << (7-bit))) == 0 ? 0x00 : 0x01);
2270 pixel=(unsigned char) (((*p) & (1 << (7-bit))) != 0 ? 0x00 : 0x01);
2271 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2272 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2273 GetPixelIndex(image,q),q);
2274 q+=GetPixelChannels(image);
2280 register unsigned char
2283 for (x=0; x < ((ssize_t) number_pixels-1); x+=2)
2285 pixel=(unsigned char) ((*p >> 4) & 0xf);
2286 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2287 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2288 GetPixelIndex(image,q),q);
2289 q+=GetPixelChannels(image);
2290 pixel=(unsigned char) ((*p) & 0xf);
2291 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2292 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2293 GetPixelIndex(image,q),q);
2295 q+=GetPixelChannels(image);
2297 for (bit=0; bit < (ssize_t) (number_pixels % 2); bit++)
2299 pixel=(unsigned char) ((*p++ >> 4) & 0xf);
2300 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2301 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2302 GetPixelIndex(image,q),q);
2303 q+=GetPixelChannels(image);
2312 for (x=0; x < (ssize_t) number_pixels; x++)
2314 p=PushCharPixel(p,&pixel);
2315 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2316 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2317 GetPixelIndex(image,q),q);
2318 p+=quantum_info->pad;
2319 q+=GetPixelChannels(image);
2328 if (quantum_info->format == FloatingPointQuantumFormat)
2330 for (x=0; x < (ssize_t) number_pixels; x++)
2332 p=PushShortPixel(quantum_info->endian,p,&pixel);
2333 SetPixelIndex(image,PushColormapIndex(image,ClampToQuantum(
2334 (MagickRealType) QuantumRange*HalfToSinglePrecision(pixel)),
2335 &range_exception),q);
2336 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2337 GetPixelIndex(image,q),q);
2338 p+=quantum_info->pad;
2339 q+=GetPixelChannels(image);
2343 for (x=0; x < (ssize_t) number_pixels; x++)
2345 p=PushShortPixel(quantum_info->endian,p,&pixel);
2346 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2347 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2348 GetPixelIndex(image,q),q);
2349 p+=quantum_info->pad;
2350 q+=GetPixelChannels(image);
2359 if (quantum_info->format == FloatingPointQuantumFormat)
2364 for (x=0; x < (ssize_t) number_pixels; x++)
2366 p=PushFloatPixel(quantum_info,p,&pixel);
2367 SetPixelIndex(image,PushColormapIndex(image,ClampToQuantum(pixel),
2368 &range_exception),q);
2369 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2370 GetPixelIndex(image,q),q);
2371 p+=quantum_info->pad;
2372 q+=GetPixelChannels(image);
2376 for (x=0; x < (ssize_t) number_pixels; x++)
2378 p=PushLongPixel(quantum_info->endian,p,&pixel);
2379 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2380 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2381 GetPixelIndex(image,q),q);
2382 p+=quantum_info->pad;
2383 q+=GetPixelChannels(image);
2389 if (quantum_info->format == FloatingPointQuantumFormat)
2394 for (x=0; x < (ssize_t) number_pixels; x++)
2396 p=PushDoublePixel(quantum_info,p,&pixel);
2397 SetPixelIndex(image,PushColormapIndex(image,ClampToQuantum(pixel),
2398 &range_exception),q);
2399 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2400 GetPixelIndex(image,q),q);
2401 p+=quantum_info->pad;
2402 q+=GetPixelChannels(image);
2409 for (x=0; x < (ssize_t) number_pixels; x++)
2411 p=PushQuantumPixel(quantum_info,p,&pixel);
2412 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2413 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2414 GetPixelIndex(image,q),q);
2415 p+=quantum_info->pad;
2416 q+=GetPixelChannels(image);
2421 if (range_exception != MagickFalse)
2422 (void) ThrowMagickException(exception,GetMagickModule(),CorruptImageError,
2423 "InvalidColormapIndex","'%s'",image->filename);
2426 static void ImportIndexAlphaQuantum(const Image *image,
2427 QuantumInfo *quantum_info,const MagickSizeType number_pixels,
2428 const unsigned char *restrict p,Quantum *restrict q,ExceptionInfo *exception)
2445 if (image->storage_class != PseudoClass)
2447 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2448 "ColormappedImageRequired","'%s'",image->filename);
2451 range_exception=MagickFalse;
2452 switch (quantum_info->depth)
2456 register unsigned char
2459 for (x=((ssize_t) number_pixels-3); x > 0; x-=4)
2461 for (bit=0; bit < 8; bit+=2)
2463 if (quantum_info->min_is_white == MagickFalse)
2464 pixel=(unsigned char) (((*p) & (1 << (7-bit))) == 0 ? 0x00 : 0x01);
2466 pixel=(unsigned char) (((*p) & (1 << (7-bit))) != 0 ? 0x00 : 0x01);
2467 SetPixelGray(image,(Quantum) (pixel == 0 ? 0 : QuantumRange),q);
2468 SetPixelAlpha(image,((*p) & (1UL << (unsigned char) (6-bit))) == 0 ?
2469 TransparentAlpha : OpaqueAlpha,q);
2470 SetPixelIndex(image,(Quantum) (pixel == 0 ? 0 : 1),q);
2471 q+=GetPixelChannels(image);
2474 if ((number_pixels % 4) != 0)
2475 for (bit=3; bit >= (ssize_t) (4-(number_pixels % 4)); bit-=2)
2477 if (quantum_info->min_is_white == MagickFalse)
2478 pixel=(unsigned char) (((*p) & (1 << (7-bit))) == 0 ? 0x00 : 0x01);
2480 pixel=(unsigned char) (((*p) & (1 << (7-bit))) != 0 ? 0x00 : 0x01);
2481 SetPixelIndex(image,(Quantum) (pixel == 0 ? 0 : 1),q);
2482 SetPixelGray(image,(Quantum) (pixel == 0 ? 0 : QuantumRange),q);
2483 SetPixelAlpha(image,((*p) & (1UL << (unsigned char) (6-bit))) == 0 ?
2484 TransparentAlpha : OpaqueAlpha,q);
2485 q+=GetPixelChannels(image);
2491 register unsigned char
2494 range=GetQuantumRange(quantum_info->depth);
2495 for (x=0; x < (ssize_t) number_pixels; x++)
2497 pixel=(unsigned char) ((*p >> 4) & 0xf);
2498 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2499 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2500 GetPixelIndex(image,q),q);
2501 pixel=(unsigned char) ((*p) & 0xf);
2502 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
2504 q+=GetPixelChannels(image);
2513 for (x=0; x < (ssize_t) number_pixels; x++)
2515 p=PushCharPixel(p,&pixel);
2516 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2517 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2518 GetPixelIndex(image,q),q);
2519 p=PushCharPixel(p,&pixel);
2520 SetPixelAlpha(image,ScaleCharToQuantum(pixel),q);
2521 p+=quantum_info->pad;
2522 q+=GetPixelChannels(image);
2531 if (quantum_info->format == FloatingPointQuantumFormat)
2533 for (x=0; x < (ssize_t) number_pixels; x++)
2535 p=PushShortPixel(quantum_info->endian,p,&pixel);
2536 SetPixelIndex(image,PushColormapIndex(image,ClampToQuantum(
2537 (MagickRealType) QuantumRange*HalfToSinglePrecision(pixel)),
2538 &range_exception),q);
2539 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2540 GetPixelIndex(image,q),q);
2541 p=PushShortPixel(quantum_info->endian,p,&pixel);
2542 SetPixelAlpha(image,ClampToQuantum((MagickRealType)
2543 QuantumRange*HalfToSinglePrecision(pixel)),q);
2544 p+=quantum_info->pad;
2545 q+=GetPixelChannels(image);
2549 for (x=0; x < (ssize_t) number_pixels; x++)
2551 p=PushShortPixel(quantum_info->endian,p,&pixel);
2552 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2553 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2554 GetPixelIndex(image,q),q);
2555 p=PushShortPixel(quantum_info->endian,p,&pixel);
2556 SetPixelAlpha(image,ScaleShortToQuantum(pixel),q);
2557 p+=quantum_info->pad;
2558 q+=GetPixelChannels(image);
2567 if (quantum_info->format == FloatingPointQuantumFormat)
2572 for (x=0; x < (ssize_t) number_pixels; x++)
2574 p=PushFloatPixel(quantum_info,p,&pixel);
2575 SetPixelIndex(image,PushColormapIndex(image,
2576 ClampToQuantum(pixel),&range_exception),q);
2577 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2578 GetPixelIndex(image,q),q);
2579 p=PushFloatPixel(quantum_info,p,&pixel);
2580 SetPixelAlpha(image,ClampToQuantum(pixel),q);
2581 p+=quantum_info->pad;
2582 q+=GetPixelChannels(image);
2586 for (x=0; x < (ssize_t) number_pixels; x++)
2588 p=PushLongPixel(quantum_info->endian,p,&pixel);
2589 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2590 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2591 GetPixelIndex(image,q),q);
2592 p=PushLongPixel(quantum_info->endian,p,&pixel);
2593 SetPixelAlpha(image,ScaleLongToQuantum(pixel),q);
2594 p+=quantum_info->pad;
2595 q+=GetPixelChannels(image);
2601 if (quantum_info->format == FloatingPointQuantumFormat)
2606 for (x=0; x < (ssize_t) number_pixels; x++)
2608 p=PushDoublePixel(quantum_info,p,&pixel);
2609 SetPixelIndex(image,PushColormapIndex(image,ClampToQuantum(pixel),
2610 &range_exception),q);
2611 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2612 GetPixelIndex(image,q),q);
2613 p=PushDoublePixel(quantum_info,p,&pixel);
2614 SetPixelAlpha(image,ClampToQuantum(pixel),q);
2615 p+=quantum_info->pad;
2616 q+=GetPixelChannels(image);
2623 range=GetQuantumRange(quantum_info->depth);
2624 for (x=0; x < (ssize_t) number_pixels; x++)
2626 p=PushQuantumPixel(quantum_info,p,&pixel);
2627 SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
2628 SetPixelInfoPixel(image,image->colormap+(ssize_t)
2629 GetPixelIndex(image,q),q);
2630 p=PushQuantumPixel(quantum_info,p,&pixel);
2631 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
2632 p+=quantum_info->pad;
2633 q+=GetPixelChannels(image);
2638 if (range_exception != MagickFalse)
2639 (void) ThrowMagickException(exception,GetMagickModule(),CorruptImageError,
2640 "InvalidColormapIndex","'%s'",image->filename);
2643 static void ImportOpacityQuantum(const Image *image,QuantumInfo *quantum_info,
2644 const MagickSizeType number_pixels,const unsigned char *restrict p,
2645 Quantum *restrict q,ExceptionInfo *exception)
2656 switch (quantum_info->depth)
2663 for (x=0; x < (ssize_t) number_pixels; x++)
2665 p=PushCharPixel(p,&pixel);
2666 SetPixelOpacity(image,ScaleCharToQuantum(pixel),q);
2667 p+=quantum_info->pad;
2668 q+=GetPixelChannels(image);
2677 if (quantum_info->format == FloatingPointQuantumFormat)
2679 for (x=0; x < (ssize_t) number_pixels; x++)
2681 p=PushShortPixel(quantum_info->endian,p,&pixel);
2682 SetPixelOpacity(image,ClampToQuantum((MagickRealType) QuantumRange*
2683 HalfToSinglePrecision(pixel)),q);
2684 p+=quantum_info->pad;
2685 q+=GetPixelChannels(image);
2689 for (x=0; x < (ssize_t) number_pixels; x++)
2691 p=PushShortPixel(quantum_info->endian,p,&pixel);
2692 SetPixelOpacity(image,ScaleShortToQuantum(pixel),q);
2693 p+=quantum_info->pad;
2694 q+=GetPixelChannels(image);
2703 if (quantum_info->format == FloatingPointQuantumFormat)
2708 for (x=0; x < (ssize_t) number_pixels; x++)
2710 p=PushFloatPixel(quantum_info,p,&pixel);
2711 SetPixelOpacity(image,ClampToQuantum(pixel),q);
2712 p+=quantum_info->pad;
2713 q+=GetPixelChannels(image);
2717 for (x=0; x < (ssize_t) number_pixels; x++)
2719 p=PushLongPixel(quantum_info->endian,p,&pixel);
2720 SetPixelOpacity(image,ScaleLongToQuantum(pixel),q);
2721 p+=quantum_info->pad;
2722 q+=GetPixelChannels(image);
2728 if (quantum_info->format == FloatingPointQuantumFormat)
2733 for (x=0; x < (ssize_t) number_pixels; x++)
2735 p=PushDoublePixel(quantum_info,p,&pixel);
2736 SetPixelOpacity(image,ClampToQuantum(pixel),q);
2737 p+=quantum_info->pad;
2738 q+=GetPixelChannels(image);
2745 range=GetQuantumRange(quantum_info->depth);
2746 for (x=0; x < (ssize_t) number_pixels; x++)
2748 p=PushQuantumPixel(quantum_info,p,&pixel);
2749 SetPixelOpacity(image,ScaleAnyToQuantum(pixel,range),q);
2750 p+=quantum_info->pad;
2751 q+=GetPixelChannels(image);
2757 static void ImportRedQuantum(const Image *image,QuantumInfo *quantum_info,
2758 const MagickSizeType number_pixels,const unsigned char *restrict p,
2759 Quantum *restrict q,ExceptionInfo *exception)
2770 switch (quantum_info->depth)
2777 for (x=0; x < (ssize_t) number_pixels; x++)
2779 p=PushCharPixel(p,&pixel);
2780 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
2781 p+=quantum_info->pad;
2782 q+=GetPixelChannels(image);
2791 if (quantum_info->format == FloatingPointQuantumFormat)
2793 for (x=0; x < (ssize_t) number_pixels; x++)
2795 p=PushShortPixel(quantum_info->endian,p,&pixel);
2796 SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
2797 HalfToSinglePrecision(pixel)),q);
2798 p+=quantum_info->pad;
2799 q+=GetPixelChannels(image);
2803 for (x=0; x < (ssize_t) number_pixels; x++)
2805 p=PushShortPixel(quantum_info->endian,p,&pixel);
2806 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
2807 p+=quantum_info->pad;
2808 q+=GetPixelChannels(image);
2817 if (quantum_info->format == FloatingPointQuantumFormat)
2822 for (x=0; x < (ssize_t) number_pixels; x++)
2824 p=PushFloatPixel(quantum_info,p,&pixel);
2825 SetPixelRed(image,ClampToQuantum(pixel),q);
2826 p+=quantum_info->pad;
2827 q+=GetPixelChannels(image);
2831 for (x=0; x < (ssize_t) number_pixels; x++)
2833 p=PushLongPixel(quantum_info->endian,p,&pixel);
2834 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
2835 p+=quantum_info->pad;
2836 q+=GetPixelChannels(image);
2842 if (quantum_info->format == FloatingPointQuantumFormat)
2847 for (x=0; x < (ssize_t) number_pixels; x++)
2849 p=PushDoublePixel(quantum_info,p,&pixel);
2850 SetPixelRed(image,ClampToQuantum(pixel),q);
2851 p+=quantum_info->pad;
2852 q+=GetPixelChannels(image);
2859 range=GetQuantumRange(quantum_info->depth);
2860 for (x=0; x < (ssize_t) number_pixels; x++)
2862 p=PushQuantumPixel(quantum_info,p,&pixel);
2863 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
2864 p+=quantum_info->pad;
2865 q+=GetPixelChannels(image);
2872 static void ImportRGBQuantum(const Image *image,QuantumInfo *quantum_info,
2873 const MagickSizeType number_pixels,const unsigned char *restrict p,
2874 Quantum *restrict q,ExceptionInfo *exception)
2888 switch (quantum_info->depth)
2895 for (x=0; x < (ssize_t) number_pixels; x++)
2897 p=PushCharPixel(p,&pixel);
2898 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
2899 p=PushCharPixel(p,&pixel);
2900 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
2901 p=PushCharPixel(p,&pixel);
2902 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
2903 SetPixelAlpha(image,OpaqueAlpha,q);
2904 p+=quantum_info->pad;
2905 q+=GetPixelChannels(image);
2911 range=GetQuantumRange(quantum_info->depth);
2912 if (quantum_info->pack == MagickFalse)
2914 for (x=0; x < (ssize_t) number_pixels; x++)
2916 p=PushLongPixel(quantum_info->endian,p,&pixel);
2917 SetPixelRed(image,ScaleAnyToQuantum((pixel >> 22) & 0x3ff,range),q);
2918 SetPixelGreen(image,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,range),
2920 SetPixelBlue(image,ScaleAnyToQuantum((pixel >> 2) & 0x3ff,range),q);
2921 p+=quantum_info->pad;
2922 q+=GetPixelChannels(image);
2926 if (quantum_info->quantum == 32U)
2928 for (x=0; x < (ssize_t) number_pixels; x++)
2930 p=PushQuantumLongPixel(quantum_info,p,&pixel);
2931 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
2932 p=PushQuantumLongPixel(quantum_info,p,&pixel);
2933 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
2934 p=PushQuantumLongPixel(quantum_info,p,&pixel);
2935 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
2936 q+=GetPixelChannels(image);
2940 for (x=0; x < (ssize_t) number_pixels; x++)
2942 p=PushQuantumPixel(quantum_info,p,&pixel);
2943 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
2944 p=PushQuantumPixel(quantum_info,p,&pixel);
2945 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
2946 p=PushQuantumPixel(quantum_info,p,&pixel);
2947 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
2948 q+=GetPixelChannels(image);
2954 range=GetQuantumRange(quantum_info->depth);
2955 if (quantum_info->pack == MagickFalse)
2960 for (x=0; x < (ssize_t) (3*number_pixels-1); x+=2)
2962 p=PushShortPixel(quantum_info->endian,p,&pixel);
2968 SetPixelRed(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
2974 SetPixelGreen(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
2980 SetPixelBlue(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
2982 q+=GetPixelChannels(image);
2986 p=PushShortPixel(quantum_info->endian,p,&pixel);
2992 SetPixelRed(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
2998 SetPixelGreen(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3004 SetPixelBlue(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3006 q+=GetPixelChannels(image);
3010 p+=quantum_info->pad;
3012 for (bit=0; bit < (ssize_t) (3*number_pixels % 2); bit++)
3014 p=PushShortPixel(quantum_info->endian,p,&pixel);
3015 switch ((x+bit) % 3)
3020 SetPixelRed(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3026 SetPixelGreen(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3032 SetPixelBlue(image,ScaleAnyToQuantum((QuantumAny) (pixel >> 4),
3034 q+=GetPixelChannels(image);
3038 p+=quantum_info->pad;
3044 if (quantum_info->quantum == 32U)
3046 for (x=0; x < (ssize_t) number_pixels; x++)
3048 p=PushQuantumLongPixel(quantum_info,p,&pixel);
3049 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
3050 p=PushQuantumLongPixel(quantum_info,p,&pixel);
3051 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
3052 p=PushQuantumLongPixel(quantum_info,p,&pixel);
3053 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
3054 q+=GetPixelChannels(image);
3058 for (x=0; x < (ssize_t) number_pixels; x++)
3060 p=PushQuantumPixel(quantum_info,p,&pixel);
3061 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
3062 p=PushQuantumPixel(quantum_info,p,&pixel);
3063 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
3064 p=PushQuantumPixel(quantum_info,p,&pixel);
3065 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
3066 q+=GetPixelChannels(image);
3075 if (quantum_info->format == FloatingPointQuantumFormat)
3077 for (x=0; x < (ssize_t) number_pixels; x++)
3079 p=PushShortPixel(quantum_info->endian,p,&pixel);
3080 SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
3081 HalfToSinglePrecision(pixel)),q);
3082 p=PushShortPixel(quantum_info->endian,p,&pixel);
3083 SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
3084 HalfToSinglePrecision(pixel)),q);
3085 p=PushShortPixel(quantum_info->endian,p,&pixel);
3086 SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
3087 HalfToSinglePrecision(pixel)),q);
3088 p+=quantum_info->pad;
3089 q+=GetPixelChannels(image);
3093 for (x=0; x < (ssize_t) number_pixels; x++)
3095 p=PushShortPixel(quantum_info->endian,p,&pixel);
3096 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
3097 p=PushShortPixel(quantum_info->endian,p,&pixel);
3098 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
3099 p=PushShortPixel(quantum_info->endian,p,&pixel);
3100 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
3101 p+=quantum_info->pad;
3102 q+=GetPixelChannels(image);
3111 if (quantum_info->format == FloatingPointQuantumFormat)
3116 for (x=0; x < (ssize_t) number_pixels; x++)
3118 p=PushFloatPixel(quantum_info,p,&pixel);
3119 SetPixelRed(image,ClampToQuantum(pixel),q);
3120 p=PushFloatPixel(quantum_info,p,&pixel);
3121 SetPixelGreen(image,ClampToQuantum(pixel),q);
3122 p=PushFloatPixel(quantum_info,p,&pixel);
3123 SetPixelBlue(image,ClampToQuantum(pixel),q);
3124 p+=quantum_info->pad;
3125 q+=GetPixelChannels(image);
3129 for (x=0; x < (ssize_t) number_pixels; x++)
3131 p=PushLongPixel(quantum_info->endian,p,&pixel);
3132 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
3133 p=PushLongPixel(quantum_info->endian,p,&pixel);
3134 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
3135 p=PushLongPixel(quantum_info->endian,p,&pixel);
3136 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
3137 p+=quantum_info->pad;
3138 q+=GetPixelChannels(image);
3144 if (quantum_info->format == FloatingPointQuantumFormat)
3149 for (x=0; x < (ssize_t) number_pixels; x++)
3151 p=PushDoublePixel(quantum_info,p,&pixel);
3152 SetPixelRed(image,ClampToQuantum(pixel),q);
3153 p=PushDoublePixel(quantum_info,p,&pixel);
3154 SetPixelGreen(image,ClampToQuantum(pixel),q);
3155 p=PushDoublePixel(quantum_info,p,&pixel);
3156 SetPixelBlue(image,ClampToQuantum(pixel),q);
3157 p+=quantum_info->pad;
3158 q+=GetPixelChannels(image);
3165 range=GetQuantumRange(quantum_info->depth);
3166 for (x=0; x < (ssize_t) number_pixels; x++)
3168 p=PushQuantumPixel(quantum_info,p,&pixel);
3169 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
3170 p=PushQuantumPixel(quantum_info,p,&pixel);
3171 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
3172 p=PushQuantumPixel(quantum_info,p,&pixel);
3173 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
3174 q+=GetPixelChannels(image);
3181 static void ImportRGBAQuantum(const Image *image,QuantumInfo *quantum_info,
3182 const MagickSizeType number_pixels,const unsigned char *restrict p,
3183 Quantum *restrict q,ExceptionInfo *exception)
3194 switch (quantum_info->depth)
3201 for (x=0; x < (ssize_t) number_pixels; x++)
3203 p=PushCharPixel(p,&pixel);
3204 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
3205 p=PushCharPixel(p,&pixel);
3206 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
3207 p=PushCharPixel(p,&pixel);
3208 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
3209 p=PushCharPixel(p,&pixel);
3210 SetPixelAlpha(image,ScaleCharToQuantum(pixel),q);
3211 p+=quantum_info->pad;
3212 q+=GetPixelChannels(image);
3219 if (quantum_info->pack == MagickFalse)
3232 for (x=0; x < (ssize_t) number_pixels; x++)
3234 for (i=0; i < 4; i++)
3240 p=PushLongPixel(quantum_info->endian,p,&pixel);
3241 quantum=(size_t) (ScaleShortToQuantum((unsigned short)
3242 (((pixel >> 22) & 0x3ff) << 6)));
3247 quantum=(size_t) (ScaleShortToQuantum((unsigned short)
3248 (((pixel >> 12) & 0x3ff) << 6)));
3253 quantum=(size_t) (ScaleShortToQuantum((unsigned short)
3254 (((pixel >> 2) & 0x3ff) << 6)));
3260 case 0: SetPixelRed(image,(Quantum) quantum,q); break;
3261 case 1: SetPixelGreen(image,(Quantum) quantum,q); break;
3262 case 2: SetPixelBlue(image,(Quantum) quantum,q); break;
3263 case 3: SetPixelAlpha(image,(Quantum) quantum,q); break;
3267 p+=quantum_info->pad;
3268 q+=GetPixelChannels(image);
3272 for (x=0; x < (ssize_t) number_pixels; x++)
3274 p=PushQuantumPixel(quantum_info,p,&pixel);
3275 SetPixelRed(image,ScaleShortToQuantum((unsigned short) (pixel << 6)),q);
3276 p=PushQuantumPixel(quantum_info,p,&pixel);
3277 SetPixelGreen(image,ScaleShortToQuantum((unsigned short) (pixel << 6)),
3279 p=PushQuantumPixel(quantum_info,p,&pixel);
3280 SetPixelBlue(image,ScaleShortToQuantum((unsigned short) (pixel << 6)),
3282 p=PushQuantumPixel(quantum_info,p,&pixel);
3283 SetPixelAlpha(image,ScaleShortToQuantum((unsigned short) (pixel << 6)),
3285 q+=GetPixelChannels(image);
3294 if (quantum_info->format == FloatingPointQuantumFormat)
3296 for (x=0; x < (ssize_t) number_pixels; x++)
3298 p=PushShortPixel(quantum_info->endian,p,&pixel);
3299 SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
3300 HalfToSinglePrecision(pixel)),q);
3301 p=PushShortPixel(quantum_info->endian,p,&pixel);
3302 SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
3303 HalfToSinglePrecision(pixel)),q);
3304 p=PushShortPixel(quantum_info->endian,p,&pixel);
3305 SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
3306 HalfToSinglePrecision(pixel)),q);
3307 p=PushShortPixel(quantum_info->endian,p,&pixel);
3308 SetPixelAlpha(image,ClampToQuantum((MagickRealType) QuantumRange*
3309 HalfToSinglePrecision(pixel)),q);
3310 p+=quantum_info->pad;
3311 q+=GetPixelChannels(image);
3315 for (x=0; x < (ssize_t) number_pixels; x++)
3317 p=PushShortPixel(quantum_info->endian,p,&pixel);
3318 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
3319 p=PushShortPixel(quantum_info->endian,p,&pixel);
3320 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
3321 p=PushShortPixel(quantum_info->endian,p,&pixel);
3322 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
3323 p=PushShortPixel(quantum_info->endian,p,&pixel);
3324 SetPixelAlpha(image,ScaleShortToQuantum(pixel),q);
3325 p+=quantum_info->pad;
3326 q+=GetPixelChannels(image);
3335 if (quantum_info->format == FloatingPointQuantumFormat)
3340 for (x=0; x < (ssize_t) number_pixels; x++)
3342 p=PushFloatPixel(quantum_info,p,&pixel);
3343 SetPixelRed(image,ClampToQuantum(pixel),q);
3344 p=PushFloatPixel(quantum_info,p,&pixel);
3345 SetPixelGreen(image,ClampToQuantum(pixel),q);
3346 p=PushFloatPixel(quantum_info,p,&pixel);
3347 SetPixelBlue(image,ClampToQuantum(pixel),q);
3348 p=PushFloatPixel(quantum_info,p,&pixel);
3349 SetPixelAlpha(image,ClampToQuantum(pixel),q);
3350 p+=quantum_info->pad;
3351 q+=GetPixelChannels(image);
3355 for (x=0; x < (ssize_t) number_pixels; x++)
3357 p=PushLongPixel(quantum_info->endian,p,&pixel);
3358 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
3359 p=PushLongPixel(quantum_info->endian,p,&pixel);
3360 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
3361 p=PushLongPixel(quantum_info->endian,p,&pixel);
3362 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
3363 p=PushLongPixel(quantum_info->endian,p,&pixel);
3364 SetPixelAlpha(image,ScaleLongToQuantum(pixel),q);
3365 p+=quantum_info->pad;
3366 q+=GetPixelChannels(image);
3372 if (quantum_info->format == FloatingPointQuantumFormat)
3377 for (x=0; x < (ssize_t) number_pixels; x++)
3379 p=PushDoublePixel(quantum_info,p,&pixel);
3380 SetPixelRed(image,ClampToQuantum(pixel),q);
3381 p=PushDoublePixel(quantum_info,p,&pixel);
3382 SetPixelGreen(image,ClampToQuantum(pixel),q);
3383 p=PushDoublePixel(quantum_info,p,&pixel);
3384 SetPixelBlue(image,ClampToQuantum(pixel),q);
3385 p=PushDoublePixel(quantum_info,p,&pixel);
3386 SetPixelAlpha(image,ClampToQuantum(pixel),q);
3387 p+=quantum_info->pad;
3388 q+=GetPixelChannels(image);
3395 range=GetQuantumRange(quantum_info->depth);
3396 for (x=0; x < (ssize_t) number_pixels; x++)
3398 p=PushQuantumPixel(quantum_info,p,&pixel);
3399 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
3400 p=PushQuantumPixel(quantum_info,p,&pixel);
3401 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
3402 p=PushQuantumPixel(quantum_info,p,&pixel);
3403 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
3404 p=PushQuantumPixel(quantum_info,p,&pixel);
3405 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
3406 q+=GetPixelChannels(image);
3413 MagickExport size_t ImportQuantumPixels(const Image *image,
3414 CacheView *image_view,QuantumInfo *quantum_info,
3415 const QuantumType quantum_type,const unsigned char *pixels,
3416 ExceptionInfo *exception)
3421 register const unsigned char
3433 assert(image != (Image *) NULL);
3434 assert(image->signature == MagickSignature);
3435 if (image->debug != MagickFalse)
3436 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
3437 assert(quantum_info != (QuantumInfo *) NULL);
3438 assert(quantum_info->signature == MagickSignature);
3439 if (pixels == (const unsigned char *) NULL)
3440 pixels=GetQuantumPixels(quantum_info);
3443 if (image_view == (CacheView *) NULL)
3445 number_pixels=GetImageExtent(image);
3446 q=GetAuthenticPixelQueue(image);
3450 number_pixels=GetCacheViewExtent(image_view);
3451 q=GetCacheViewAuthenticPixelQueue(image_view);
3453 ResetQuantumState(quantum_info);
3454 extent=GetQuantumExtent(image,quantum_info,quantum_type);
3455 switch (quantum_type)
3459 ImportAlphaQuantum(image,quantum_info,number_pixels,p,q,exception);
3464 ImportBGRQuantum(image,quantum_info,number_pixels,p,q,exception);
3470 ImportBGRAQuantum(image,quantum_info,number_pixels,p,q,exception);
3475 ImportBlackQuantum(image,quantum_info,number_pixels,p,q,exception);
3481 ImportBlueQuantum(image,quantum_info,number_pixels,p,q,exception);
3486 ImportCMYKQuantum(image,quantum_info,number_pixels,p,q,exception);
3492 ImportCMYKAQuantum(image,quantum_info,number_pixels,p,q,exception);
3497 ImportCbYCrYQuantum(image,quantum_info,number_pixels,p,q,exception);
3502 ImportGrayQuantum(image,quantum_info,number_pixels,p,q,exception);
3505 case GrayAlphaQuantum:
3507 ImportGrayAlphaQuantum(image,quantum_info,number_pixels,p,q,exception);
3511 case MagentaQuantum:
3513 ImportGreenQuantum(image,quantum_info,number_pixels,p,q,exception);
3518 ImportIndexQuantum(image,quantum_info,number_pixels,p,q,exception);
3521 case IndexAlphaQuantum:
3523 ImportIndexAlphaQuantum(image,quantum_info,number_pixels,p,q,exception);
3526 case OpacityQuantum:
3528 ImportOpacityQuantum(image,quantum_info,number_pixels,p,q,exception);
3534 ImportRedQuantum(image,quantum_info,number_pixels,p,q,exception);
3540 ImportRGBQuantum(image,quantum_info,number_pixels,p,q,exception);
3547 ImportRGBAQuantum(image,quantum_info,number_pixels,p,q,exception);
3553 if ((quantum_type == CbYCrQuantum) || (quantum_type == CbYCrAQuantum))
3561 q=GetAuthenticPixelQueue(image);
3562 if (image_view != (CacheView *) NULL)
3563 q=GetCacheViewAuthenticPixelQueue(image_view);
3564 for (x=0; x < (ssize_t) number_pixels; x++)
3566 quantum=GetPixelRed(image,q);
3567 SetPixelRed(image,GetPixelGreen(image,q),q);
3568 SetPixelGreen(image,quantum,q);
3569 q+=GetPixelChannels(image);
3572 if ((quantum_type == RGBOQuantum) || (quantum_type == CMYKOQuantum))
3577 q=GetAuthenticPixelQueue(image);
3578 if (image_view != (CacheView *) NULL)
3579 q=GetCacheViewAuthenticPixelQueue(image_view);
3580 for (x=0; x < (ssize_t) number_pixels; x++)
3582 SetPixelAlpha(image,GetPixelAlpha(image,q),q);
3583 q+=GetPixelChannels(image);
3586 if (quantum_info->alpha_type == DisassociatedQuantumAlpha)
3598 q=GetAuthenticPixelQueue(image);
3599 if (image_view != (CacheView *) NULL)
3600 q=GetCacheViewAuthenticPixelQueue(image_view);
3601 for (x=0; x < (ssize_t) number_pixels; x++)
3606 if (GetPixelMask(image,q) != 0)
3608 q+=GetPixelChannels(image);
3611 Sa=QuantumScale*GetPixelAlpha(image,q);
3612 gamma=1.0/(fabs(Sa) <= MagickEpsilon ? 1.0 : Sa);
3613 for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
3621 channel=GetPixelChannelMapChannel(image,i);
3622 traits=GetPixelChannelMapTraits(image,channel);
3623 if ((traits & UpdatePixelTrait) == 0)
3625 q[i]=ClampToQuantum(gamma*q[i]);
3627 q+=GetPixelChannels(image);