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(Image *image,CacheView *image_view,
93 % const 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(Image *image,
114 const size_t index,MagickBooleanType *range_exception)
116 if (index < image->colors)
117 return((Quantum) index);
118 *range_exception=MagickTrue;
122 static inline const unsigned char *PushDoublePixel(
123 const QuantumState *quantum_state,const unsigned char *pixels,double *pixel)
131 if (quantum_state->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_state->minimum;
144 *pixel*=quantum_state->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_state->minimum;
158 *pixel*=quantum_state->scale;
162 static inline const unsigned char *PushFloatPixel(
163 const QuantumState *quantum_state,const unsigned char *pixels,float *pixel)
171 if (quantum_state->endian != LSBEndian)
173 quantum[3]=(*pixels++);
174 quantum[2]=(*pixels++);
175 quantum[1]=(*pixels++);
176 quantum[0]=(*pixels++);
179 *pixel-=quantum_state->minimum;
180 *pixel*=quantum_state->scale;
183 quantum[0]=(*pixels++);
184 quantum[1]=(*pixels++);
185 quantum[2]=(*pixels++);
186 quantum[3]=(*pixels++);
189 *pixel-=quantum_state->minimum;
190 *pixel*=quantum_state->scale;
194 static inline const unsigned char *PushQuantumPixel(
195 QuantumState *quantum_state,const size_t depth,
196 const unsigned char *pixels,unsigned int *quantum)
204 *quantum=(QuantumAny) 0;
205 for (i=(ssize_t) depth; i > 0L; )
207 if (quantum_state->bits == 0UL)
209 quantum_state->pixel=(*pixels++);
210 quantum_state->bits=8UL;
212 quantum_bits=(size_t) i;
213 if (quantum_bits > quantum_state->bits)
214 quantum_bits=quantum_state->bits;
215 i-=(ssize_t) quantum_bits;
216 quantum_state->bits-=quantum_bits;
217 *quantum=(unsigned int) ((*quantum << quantum_bits) |
218 ((quantum_state->pixel >> quantum_state->bits) &~ ((~0UL) <<
224 static inline const unsigned char *PushQuantumLongPixel(
225 QuantumState *quantum_state,const size_t depth,
226 const unsigned char *pixels,unsigned int *quantum)
235 for (i=(ssize_t) depth; i > 0; )
237 if (quantum_state->bits == 0)
239 pixels=PushLongPixel(quantum_state->endian,pixels,
240 &quantum_state->pixel);
241 quantum_state->bits=32U;
243 quantum_bits=(size_t) i;
244 if (quantum_bits > quantum_state->bits)
245 quantum_bits=quantum_state->bits;
246 *quantum|=(((quantum_state->pixel >> (32U-quantum_state->bits)) &
247 quantum_state->mask[quantum_bits]) << (depth-i));
248 i-=(ssize_t) quantum_bits;
249 quantum_state->bits-=quantum_bits;
254 MagickExport size_t ImportQuantumPixels(Image *image,CacheView *image_view,
255 const QuantumInfo *quantum_info,const QuantumType quantum_type,
256 const unsigned char *pixels,ExceptionInfo *exception)
270 register const unsigned char
289 assert(image != (Image *) NULL);
290 assert(image->signature == MagickSignature);
291 if (image->debug != MagickFalse)
292 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
293 assert(quantum_info != (QuantumInfo *) NULL);
294 assert(quantum_info->signature == MagickSignature);
295 if (pixels == (const unsigned char *) NULL)
296 pixels=GetQuantumPixels(quantum_info);
299 if (image_view == (CacheView *) NULL)
301 number_pixels=GetImageExtent(image);
302 q=GetAuthenticPixelQueue(image);
303 channels=GetPixelChannels(image);
307 number_pixels=GetCacheViewExtent(image_view);
308 q=GetCacheViewAuthenticPixelQueue(image_view);
309 channels=GetPixelChannels(image);
311 InitializeQuantumState(quantum_info,image->endian,&quantum_state);
312 extent=GetQuantumExtent(image,quantum_info,quantum_type);
313 endian=quantum_state.endian;
314 switch (quantum_type)
321 if (image->storage_class != PseudoClass)
323 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
324 "ColormappedImageRequired","`%s'",image->filename);
327 range_exception=MagickFalse;
328 switch (quantum_info->depth)
332 register unsigned char
335 for (x=0; x < ((ssize_t) number_pixels-7); x+=8)
337 for (bit=0; bit < 8; bit++)
339 if (quantum_info->min_is_white == MagickFalse)
340 pixel=(unsigned char) (((*p) & (1 << (7-bit))) == 0 ?
343 pixel=(unsigned char) (((*p) & (1 << (7-bit))) != 0 ?
345 SetPixelIndex(image,PushColormapIndex(image,pixel,
346 &range_exception),q);
347 SetPixelPacket(image,image->colormap+(ssize_t)
348 GetPixelIndex(image,q),q);
353 for (bit=0; bit < (ssize_t) (number_pixels % 8); bit++)
355 if (quantum_info->min_is_white == MagickFalse)
356 pixel=(unsigned char) (((*p) & (1 << (7-bit))) == 0 ?
359 pixel=(unsigned char) (((*p) & (1 << (7-bit))) != 0 ?
361 SetPixelIndex(image,PushColormapIndex(image,pixel,
362 &range_exception),q);
363 SetPixelPacket(image,image->colormap+(ssize_t)
364 GetPixelIndex(image,q),q);
371 register unsigned char
374 for (x=0; x < ((ssize_t) number_pixels-1); x+=2)
376 pixel=(unsigned char) ((*p >> 4) & 0xf);
377 SetPixelIndex(image,PushColormapIndex(image,pixel,
378 &range_exception),q);
379 SetPixelPacket(image,image->colormap+(ssize_t)
380 GetPixelIndex(image,q),q);
382 pixel=(unsigned char) ((*p) & 0xf);
383 SetPixelIndex(image,PushColormapIndex(image,pixel,
384 &range_exception),q);
385 SetPixelPacket(image,image->colormap+(ssize_t)
386 GetPixelIndex(image,q),q);
390 for (bit=0; bit < (ssize_t) (number_pixels % 2); bit++)
392 pixel=(unsigned char) ((*p++ >> 4) & 0xf);
393 SetPixelIndex(image,PushColormapIndex(image,pixel,
394 &range_exception),q);
395 SetPixelPacket(image,image->colormap+(ssize_t)
396 GetPixelIndex(image,q),q);
406 for (x=0; x < (ssize_t) number_pixels; x++)
408 p=PushCharPixel(p,&pixel);
409 SetPixelIndex(image,PushColormapIndex(image,pixel,
410 &range_exception),q);
411 SetPixelPacket(image,image->colormap+(ssize_t)
412 GetPixelIndex(image,q),q);
413 p+=quantum_info->pad;
423 if (quantum_info->format == FloatingPointQuantumFormat)
425 for (x=0; x < (ssize_t) number_pixels; x++)
427 p=PushShortPixel(endian,p,&pixel);
428 SetPixelIndex(image,PushColormapIndex(image,ClampToQuantum(
429 (MagickRealType) QuantumRange*HalfToSinglePrecision(pixel)),
430 &range_exception),q);
431 SetPixelPacket(image,image->colormap+(ssize_t)
432 GetPixelIndex(image,q),q);
433 p+=quantum_info->pad;
438 for (x=0; x < (ssize_t) number_pixels; x++)
440 p=PushShortPixel(endian,p,&pixel);
441 SetPixelIndex(image,PushColormapIndex(image,pixel,
442 &range_exception),q);
443 SetPixelPacket(image,image->colormap+(ssize_t)
444 GetPixelIndex(image,q),q);
445 p+=quantum_info->pad;
455 if (quantum_info->format == FloatingPointQuantumFormat)
460 for (x=0; x < (ssize_t) number_pixels; x++)
462 p=PushFloatPixel(&quantum_state,p,&pixel);
463 SetPixelIndex(image,PushColormapIndex(image,
464 ClampToQuantum(pixel),&range_exception),q);
465 SetPixelPacket(image,image->colormap+(ssize_t)
466 GetPixelIndex(image,q),q);
467 p+=quantum_info->pad;
472 for (x=0; x < (ssize_t) number_pixels; x++)
474 p=PushLongPixel(endian,p,&pixel);
475 SetPixelIndex(image,PushColormapIndex(image,pixel,
476 &range_exception),q);
477 SetPixelPacket(image,image->colormap+(ssize_t)
478 GetPixelIndex(image,q),q);
479 p+=quantum_info->pad;
486 if (quantum_info->format == FloatingPointQuantumFormat)
491 for (x=0; x < (ssize_t) number_pixels; x++)
493 p=PushDoublePixel(&quantum_state,p,&pixel);
494 SetPixelIndex(image,PushColormapIndex(image,
495 ClampToQuantum(pixel),&range_exception),q);
496 SetPixelPacket(image,image->colormap+(ssize_t)
497 GetPixelIndex(image,q),q);
498 p+=quantum_info->pad;
506 for (x=0; x < (ssize_t) number_pixels; x++)
508 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
509 SetPixelIndex(image,PushColormapIndex(image,pixel,
510 &range_exception),q);
511 SetPixelPacket(image,image->colormap+(ssize_t)
512 GetPixelIndex(image,q),q);
513 p+=quantum_info->pad;
519 if (range_exception != MagickFalse)
520 (void) ThrowMagickException(exception,GetMagickModule(),
521 CorruptImageError,"InvalidColormapIndex","`%s'",image->filename);
524 case IndexAlphaQuantum:
529 if (image->storage_class != PseudoClass)
531 (void) ThrowMagickException(exception,GetMagickModule(),
532 ImageError,"ColormappedImageRequired","`%s'",image->filename);
535 range_exception=MagickFalse;
536 switch (quantum_info->depth)
540 register unsigned char
543 for (x=0; x < ((ssize_t) number_pixels-3); x+=4)
545 for (bit=0; bit < 8; bit+=2)
547 if (quantum_info->min_is_white == MagickFalse)
548 pixel=(unsigned char) (((*p) & (1 << (7-bit))) == 0 ?
551 pixel=(unsigned char) (((*p) & (1 << (7-bit))) != 0 ?
553 SetPixelRed(image,(Quantum) (pixel == 0 ? 0 : QuantumRange),q);
554 SetPixelGreen(image,GetPixelRed(image,q),q);
555 SetPixelBlue(image,GetPixelRed(image,q),q);
556 SetPixelAlpha(image,((*p) & (1UL << (unsigned char)
557 (6-bit))) == 0 ? TransparentAlpha : OpaqueAlpha,q);
558 SetPixelIndex(image,(Quantum) (pixel == 0 ? 0 : 1),q);
562 for (bit=0; bit < (ssize_t) (number_pixels % 4); bit+=2)
564 if (quantum_info->min_is_white == MagickFalse)
565 pixel=(unsigned char) (((*p) & (1 << (7-bit))) == 0 ?
568 pixel=(unsigned char) (((*p) & (1 << (7-bit))) != 0 ?
570 SetPixelIndex(image,(Quantum) (pixel == 0 ? 0 : 1),q);
571 SetPixelRed(image,(Quantum) (pixel == 0 ? 0 : QuantumRange),q);
572 SetPixelGreen(image,GetPixelRed(image,q),q);
573 SetPixelBlue(image,GetPixelRed(image,q),q);
574 SetPixelAlpha(image,((*p) & (1UL << (unsigned char)
575 (6-bit))) == 0 ? TransparentAlpha : OpaqueAlpha,q);
582 register unsigned char
585 range=GetQuantumRange(image->depth);
586 for (x=0; x < (ssize_t) number_pixels; x++)
588 pixel=(unsigned char) ((*p >> 4) & 0xf);
589 SetPixelIndex(image,PushColormapIndex(image,pixel,
590 &range_exception),q);
591 SetPixelPacket(image,image->colormap+(ssize_t)
592 GetPixelIndex(image,q),q);
593 pixel=(unsigned char) ((*p) & 0xf);
594 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
605 for (x=0; x < (ssize_t) number_pixels; x++)
607 p=PushCharPixel(p,&pixel);
608 SetPixelIndex(image,PushColormapIndex(image,pixel,
609 &range_exception),q);
610 SetPixelPacket(image,image->colormap+(ssize_t)
611 GetPixelIndex(image,q),q);
612 p=PushCharPixel(p,&pixel);
613 SetPixelAlpha(image,ScaleCharToQuantum(pixel),q);
614 p+=quantum_info->pad;
624 if (quantum_info->format == FloatingPointQuantumFormat)
626 for (x=0; x < (ssize_t) number_pixels; x++)
628 p=PushShortPixel(endian,p,&pixel);
629 SetPixelIndex(image,PushColormapIndex(image,ClampToQuantum(
630 (MagickRealType) QuantumRange*HalfToSinglePrecision(pixel)),
631 &range_exception),q);
632 SetPixelPacket(image,image->colormap+(ssize_t)
633 GetPixelIndex(image,q),q);
634 p=PushShortPixel(endian,p,&pixel);
635 SetPixelAlpha(image,ClampToQuantum((MagickRealType)
636 QuantumRange*HalfToSinglePrecision(pixel)),q);
637 p+=quantum_info->pad;
642 for (x=0; x < (ssize_t) number_pixels; x++)
644 p=PushShortPixel(endian,p,&pixel);
645 SetPixelIndex(image,PushColormapIndex(image,pixel,
646 &range_exception),q);
647 SetPixelPacket(image,image->colormap+(ssize_t)
648 GetPixelIndex(image,q),q);
649 p=PushShortPixel(endian,p,&pixel);
650 SetPixelAlpha(image,ScaleShortToQuantum(pixel),q);
651 p+=quantum_info->pad;
661 if (quantum_info->format == FloatingPointQuantumFormat)
666 for (x=0; x < (ssize_t) number_pixels; x++)
668 p=PushFloatPixel(&quantum_state,p,&pixel);
669 SetPixelIndex(image,PushColormapIndex(image,
670 ClampToQuantum(pixel),&range_exception),q);
671 SetPixelPacket(image,image->colormap+(ssize_t)
672 GetPixelIndex(image,q),q);
673 p=PushFloatPixel(&quantum_state,p,&pixel);
674 SetPixelAlpha(image,ClampToQuantum(pixel),q);
675 p+=quantum_info->pad;
680 for (x=0; x < (ssize_t) number_pixels; x++)
682 p=PushLongPixel(endian,p,&pixel);
683 SetPixelIndex(image,PushColormapIndex(image,pixel,
684 &range_exception),q);
685 SetPixelPacket(image,image->colormap+(ssize_t)
686 GetPixelIndex(image,q),q);
687 p=PushLongPixel(endian,p,&pixel);
688 SetPixelAlpha(image,ScaleLongToQuantum(pixel),q);
689 p+=quantum_info->pad;
696 if (quantum_info->format == FloatingPointQuantumFormat)
701 for (x=0; x < (ssize_t) number_pixels; x++)
703 p=PushDoublePixel(&quantum_state,p,&pixel);
704 SetPixelIndex(image,PushColormapIndex(image,
705 ClampToQuantum(pixel),&range_exception),q);
706 SetPixelPacket(image,image->colormap+(ssize_t)
707 GetPixelIndex(image,q),q);
708 p=PushDoublePixel(&quantum_state,p,&pixel);
709 SetPixelAlpha(image,ClampToQuantum(pixel),q);
710 p+=quantum_info->pad;
718 range=GetQuantumRange(image->depth);
719 for (x=0; x < (ssize_t) number_pixels; x++)
721 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
722 SetPixelIndex(image,PushColormapIndex(image,pixel,
723 &range_exception),q);
724 SetPixelPacket(image,image->colormap+(ssize_t)
725 GetPixelIndex(image,q),q);
726 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
727 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
728 p+=quantum_info->pad;
734 if (range_exception != MagickFalse)
735 (void) ThrowMagickException(exception,GetMagickModule(),
736 CorruptImageError,"InvalidColormapIndex","`%s'",image->filename);
741 switch (quantum_info->depth)
748 for (x=0; x < (ssize_t) number_pixels; x++)
750 p=PushCharPixel(p,&pixel);
751 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
752 p=PushCharPixel(p,&pixel);
753 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
754 p=PushCharPixel(p,&pixel);
755 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
756 SetPixelAlpha(image,OpaqueAlpha,q);
757 p+=quantum_info->pad;
764 range=GetQuantumRange(image->depth);
765 if (quantum_info->pack == MagickFalse)
767 for (x=0; x < (ssize_t) number_pixels; x++)
769 p=PushLongPixel(endian,p,&pixel);
770 SetPixelRed(image,ScaleAnyToQuantum((pixel >> 22) & 0x3ff,
772 SetPixelGreen(image,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,
774 SetPixelBlue(image,ScaleAnyToQuantum((pixel >> 2) & 0x3ff,
776 p+=quantum_info->pad;
781 if (quantum_info->quantum == 32U)
783 for (x=0; x < (ssize_t) number_pixels; x++)
785 p=PushQuantumLongPixel(&quantum_state,image->depth,p,&pixel);
786 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
787 p=PushQuantumLongPixel(&quantum_state,image->depth,p,&pixel);
788 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
789 p=PushQuantumLongPixel(&quantum_state,image->depth,p,&pixel);
790 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
795 for (x=0; x < (ssize_t) number_pixels; x++)
797 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
798 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
799 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
800 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
801 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
802 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
809 range=GetQuantumRange(image->depth);
810 if (quantum_info->pack == MagickFalse)
815 for (x=0; x < (ssize_t) (3*number_pixels-1); x+=2)
817 p=PushShortPixel(endian,p,&pixel);
823 SetPixelRed(image,ScaleAnyToQuantum((QuantumAny)
824 (pixel >> 4),range),q);
829 SetPixelGreen(image,ScaleAnyToQuantum((QuantumAny)
830 (pixel >> 4),range),q);
835 SetPixelBlue(image,ScaleAnyToQuantum((QuantumAny)
836 (pixel >> 4),range),q);
841 p=PushShortPixel(endian,p,&pixel);
847 SetPixelRed(image,ScaleAnyToQuantum((QuantumAny)
848 (pixel >> 4),range),q);
853 SetPixelGreen(image,ScaleAnyToQuantum((QuantumAny)
854 (pixel >> 4),range),q);
859 SetPixelBlue(image,ScaleAnyToQuantum((QuantumAny)
860 (pixel >> 4),range),q);
865 p+=quantum_info->pad;
867 for (bit=0; bit < (ssize_t) (3*number_pixels % 2); bit++)
869 p=PushShortPixel(endian,p,&pixel);
875 SetPixelRed(image,ScaleAnyToQuantum((QuantumAny)
876 (pixel >> 4),range),q);
881 SetPixelGreen(image,ScaleAnyToQuantum((QuantumAny)
882 (pixel >> 4),range),q);
887 SetPixelBlue(image,ScaleAnyToQuantum((QuantumAny)
888 (pixel >> 4),range),q);
893 p+=quantum_info->pad;
899 if (quantum_info->quantum == 32U)
901 for (x=0; x < (ssize_t) number_pixels; x++)
903 p=PushQuantumLongPixel(&quantum_state,image->depth,p,&pixel);
904 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
905 p=PushQuantumLongPixel(&quantum_state,image->depth,p,&pixel);
906 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
907 p=PushQuantumLongPixel(&quantum_state,image->depth,p,&pixel);
908 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
913 for (x=0; x < (ssize_t) number_pixels; x++)
915 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
916 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
917 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
918 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
919 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
920 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
930 if (quantum_info->format == FloatingPointQuantumFormat)
932 for (x=0; x < (ssize_t) number_pixels; x++)
934 p=PushShortPixel(endian,p,&pixel);
935 SetPixelRed(image,ClampToQuantum((MagickRealType)
936 QuantumRange*HalfToSinglePrecision(pixel)),q);
937 p=PushShortPixel(endian,p,&pixel);
938 SetPixelGreen(image,ClampToQuantum((MagickRealType)
939 QuantumRange*HalfToSinglePrecision(pixel)),q);
940 p=PushShortPixel(endian,p,&pixel);
941 SetPixelBlue(image,ClampToQuantum((MagickRealType)
942 QuantumRange*HalfToSinglePrecision(pixel)),q);
943 p+=quantum_info->pad;
948 for (x=0; x < (ssize_t) number_pixels; x++)
950 p=PushShortPixel(endian,p,&pixel);
951 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
952 p=PushShortPixel(endian,p,&pixel);
953 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
954 p=PushShortPixel(endian,p,&pixel);
955 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
956 p+=quantum_info->pad;
966 if (quantum_info->format == FloatingPointQuantumFormat)
971 for (x=0; x < (ssize_t) number_pixels; x++)
973 p=PushFloatPixel(&quantum_state,p,&pixel);
974 SetPixelRed(image,ClampToQuantum(pixel),q);
975 p=PushFloatPixel(&quantum_state,p,&pixel);
976 SetPixelGreen(image,ClampToQuantum(pixel),q);
977 p=PushFloatPixel(&quantum_state,p,&pixel);
978 SetPixelBlue(image,ClampToQuantum(pixel),q);
979 p+=quantum_info->pad;
984 for (x=0; x < (ssize_t) number_pixels; x++)
986 p=PushLongPixel(endian,p,&pixel);
987 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
988 p=PushLongPixel(endian,p,&pixel);
989 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
990 p=PushLongPixel(endian,p,&pixel);
991 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
992 p+=quantum_info->pad;
999 if (quantum_info->format == FloatingPointQuantumFormat)
1004 for (x=0; x < (ssize_t) number_pixels; x++)
1006 p=PushDoublePixel(&quantum_state,p,&pixel);
1007 SetPixelRed(image,ClampToQuantum(pixel),q);
1008 p=PushDoublePixel(&quantum_state,p,&pixel);
1009 SetPixelGreen(image,ClampToQuantum(pixel),q);
1010 p=PushDoublePixel(&quantum_state,p,&pixel);
1011 SetPixelBlue(image,ClampToQuantum(pixel),q);
1012 p+=quantum_info->pad;
1020 range=GetQuantumRange(image->depth);
1021 for (x=0; x < (ssize_t) number_pixels; x++)
1023 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
1024 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
1025 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
1026 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
1027 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
1028 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
1039 switch (quantum_info->depth)
1046 for (x=0; x < (ssize_t) number_pixels; x++)
1048 p=PushCharPixel(p,&pixel);
1049 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
1050 p=PushCharPixel(p,&pixel);
1051 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
1052 p=PushCharPixel(p,&pixel);
1053 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
1054 p=PushCharPixel(p,&pixel);
1055 SetPixelAlpha(image,ScaleCharToQuantum(pixel),q);
1056 p+=quantum_info->pad;
1064 if (quantum_info->pack == MagickFalse)
1077 for (x=0; x < (ssize_t) number_pixels; x++)
1079 for (i=0; i < 4; i++)
1085 p=PushLongPixel(endian,p,&pixel);
1086 quantum=(size_t) (ScaleShortToQuantum((unsigned short)
1087 (((pixel >> 22) & 0x3ff) << 6)));
1092 quantum=(size_t) (ScaleShortToQuantum((unsigned short)
1093 (((pixel >> 12) & 0x3ff) << 6)));
1098 quantum=(size_t) (ScaleShortToQuantum((unsigned short)
1099 (((pixel >> 2) & 0x3ff) << 6)));
1105 case 0: SetPixelRed(image,(Quantum) quantum,q); break;
1106 case 1: SetPixelGreen(image,(Quantum) quantum,q); break;
1107 case 2: SetPixelBlue(image,(Quantum) quantum,q); break;
1108 case 3: SetPixelAlpha(image,(Quantum) quantum,q); break;
1112 p+=quantum_info->pad;
1117 for (x=0; x < (ssize_t) number_pixels; x++)
1119 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
1120 SetPixelRed(image,ScaleShortToQuantum((unsigned short)
1122 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
1123 SetPixelGreen(image,ScaleShortToQuantum((unsigned short)
1125 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
1126 SetPixelBlue(image,ScaleShortToQuantum((unsigned short)
1128 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
1129 SetPixelAlpha(image,ScaleShortToQuantum((unsigned short)
1140 if (quantum_info->format == FloatingPointQuantumFormat)
1142 for (x=0; x < (ssize_t) number_pixels; x++)
1144 p=PushShortPixel(endian,p,&pixel);
1145 SetPixelRed(image,ClampToQuantum((MagickRealType)
1146 QuantumRange*HalfToSinglePrecision(pixel)),q);
1147 p=PushShortPixel(endian,p,&pixel);
1148 SetPixelGreen(image,ClampToQuantum((MagickRealType)
1149 QuantumRange*HalfToSinglePrecision(pixel)),q);
1150 p=PushShortPixel(endian,p,&pixel);
1151 SetPixelBlue(image,ClampToQuantum((MagickRealType)
1152 QuantumRange*HalfToSinglePrecision(pixel)),q);
1153 p=PushShortPixel(endian,p,&pixel);
1154 SetPixelAlpha(image,ClampToQuantum((MagickRealType)
1155 QuantumRange*HalfToSinglePrecision(pixel)),q);
1156 p+=quantum_info->pad;
1161 for (x=0; x < (ssize_t) number_pixels; x++)
1163 p=PushShortPixel(endian,p,&pixel);
1164 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
1165 p=PushShortPixel(endian,p,&pixel);
1166 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
1167 p=PushShortPixel(endian,p,&pixel);
1168 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
1169 p=PushShortPixel(endian,p,&pixel);
1170 SetPixelAlpha(image,ScaleShortToQuantum(pixel),q);
1171 p+=quantum_info->pad;
1181 if (quantum_info->format == FloatingPointQuantumFormat)
1186 for (x=0; x < (ssize_t) number_pixels; x++)
1188 p=PushFloatPixel(&quantum_state,p,&pixel);
1189 SetPixelRed(image,ClampToQuantum(pixel),q);
1190 p=PushFloatPixel(&quantum_state,p,&pixel);
1191 SetPixelGreen(image,ClampToQuantum(pixel),q);
1192 p=PushFloatPixel(&quantum_state,p,&pixel);
1193 SetPixelBlue(image,ClampToQuantum(pixel),q);
1194 p=PushFloatPixel(&quantum_state,p,&pixel);
1195 SetPixelAlpha(image,ClampToQuantum(pixel),q);
1196 p+=quantum_info->pad;
1201 for (x=0; x < (ssize_t) number_pixels; x++)
1203 p=PushLongPixel(endian,p,&pixel);
1204 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
1205 p=PushLongPixel(endian,p,&pixel);
1206 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
1207 p=PushLongPixel(endian,p,&pixel);
1208 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
1209 p=PushLongPixel(endian,p,&pixel);
1210 SetPixelAlpha(image,ScaleLongToQuantum(pixel),q);
1211 p+=quantum_info->pad;
1218 if (quantum_info->format == FloatingPointQuantumFormat)
1223 for (x=0; x < (ssize_t) number_pixels; x++)
1225 p=PushDoublePixel(&quantum_state,p,&pixel);
1226 SetPixelRed(image,ClampToQuantum(pixel),q);
1227 p=PushDoublePixel(&quantum_state,p,&pixel);
1228 SetPixelGreen(image,ClampToQuantum(pixel),q);
1229 p=PushDoublePixel(&quantum_state,p,&pixel);
1230 SetPixelBlue(image,ClampToQuantum(pixel),q);
1231 p=PushDoublePixel(&quantum_state,p,&pixel);
1232 SetPixelAlpha(image,ClampToQuantum(pixel),q);
1233 p+=quantum_info->pad;
1241 range=GetQuantumRange(image->depth);
1242 for (x=0; x < (ssize_t) number_pixels; x++)
1244 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
1245 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
1246 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
1247 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
1248 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
1249 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
1250 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
1251 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
1261 switch (quantum_info->depth)
1270 white=(Quantum) QuantumRange;
1271 if (quantum_info->min_is_white != MagickFalse)
1273 black=(Quantum) QuantumRange;
1276 for (x=0; x < ((ssize_t) number_pixels-7); x+=8)
1278 for (bit=0; bit < 8; bit++)
1280 SetPixelRed(image,((*p) & (1 << (7-bit))) == 0 ? black :
1282 SetPixelGreen(image,GetPixelRed(image,q),q);
1283 SetPixelBlue(image,GetPixelRed(image,q),q);
1288 for (bit=0; bit < (ssize_t) (number_pixels % 8); bit++)
1290 SetPixelRed(image,((*p) & (0x01 << (7-bit))) == 0 ? black :
1292 SetPixelGreen(image,GetPixelRed(image,q),q);
1293 SetPixelBlue(image,GetPixelRed(image,q),q);
1302 register unsigned char
1305 range=GetQuantumRange(image->depth);
1306 for (x=0; x < ((ssize_t) number_pixels-1); x+=2)
1308 pixel=(unsigned char) ((*p >> 4) & 0xf);
1309 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
1310 SetPixelGreen(image,GetPixelRed(image,q),q);
1311 SetPixelBlue(image,GetPixelRed(image,q),q);
1313 pixel=(unsigned char) ((*p) & 0xf);
1314 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
1315 SetPixelGreen(image,GetPixelRed(image,q),q);
1316 SetPixelBlue(image,GetPixelRed(image,q),q);
1320 for (bit=0; bit < (ssize_t) (number_pixels % 2); bit++)
1322 pixel=(unsigned char) (*p++ >> 4);
1323 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
1324 SetPixelGreen(image,GetPixelRed(image,q),q);
1325 SetPixelBlue(image,GetPixelRed(image,q),q);
1335 if (quantum_info->min_is_white != MagickFalse)
1337 for (x=0; x < (ssize_t) number_pixels; x++)
1339 p=PushCharPixel(p,&pixel);
1340 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
1341 SetPixelGreen(image,GetPixelRed(image,q),q);
1342 SetPixelBlue(image,GetPixelRed(image,q),q);
1343 SetPixelAlpha(image,OpaqueAlpha,q);
1344 p+=quantum_info->pad;
1349 for (x=0; x < (ssize_t) number_pixels; x++)
1351 p=PushCharPixel(p,&pixel);
1352 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
1353 SetPixelGreen(image,GetPixelRed(image,q),q);
1354 SetPixelBlue(image,GetPixelRed(image,q),q);
1355 SetPixelAlpha(image,OpaqueAlpha,q);
1356 p+=quantum_info->pad;
1363 range=GetQuantumRange(image->depth);
1364 if (quantum_info->pack == MagickFalse)
1366 if (image->endian != LSBEndian)
1368 for (x=0; x < (ssize_t) (number_pixels-2); x+=3)
1370 p=PushLongPixel(endian,p,&pixel);
1371 SetPixelRed(image,ScaleAnyToQuantum((pixel >> 2) & 0x3ff,
1373 SetPixelGreen(image,GetPixelRed(image,q),q);
1374 SetPixelBlue(image,GetPixelRed(image,q),q);
1376 SetPixelRed(image,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,
1378 SetPixelGreen(image,GetPixelRed(image,q),q);
1379 SetPixelBlue(image,GetPixelRed(image,q),q);
1381 SetPixelRed(image,ScaleAnyToQuantum((pixel >> 22) & 0x3ff,
1383 SetPixelGreen(image,GetPixelRed(image,q),q);
1384 SetPixelBlue(image,GetPixelRed(image,q),q);
1385 p+=quantum_info->pad;
1388 p=PushLongPixel(endian,p,&pixel);
1389 if (x++ < (ssize_t) (number_pixels-1))
1391 SetPixelRed(image,ScaleAnyToQuantum((pixel >> 2) & 0x3ff,
1393 SetPixelGreen(image,GetPixelRed(image,q),q);
1394 SetPixelBlue(image,GetPixelRed(image,q),q);
1397 if (x++ < (ssize_t) number_pixels)
1399 SetPixelRed(image,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,
1401 SetPixelGreen(image,GetPixelRed(image,q),q);
1402 SetPixelBlue(image,GetPixelRed(image,q),q);
1407 for (x=0; x < (ssize_t) (number_pixels-2); x+=3)
1409 p=PushLongPixel(endian,p,&pixel);
1410 SetPixelRed(image,ScaleAnyToQuantum((pixel >> 22) & 0x3ff,
1412 SetPixelGreen(image,GetPixelRed(image,q),q);
1413 SetPixelBlue(image,GetPixelRed(image,q),q);
1415 SetPixelRed(image,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,
1417 SetPixelGreen(image,GetPixelRed(image,q),q);
1418 SetPixelBlue(image,GetPixelRed(image,q),q);
1420 SetPixelRed(image,ScaleAnyToQuantum((pixel >> 2) & 0x3ff,
1422 SetPixelGreen(image,GetPixelRed(image,q),q);
1423 SetPixelBlue(image,GetPixelRed(image,q),q);
1424 p+=quantum_info->pad;
1427 p=PushLongPixel(endian,p,&pixel);
1428 if (x++ < (ssize_t) (number_pixels-1))
1430 SetPixelRed(image,ScaleAnyToQuantum((pixel >> 22) & 0x3ff,
1432 SetPixelGreen(image,GetPixelRed(image,q),q);
1433 SetPixelBlue(image,GetPixelRed(image,q),q);
1436 if (x++ < (ssize_t) number_pixels)
1438 SetPixelRed(image,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,
1440 SetPixelGreen(image,GetPixelRed(image,q),q);
1441 SetPixelBlue(image,GetPixelRed(image,q),q);
1446 for (x=0; x < (ssize_t) number_pixels; x++)
1448 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
1449 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
1450 SetPixelGreen(image,GetPixelRed(image,q),q);
1451 SetPixelBlue(image,GetPixelRed(image,q),q);
1452 p+=quantum_info->pad;
1459 range=GetQuantumRange(image->depth);
1460 if (quantum_info->pack == MagickFalse)
1465 for (x=0; x < (ssize_t) (number_pixels-1); x+=2)
1467 p=PushShortPixel(endian,p,&pixel);
1468 SetPixelRed(image,ScaleAnyToQuantum((QuantumAny)
1469 (pixel >> 4),range),q);
1470 SetPixelGreen(image,GetPixelRed(image,q),q);
1471 SetPixelBlue(image,GetPixelRed(image,q),q);
1473 p=PushShortPixel(endian,p,&pixel);
1474 SetPixelRed(image,ScaleAnyToQuantum(
1475 (QuantumAny) (pixel >> 4),range),q);
1476 SetPixelGreen(image,GetPixelRed(image,q),q);
1477 SetPixelBlue(image,GetPixelRed(image,q),q);
1478 p+=quantum_info->pad;
1481 for (bit=0; bit < (ssize_t) (number_pixels % 2); bit++)
1483 p=PushShortPixel(endian,p,&pixel);
1484 SetPixelRed(image,ScaleAnyToQuantum(
1485 (QuantumAny) (pixel >> 4),range),q);
1486 SetPixelGreen(image,GetPixelRed(image,q),q);
1487 SetPixelBlue(image,GetPixelRed(image,q),q);
1488 p+=quantum_info->pad;
1495 for (x=0; x < (ssize_t) number_pixels; x++)
1497 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
1498 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
1499 SetPixelGreen(image,GetPixelRed(image,q),q);
1500 SetPixelBlue(image,GetPixelRed(image,q),q);
1501 p+=quantum_info->pad;
1511 if (quantum_info->min_is_white != MagickFalse)
1513 for (x=0; x < (ssize_t) number_pixels; x++)
1515 p=PushShortPixel(endian,p,&pixel);
1516 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
1517 SetPixelGreen(image,GetPixelRed(image,q),q);
1518 SetPixelBlue(image,GetPixelRed(image,q),q);
1519 p+=quantum_info->pad;
1524 if (quantum_info->format == FloatingPointQuantumFormat)
1526 for (x=0; x < (ssize_t) number_pixels; x++)
1528 p=PushShortPixel(endian,p,&pixel);
1529 SetPixelRed(image,ClampToQuantum((MagickRealType)
1530 QuantumRange*HalfToSinglePrecision(pixel)),q);
1531 SetPixelGreen(image,GetPixelRed(image,q),q);
1532 SetPixelBlue(image,GetPixelRed(image,q),q);
1533 p+=quantum_info->pad;
1538 for (x=0; x < (ssize_t) number_pixels; x++)
1540 p=PushShortPixel(endian,p,&pixel);
1541 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
1542 SetPixelGreen(image,GetPixelRed(image,q),q);
1543 SetPixelBlue(image,GetPixelRed(image,q),q);
1544 p+=quantum_info->pad;
1554 if (quantum_info->format == FloatingPointQuantumFormat)
1559 for (x=0; x < (ssize_t) number_pixels; x++)
1561 p=PushFloatPixel(&quantum_state,p,&pixel);
1562 SetPixelRed(image,ClampToQuantum(pixel),q);
1563 SetPixelGreen(image,GetPixelRed(image,q),q);
1564 SetPixelBlue(image,GetPixelRed(image,q),q);
1565 p+=quantum_info->pad;
1570 for (x=0; x < (ssize_t) number_pixels; x++)
1572 p=PushLongPixel(endian,p,&pixel);
1573 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
1574 SetPixelGreen(image,GetPixelRed(image,q),q);
1575 SetPixelBlue(image,GetPixelRed(image,q),q);
1576 p+=quantum_info->pad;
1583 if (quantum_info->format == FloatingPointQuantumFormat)
1588 for (x=0; x < (ssize_t) number_pixels; x++)
1590 p=PushDoublePixel(&quantum_state,p,&pixel);
1591 SetPixelRed(image,ClampToQuantum(pixel),q);
1592 SetPixelGreen(image,GetPixelRed(image,q),q);
1593 SetPixelBlue(image,GetPixelRed(image,q),q);
1594 p+=quantum_info->pad;
1602 range=GetQuantumRange(image->depth);
1603 for (x=0; x < (ssize_t) number_pixels; x++)
1605 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
1606 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
1607 SetPixelGreen(image,GetPixelRed(image,q),q);
1608 SetPixelBlue(image,GetPixelRed(image,q),q);
1609 p+=quantum_info->pad;
1617 case GrayAlphaQuantum:
1619 switch (quantum_info->depth)
1623 register unsigned char
1626 for (x=0; x < ((ssize_t) number_pixels-3); x+=4)
1628 for (bit=0; bit < 8; bit+=2)
1630 pixel=(unsigned char)
1631 (((*p) & (1 << (7-bit))) != 0 ? 0x00 : 0x01);
1632 SetPixelRed(image,(Quantum) (pixel == 0 ? 0 : QuantumRange),q);
1633 SetPixelGreen(image,GetPixelRed(image,q),q);
1634 SetPixelBlue(image,GetPixelRed(image,q),q);
1635 SetPixelAlpha(image,((*p) & (1UL << (unsigned char)
1636 (6-bit))) == 0 ? TransparentAlpha : OpaqueAlpha,q);
1641 for (bit=0; bit <= (ssize_t) (number_pixels % 4); bit+=2)
1643 pixel=(unsigned char) (((*p) & (1 << (7-bit))) != 0 ? 0x00 : 0x01);
1644 SetPixelRed(image,(Quantum) (pixel != 0 ? 0 : QuantumRange),q);
1645 SetPixelGreen(image,GetPixelRed(image,q),q);
1646 SetPixelBlue(image,GetPixelRed(image,q),q);
1647 SetPixelAlpha(image,((*p) & (1UL << (unsigned char)
1648 (6-bit))) == 0 ? TransparentAlpha : OpaqueAlpha,q);
1657 register unsigned char
1660 range=GetQuantumRange(image->depth);
1661 for (x=0; x < (ssize_t) number_pixels; x++)
1663 pixel=(unsigned char) ((*p >> 4) & 0xf);
1664 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
1665 SetPixelGreen(image,GetPixelRed(image,q),q);
1666 SetPixelBlue(image,GetPixelRed(image,q),q);
1667 pixel=(unsigned char) ((*p) & 0xf);
1668 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
1679 for (x=0; x < (ssize_t) number_pixels; x++)
1681 p=PushCharPixel(p,&pixel);
1682 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
1683 SetPixelGreen(image,GetPixelRed(image,q),q);
1684 SetPixelBlue(image,GetPixelRed(image,q),q);
1685 p=PushCharPixel(p,&pixel);
1686 SetPixelAlpha(image,ScaleCharToQuantum(pixel),q);
1687 p+=quantum_info->pad;
1694 range=GetQuantumRange(image->depth);
1695 for (x=0; x < (ssize_t) number_pixels; x++)
1697 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
1698 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
1699 SetPixelGreen(image,GetPixelRed(image,q),q);
1700 SetPixelBlue(image,GetPixelRed(image,q),q);
1701 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
1702 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
1703 p+=quantum_info->pad;
1710 range=GetQuantumRange(image->depth);
1711 for (x=0; x < (ssize_t) number_pixels; x++)
1713 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
1714 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
1715 SetPixelGreen(image,GetPixelRed(image,q),q);
1716 SetPixelBlue(image,GetPixelRed(image,q),q);
1717 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
1718 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
1719 p+=quantum_info->pad;
1729 if (quantum_info->format == FloatingPointQuantumFormat)
1731 for (x=0; x < (ssize_t) number_pixels; x++)
1733 p=PushShortPixel(endian,p,&pixel);
1734 SetPixelRed(image,ClampToQuantum((MagickRealType)
1735 QuantumRange*HalfToSinglePrecision(pixel)),q);
1736 SetPixelGreen(image,GetPixelRed(image,q),q);
1737 SetPixelBlue(image,GetPixelRed(image,q),q);
1738 p=PushShortPixel(endian,p,&pixel);
1739 SetPixelAlpha(image,ClampToQuantum((MagickRealType)
1740 QuantumRange*HalfToSinglePrecision(pixel)),q);
1741 p+=quantum_info->pad;
1746 for (x=0; x < (ssize_t) number_pixels; x++)
1748 p=PushShortPixel(endian,p,&pixel);
1749 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
1750 SetPixelGreen(image,GetPixelRed(image,q),q);
1751 SetPixelBlue(image,GetPixelRed(image,q),q);
1752 p=PushShortPixel(endian,p,&pixel);
1753 SetPixelAlpha(image,ScaleShortToQuantum(pixel),q);
1754 p+=quantum_info->pad;
1764 if (quantum_info->format == FloatingPointQuantumFormat)
1769 for (x=0; x < (ssize_t) number_pixels; x++)
1771 p=PushFloatPixel(&quantum_state,p,&pixel);
1772 SetPixelRed(image,ClampToQuantum(pixel),q);
1773 SetPixelGreen(image,GetPixelRed(image,q),q);
1774 SetPixelBlue(image,GetPixelRed(image,q),q);
1775 p=PushFloatPixel(&quantum_state,p,&pixel);
1776 SetPixelAlpha(image,ClampToQuantum(pixel),q);
1777 p+=quantum_info->pad;
1782 for (x=0; x < (ssize_t) number_pixels; x++)
1784 p=PushLongPixel(endian,p,&pixel);
1785 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
1786 SetPixelGreen(image,GetPixelRed(image,q),q);
1787 SetPixelBlue(image,GetPixelRed(image,q),q);
1788 p=PushLongPixel(endian,p,&pixel);
1789 SetPixelAlpha(image,ScaleLongToQuantum(pixel),q);
1790 p+=quantum_info->pad;
1797 if (quantum_info->format == FloatingPointQuantumFormat)
1802 for (x=0; x < (ssize_t) number_pixels; x++)
1804 p=PushDoublePixel(&quantum_state,p,&pixel);
1805 SetPixelRed(image,ClampToQuantum(pixel),q);
1806 SetPixelGreen(image,GetPixelRed(image,q),q);
1807 SetPixelBlue(image,GetPixelRed(image,q),q);
1808 p=PushDoublePixel(&quantum_state,p,&pixel);
1809 SetPixelAlpha(image,ClampToQuantum(pixel),q);
1810 p+=quantum_info->pad;
1818 range=GetQuantumRange(image->depth);
1819 for (x=0; x < (ssize_t) number_pixels; x++)
1821 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
1822 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
1823 SetPixelGreen(image,GetPixelRed(image,q),q);
1824 SetPixelBlue(image,GetPixelRed(image,q),q);
1825 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
1826 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
1827 p+=quantum_info->pad;
1838 switch (quantum_info->depth)
1845 for (x=0; x < (ssize_t) number_pixels; x++)
1847 p=PushCharPixel(p,&pixel);
1848 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
1849 p+=quantum_info->pad;
1859 if (quantum_info->format == FloatingPointQuantumFormat)
1861 for (x=0; x < (ssize_t) number_pixels; x++)
1863 p=PushShortPixel(endian,p,&pixel);
1864 SetPixelRed(image,ClampToQuantum((MagickRealType)
1865 QuantumRange*HalfToSinglePrecision(pixel)),q);
1866 p+=quantum_info->pad;
1871 for (x=0; x < (ssize_t) number_pixels; x++)
1873 p=PushShortPixel(endian,p,&pixel);
1874 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
1875 p+=quantum_info->pad;
1885 if (quantum_info->format == FloatingPointQuantumFormat)
1890 for (x=0; x < (ssize_t) number_pixels; x++)
1892 p=PushFloatPixel(&quantum_state,p,&pixel);
1893 SetPixelRed(image,ClampToQuantum(pixel),q);
1894 p+=quantum_info->pad;
1899 for (x=0; x < (ssize_t) number_pixels; x++)
1901 p=PushLongPixel(endian,p,&pixel);
1902 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
1903 p+=quantum_info->pad;
1910 if (quantum_info->format == FloatingPointQuantumFormat)
1915 for (x=0; x < (ssize_t) number_pixels; x++)
1917 p=PushDoublePixel(&quantum_state,p,&pixel);
1918 SetPixelRed(image,ClampToQuantum(pixel),q);
1919 p+=quantum_info->pad;
1927 range=GetQuantumRange(image->depth);
1928 for (x=0; x < (ssize_t) number_pixels; x++)
1930 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
1931 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
1932 p+=quantum_info->pad;
1941 case MagentaQuantum:
1943 switch (quantum_info->depth)
1950 for (x=0; x < (ssize_t) number_pixels; x++)
1952 p=PushCharPixel(p,&pixel);
1953 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
1954 p+=quantum_info->pad;
1964 if (quantum_info->format == FloatingPointQuantumFormat)
1966 for (x=0; x < (ssize_t) number_pixels; x++)
1968 p=PushShortPixel(endian,p,&pixel);
1969 SetPixelGreen(image,ClampToQuantum((MagickRealType)
1970 QuantumRange*HalfToSinglePrecision(pixel)),q);
1971 p+=quantum_info->pad;
1976 for (x=0; x < (ssize_t) number_pixels; x++)
1978 p=PushShortPixel(endian,p,&pixel);
1979 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
1980 p+=quantum_info->pad;
1990 if (quantum_info->format == FloatingPointQuantumFormat)
1995 for (x=0; x < (ssize_t) number_pixels; x++)
1997 p=PushFloatPixel(&quantum_state,p,&pixel);
1998 SetPixelGreen(image,ClampToQuantum(pixel),q);
1999 p+=quantum_info->pad;
2004 for (x=0; x < (ssize_t) number_pixels; x++)
2006 p=PushLongPixel(endian,p,&pixel);
2007 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
2008 p+=quantum_info->pad;
2015 if (quantum_info->format == FloatingPointQuantumFormat)
2020 for (x=0; x < (ssize_t) number_pixels; x++)
2022 p=PushDoublePixel(&quantum_state,p,&pixel);
2023 SetPixelGreen(image,ClampToQuantum(pixel),q);
2024 p+=quantum_info->pad;
2032 range=GetQuantumRange(image->depth);
2033 for (x=0; x < (ssize_t) number_pixels; x++)
2035 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
2036 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
2037 p+=quantum_info->pad;
2048 switch (quantum_info->depth)
2055 for (x=0; x < (ssize_t) number_pixels; x++)
2057 p=PushCharPixel(p,&pixel);
2058 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
2059 p+=quantum_info->pad;
2069 if (quantum_info->format == FloatingPointQuantumFormat)
2071 for (x=0; x < (ssize_t) number_pixels; x++)
2073 p=PushShortPixel(endian,p,&pixel);
2074 SetPixelBlue(image,ClampToQuantum((MagickRealType)
2075 QuantumRange*HalfToSinglePrecision(pixel)),q);
2076 p+=quantum_info->pad;
2081 for (x=0; x < (ssize_t) number_pixels; x++)
2083 p=PushShortPixel(endian,p,&pixel);
2084 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
2085 p+=quantum_info->pad;
2095 if (quantum_info->format == FloatingPointQuantumFormat)
2100 for (x=0; x < (ssize_t) number_pixels; x++)
2102 p=PushFloatPixel(&quantum_state,p,&pixel);
2103 SetPixelBlue(image,ClampToQuantum(pixel),q);
2104 p+=quantum_info->pad;
2109 for (x=0; x < (ssize_t) number_pixels; x++)
2111 p=PushLongPixel(endian,p,&pixel);
2112 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
2113 p+=quantum_info->pad;
2120 if (quantum_info->format == FloatingPointQuantumFormat)
2125 for (x=0; x < (ssize_t) number_pixels; x++)
2127 p=PushDoublePixel(&quantum_state,p,&pixel);
2128 SetPixelBlue(image,ClampToQuantum(pixel),q);
2129 p+=quantum_info->pad;
2137 range=GetQuantumRange(image->depth);
2138 for (x=0; x < (ssize_t) number_pixels; x++)
2140 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
2141 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
2142 p+=quantum_info->pad;
2152 switch (quantum_info->depth)
2159 for (x=0; x < (ssize_t) number_pixels; x++)
2161 p=PushCharPixel(p,&pixel);
2162 SetPixelAlpha(image,ScaleCharToQuantum(pixel),q);
2163 p+=quantum_info->pad;
2173 if (quantum_info->format == FloatingPointQuantumFormat)
2175 for (x=0; x < (ssize_t) number_pixels; x++)
2177 p=PushShortPixel(endian,p,&pixel);
2178 SetPixelAlpha(image,ClampToQuantum((MagickRealType)
2179 QuantumRange*HalfToSinglePrecision(pixel)),q);
2180 p+=quantum_info->pad;
2185 for (x=0; x < (ssize_t) number_pixels; x++)
2187 p=PushShortPixel(endian,p,&pixel);
2188 SetPixelAlpha(image,ScaleShortToQuantum(pixel),q);
2189 p+=quantum_info->pad;
2199 if (quantum_info->format == FloatingPointQuantumFormat)
2204 for (x=0; x < (ssize_t) number_pixels; x++)
2206 p=PushFloatPixel(&quantum_state,p,&pixel);
2207 SetPixelAlpha(image,ClampToQuantum(pixel),q);
2208 p+=quantum_info->pad;
2213 for (x=0; x < (ssize_t) number_pixels; x++)
2215 p=PushLongPixel(endian,p,&pixel);
2216 SetPixelAlpha(image,ScaleLongToQuantum(pixel),q);
2217 p+=quantum_info->pad;
2224 if (quantum_info->format == FloatingPointQuantumFormat)
2229 for (x=0; x < (ssize_t) number_pixels; x++)
2231 p=PushDoublePixel(&quantum_state,p,&pixel);
2232 SetPixelAlpha(image,ClampToQuantum(pixel),q);
2233 p+=quantum_info->pad;
2241 range=GetQuantumRange(image->depth);
2242 for (x=0; x < (ssize_t) number_pixels; x++)
2244 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
2245 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
2246 p+=quantum_info->pad;
2256 if (image->colorspace != CMYKColorspace)
2258 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2259 "ColorSeparatedImageRequired","`%s'",image->filename);
2262 switch (quantum_info->depth)
2269 for (x=0; x < (ssize_t) number_pixels; x++)
2271 p=PushCharPixel(p,&pixel);
2272 SetPixelBlack(image,ScaleCharToQuantum(pixel),q);
2273 p+=quantum_info->pad;
2283 if (quantum_info->format == FloatingPointQuantumFormat)
2285 for (x=0; x < (ssize_t) number_pixels; x++)
2287 p=PushShortPixel(endian,p,&pixel);
2288 SetPixelBlack(image,ClampToQuantum((MagickRealType)
2289 QuantumRange*HalfToSinglePrecision(pixel)),q);
2290 p+=quantum_info->pad;
2295 for (x=0; x < (ssize_t) number_pixels; x++)
2297 p=PushShortPixel(endian,p,&pixel);
2298 SetPixelBlack(image,ScaleShortToQuantum(pixel),q);
2299 p+=quantum_info->pad;
2309 if (quantum_info->format == FloatingPointQuantumFormat)
2314 for (x=0; x < (ssize_t) number_pixels; x++)
2316 p=PushFloatPixel(&quantum_state,p,&pixel);
2317 SetPixelBlack(image,ClampToQuantum(pixel),q);
2318 p+=quantum_info->pad;
2323 for (x=0; x < (ssize_t) number_pixels; x++)
2325 p=PushLongPixel(endian,p,&pixel);
2326 SetPixelBlack(image,ScaleLongToQuantum(pixel),q);
2327 p+=quantum_info->pad;
2334 if (quantum_info->format == FloatingPointQuantumFormat)
2339 for (x=0; x < (ssize_t) number_pixels; x++)
2341 p=PushDoublePixel(&quantum_state,p,&pixel);
2342 SetPixelBlack(image,ClampToQuantum(pixel),q);
2343 p+=quantum_info->pad;
2351 range=GetQuantumRange(image->depth);
2352 for (x=0; x < (ssize_t) number_pixels; x++)
2354 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
2355 SetPixelBlack(image,ScaleAnyToQuantum(pixel,range),q);
2356 p+=quantum_info->pad;
2367 switch (quantum_info->depth)
2374 for (x=0; x < (ssize_t) number_pixels; x++)
2376 p=PushCharPixel(p,&pixel);
2377 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
2378 p=PushCharPixel(p,&pixel);
2379 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
2380 p=PushCharPixel(p,&pixel);
2381 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
2382 SetPixelAlpha(image,OpaqueAlpha,q);
2383 p+=quantum_info->pad;
2390 range=GetQuantumRange(image->depth);
2391 if (quantum_info->pack == MagickFalse)
2393 for (x=0; x < (ssize_t) number_pixels; x++)
2395 p=PushLongPixel(endian,p,&pixel);
2396 SetPixelRed(image,ScaleAnyToQuantum((pixel >> 22) & 0x3ff,
2398 SetPixelGreen(image,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,
2400 SetPixelBlue(image,ScaleAnyToQuantum((pixel >> 2) & 0x3ff,
2402 p+=quantum_info->pad;
2407 if (quantum_info->quantum == 32U)
2409 for (x=0; x < (ssize_t) number_pixels; x++)
2411 p=PushQuantumLongPixel(&quantum_state,image->depth,p,&pixel);
2412 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
2413 p=PushQuantumLongPixel(&quantum_state,image->depth,p,&pixel);
2414 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
2415 p=PushQuantumLongPixel(&quantum_state,image->depth,p,&pixel);
2416 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
2421 for (x=0; x < (ssize_t) number_pixels; x++)
2423 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
2424 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
2425 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
2426 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
2427 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
2428 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
2435 range=GetQuantumRange(image->depth);
2436 if (quantum_info->pack == MagickFalse)
2441 for (x=0; x < (ssize_t) (3*number_pixels-1); x+=2)
2443 p=PushShortPixel(endian,p,&pixel);
2449 SetPixelRed(image,ScaleAnyToQuantum((QuantumAny)
2450 (pixel >> 4),range),q);
2455 SetPixelGreen(image,ScaleAnyToQuantum((QuantumAny)
2456 (pixel >> 4),range),q);
2461 SetPixelBlue(image,ScaleAnyToQuantum((QuantumAny)
2462 (pixel >> 4),range),q);
2467 p=PushShortPixel(endian,p,&pixel);
2473 SetPixelRed(image,ScaleAnyToQuantum((QuantumAny)
2474 (pixel >> 4),range),q);
2479 SetPixelGreen(image,ScaleAnyToQuantum((QuantumAny)
2480 (pixel >> 4),range),q);
2485 SetPixelBlue(image,ScaleAnyToQuantum((QuantumAny)
2486 (pixel >> 4),range),q);
2491 p+=quantum_info->pad;
2493 for (bit=0; bit < (ssize_t) (3*number_pixels % 2); bit++)
2495 p=PushShortPixel(endian,p,&pixel);
2496 switch ((x+bit) % 3)
2501 SetPixelRed(image,ScaleAnyToQuantum((QuantumAny)
2502 (pixel >> 4),range),q);
2507 SetPixelGreen(image,ScaleAnyToQuantum((QuantumAny)
2508 (pixel >> 4),range),q);
2513 SetPixelBlue(image,ScaleAnyToQuantum((QuantumAny)
2514 (pixel >> 4),range),q);
2519 p+=quantum_info->pad;
2525 if (quantum_info->quantum == 32U)
2527 for (x=0; x < (ssize_t) number_pixels; x++)
2529 p=PushQuantumLongPixel(&quantum_state,image->depth,p,&pixel);
2530 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
2531 p=PushQuantumLongPixel(&quantum_state,image->depth,p,&pixel);
2532 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
2533 p=PushQuantumLongPixel(&quantum_state,image->depth,p,&pixel);
2534 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
2539 for (x=0; x < (ssize_t) number_pixels; x++)
2541 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
2542 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
2543 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
2544 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
2545 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
2546 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
2556 if (quantum_info->format == FloatingPointQuantumFormat)
2558 for (x=0; x < (ssize_t) number_pixels; x++)
2560 p=PushShortPixel(endian,p,&pixel);
2561 SetPixelRed(image,ClampToQuantum((MagickRealType)
2562 QuantumRange*HalfToSinglePrecision(pixel)),q);
2563 p=PushShortPixel(endian,p,&pixel);
2564 SetPixelGreen(image,ClampToQuantum((MagickRealType)
2565 QuantumRange*HalfToSinglePrecision(pixel)),q);
2566 p=PushShortPixel(endian,p,&pixel);
2567 SetPixelBlue(image,ClampToQuantum((MagickRealType)
2568 QuantumRange*HalfToSinglePrecision(pixel)),q);
2569 p+=quantum_info->pad;
2574 for (x=0; x < (ssize_t) number_pixels; x++)
2576 p=PushShortPixel(endian,p,&pixel);
2577 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
2578 p=PushShortPixel(endian,p,&pixel);
2579 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
2580 p=PushShortPixel(endian,p,&pixel);
2581 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
2582 p+=quantum_info->pad;
2592 if (quantum_info->format == FloatingPointQuantumFormat)
2597 for (x=0; x < (ssize_t) number_pixels; x++)
2599 p=PushFloatPixel(&quantum_state,p,&pixel);
2600 SetPixelRed(image,ClampToQuantum(pixel),q);
2601 p=PushFloatPixel(&quantum_state,p,&pixel);
2602 SetPixelGreen(image,ClampToQuantum(pixel),q);
2603 p=PushFloatPixel(&quantum_state,p,&pixel);
2604 SetPixelBlue(image,ClampToQuantum(pixel),q);
2605 p+=quantum_info->pad;
2610 for (x=0; x < (ssize_t) number_pixels; x++)
2612 p=PushLongPixel(endian,p,&pixel);
2613 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
2614 p=PushLongPixel(endian,p,&pixel);
2615 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
2616 p=PushLongPixel(endian,p,&pixel);
2617 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
2618 p+=quantum_info->pad;
2625 if (quantum_info->format == FloatingPointQuantumFormat)
2630 for (x=0; x < (ssize_t) number_pixels; x++)
2632 p=PushDoublePixel(&quantum_state,p,&pixel);
2633 SetPixelRed(image,ClampToQuantum(pixel),q);
2634 p=PushDoublePixel(&quantum_state,p,&pixel);
2635 SetPixelGreen(image,ClampToQuantum(pixel),q);
2636 p=PushDoublePixel(&quantum_state,p,&pixel);
2637 SetPixelBlue(image,ClampToQuantum(pixel),q);
2638 p+=quantum_info->pad;
2646 range=GetQuantumRange(image->depth);
2647 for (x=0; x < (ssize_t) number_pixels; x++)
2649 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
2650 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
2651 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
2652 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
2653 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
2654 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
2666 switch (quantum_info->depth)
2673 for (x=0; x < (ssize_t) number_pixels; x++)
2675 p=PushCharPixel(p,&pixel);
2676 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
2677 p=PushCharPixel(p,&pixel);
2678 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
2679 p=PushCharPixel(p,&pixel);
2680 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
2681 p=PushCharPixel(p,&pixel);
2682 SetPixelAlpha(image,ScaleCharToQuantum(pixel),q);
2683 p+=quantum_info->pad;
2691 if (quantum_info->pack == MagickFalse)
2704 for (x=0; x < (ssize_t) number_pixels; x++)
2706 for (i=0; i < 4; i++)
2712 p=PushLongPixel(endian,p,&pixel);
2713 quantum=(size_t) (ScaleShortToQuantum((unsigned short)
2714 (((pixel >> 22) & 0x3ff) << 6)));
2719 quantum=(size_t) (ScaleShortToQuantum((unsigned short)
2720 (((pixel >> 12) & 0x3ff) << 6)));
2725 quantum=(size_t) (ScaleShortToQuantum((unsigned short)
2726 (((pixel >> 2) & 0x3ff) << 6)));
2732 case 0: SetPixelRed(image,(Quantum) quantum,q); break;
2733 case 1: SetPixelGreen(image,(Quantum) quantum,q); break;
2734 case 2: SetPixelBlue(image,(Quantum) quantum,q); break;
2735 case 3: SetPixelAlpha(image,(Quantum) quantum,q); break;
2739 p+=quantum_info->pad;
2744 for (x=0; x < (ssize_t) number_pixels; x++)
2746 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
2747 SetPixelRed(image,ScaleShortToQuantum((unsigned short)
2749 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
2750 SetPixelGreen(image,ScaleShortToQuantum((unsigned short)
2752 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
2753 SetPixelBlue(image,ScaleShortToQuantum((unsigned short)
2755 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
2756 SetPixelAlpha(image,ScaleShortToQuantum((unsigned short)
2767 if (quantum_info->format == FloatingPointQuantumFormat)
2769 for (x=0; x < (ssize_t) number_pixels; x++)
2771 p=PushShortPixel(endian,p,&pixel);
2772 SetPixelRed(image,ClampToQuantum((MagickRealType)
2773 QuantumRange*HalfToSinglePrecision(pixel)),q);
2774 p=PushShortPixel(endian,p,&pixel);
2775 SetPixelGreen(image,ClampToQuantum((MagickRealType)
2776 QuantumRange*HalfToSinglePrecision(pixel)),q);
2777 p=PushShortPixel(endian,p,&pixel);
2778 SetPixelBlue(image,ClampToQuantum((MagickRealType)
2779 QuantumRange*HalfToSinglePrecision(pixel)),q);
2780 p=PushShortPixel(endian,p,&pixel);
2781 SetPixelAlpha(image,ClampToQuantum((MagickRealType)
2782 QuantumRange*HalfToSinglePrecision(pixel)),q);
2783 p+=quantum_info->pad;
2788 for (x=0; x < (ssize_t) number_pixels; x++)
2790 p=PushShortPixel(endian,p,&pixel);
2791 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
2792 p=PushShortPixel(endian,p,&pixel);
2793 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
2794 p=PushShortPixel(endian,p,&pixel);
2795 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
2796 p=PushShortPixel(endian,p,&pixel);
2797 SetPixelAlpha(image,ScaleShortToQuantum(pixel),q);
2798 p+=quantum_info->pad;
2808 if (quantum_info->format == FloatingPointQuantumFormat)
2813 for (x=0; x < (ssize_t) number_pixels; x++)
2815 p=PushFloatPixel(&quantum_state,p,&pixel);
2816 SetPixelRed(image,ClampToQuantum(pixel),q);
2817 p=PushFloatPixel(&quantum_state,p,&pixel);
2818 SetPixelGreen(image,ClampToQuantum(pixel),q);
2819 p=PushFloatPixel(&quantum_state,p,&pixel);
2820 SetPixelBlue(image,ClampToQuantum(pixel),q);
2821 p=PushFloatPixel(&quantum_state,p,&pixel);
2822 SetPixelAlpha(image,ClampToQuantum(pixel),q);
2823 p+=quantum_info->pad;
2828 for (x=0; x < (ssize_t) number_pixels; x++)
2830 p=PushLongPixel(endian,p,&pixel);
2831 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
2832 p=PushLongPixel(endian,p,&pixel);
2833 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
2834 p=PushLongPixel(endian,p,&pixel);
2835 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
2836 p=PushLongPixel(endian,p,&pixel);
2837 SetPixelAlpha(image,ScaleLongToQuantum(pixel),q);
2838 p+=quantum_info->pad;
2845 if (quantum_info->format == FloatingPointQuantumFormat)
2850 for (x=0; x < (ssize_t) number_pixels; x++)
2852 p=PushDoublePixel(&quantum_state,p,&pixel);
2853 SetPixelRed(image,ClampToQuantum(pixel),q);
2854 p=PushDoublePixel(&quantum_state,p,&pixel);
2855 SetPixelGreen(image,ClampToQuantum(pixel),q);
2856 p=PushDoublePixel(&quantum_state,p,&pixel);
2857 SetPixelBlue(image,ClampToQuantum(pixel),q);
2858 p=PushDoublePixel(&quantum_state,p,&pixel);
2859 SetPixelAlpha(image,ClampToQuantum(pixel),q);
2860 p+=quantum_info->pad;
2868 range=GetQuantumRange(image->depth);
2869 for (x=0; x < (ssize_t) number_pixels; x++)
2871 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
2872 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
2873 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
2874 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
2875 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
2876 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
2877 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
2878 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
2888 if (image->colorspace != CMYKColorspace)
2890 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2891 "ColorSeparatedImageRequired","`%s'",image->filename);
2894 switch (quantum_info->depth)
2901 for (x=0; x < (ssize_t) number_pixels; x++)
2903 p=PushCharPixel(p,&pixel);
2904 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
2905 p=PushCharPixel(p,&pixel);
2906 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
2907 p=PushCharPixel(p,&pixel);
2908 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
2909 p=PushCharPixel(p,&pixel);
2910 SetPixelBlack(image,ScaleCharToQuantum(pixel),q);
2911 p+=quantum_info->pad;
2921 if (quantum_info->format == FloatingPointQuantumFormat)
2923 for (x=0; x < (ssize_t) number_pixels; x++)
2925 p=PushShortPixel(endian,p,&pixel);
2926 SetPixelRed(image,ClampToQuantum((MagickRealType)
2927 QuantumRange*HalfToSinglePrecision(pixel)),q);
2928 p=PushShortPixel(endian,p,&pixel);
2929 SetPixelGreen(image,ClampToQuantum((MagickRealType)
2930 QuantumRange*HalfToSinglePrecision(pixel)),q);
2931 p=PushShortPixel(endian,p,&pixel);
2932 SetPixelBlue(image,ClampToQuantum((MagickRealType)
2933 QuantumRange*HalfToSinglePrecision(pixel)),q);
2934 p=PushShortPixel(endian,p,&pixel);
2935 SetPixelBlack(image,ClampToQuantum((MagickRealType)
2936 QuantumRange*HalfToSinglePrecision(pixel)),q);
2937 p+=quantum_info->pad;
2942 for (x=0; x < (ssize_t) number_pixels; x++)
2944 p=PushShortPixel(endian,p,&pixel);
2945 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
2946 p=PushShortPixel(endian,p,&pixel);
2947 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
2948 p=PushShortPixel(endian,p,&pixel);
2949 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
2950 p=PushShortPixel(endian,p,&pixel);
2951 SetPixelBlack(image,ScaleShortToQuantum(pixel),q);
2952 p+=quantum_info->pad;
2962 if (quantum_info->format == FloatingPointQuantumFormat)
2967 for (x=0; x < (ssize_t) number_pixels; x++)
2969 p=PushFloatPixel(&quantum_state,p,&pixel);
2970 SetPixelRed(image,ClampToQuantum(pixel),q);
2971 p=PushFloatPixel(&quantum_state,p,&pixel);
2972 SetPixelGreen(image,ClampToQuantum(pixel),q);
2973 p=PushFloatPixel(&quantum_state,p,&pixel);
2974 SetPixelBlue(image,ClampToQuantum(pixel),q);
2975 p=PushFloatPixel(&quantum_state,p,&pixel);
2976 SetPixelBlack(image,ClampToQuantum(pixel),q);
2977 p+=quantum_info->pad;
2982 for (x=0; x < (ssize_t) number_pixels; x++)
2984 p=PushLongPixel(endian,p,&pixel);
2985 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
2986 p=PushLongPixel(endian,p,&pixel);
2987 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
2988 p=PushLongPixel(endian,p,&pixel);
2989 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
2990 p=PushLongPixel(endian,p,&pixel);
2991 SetPixelBlack(image,ScaleLongToQuantum(pixel),q);
2992 p+=quantum_info->pad;
2999 if (quantum_info->format == FloatingPointQuantumFormat)
3004 for (x=0; x < (ssize_t) number_pixels; x++)
3006 p=PushDoublePixel(&quantum_state,p,&pixel);
3007 SetPixelRed(image,ClampToQuantum(pixel),q);
3008 p=PushDoublePixel(&quantum_state,p,&pixel);
3009 SetPixelGreen(image,ClampToQuantum(pixel),q);
3010 p=PushDoublePixel(&quantum_state,p,&pixel);
3011 SetPixelBlue(image,ClampToQuantum(pixel),q);
3012 p=PushDoublePixel(&quantum_state,p,&pixel);
3013 SetPixelBlack(image,ClampToQuantum(pixel),q);
3014 p+=quantum_info->pad;
3022 range=GetQuantumRange(image->depth);
3023 for (x=0; x < (ssize_t) number_pixels; x++)
3025 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
3026 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
3027 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
3028 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
3029 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
3030 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
3031 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
3032 SetPixelBlack(image,ScaleAnyToQuantum(pixel,range),q);
3043 if (image->colorspace != CMYKColorspace)
3045 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
3046 "ColorSeparatedImageRequired","`%s'",image->filename);
3049 switch (quantum_info->depth)
3056 for (x=0; x < (ssize_t) number_pixels; x++)
3058 p=PushCharPixel(p,&pixel);
3059 SetPixelRed(image,ScaleCharToQuantum(pixel),q);
3060 p=PushCharPixel(p,&pixel);
3061 SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
3062 p=PushCharPixel(p,&pixel);
3063 SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
3064 p=PushCharPixel(p,&pixel);
3065 SetPixelBlack(image,ScaleCharToQuantum(pixel),q);
3066 p=PushCharPixel(p,&pixel);
3067 SetPixelAlpha(image,ScaleCharToQuantum(pixel),q);
3068 p+=quantum_info->pad;
3078 if (quantum_info->format == FloatingPointQuantumFormat)
3080 for (x=0; x < (ssize_t) number_pixels; x++)
3082 p=PushShortPixel(endian,p,&pixel);
3083 SetPixelRed(image,ClampToQuantum((MagickRealType)
3084 QuantumRange*HalfToSinglePrecision(pixel)),q);
3085 p=PushShortPixel(endian,p,&pixel);
3086 SetPixelGreen(image,ClampToQuantum((MagickRealType)
3087 QuantumRange*HalfToSinglePrecision(pixel)),q);
3088 p=PushShortPixel(endian,p,&pixel);
3089 SetPixelBlue(image,ClampToQuantum((MagickRealType)
3090 QuantumRange*HalfToSinglePrecision(pixel)),q);
3091 p=PushShortPixel(endian,p,&pixel);
3092 SetPixelBlack(image,ClampToQuantum((MagickRealType)
3093 QuantumRange*HalfToSinglePrecision(pixel)),q);
3094 p=PushShortPixel(endian,p,&pixel);
3095 SetPixelAlpha(image,ClampToQuantum((MagickRealType)
3096 QuantumRange*HalfToSinglePrecision(pixel)),q);
3097 p+=quantum_info->pad;
3102 for (x=0; x < (ssize_t) number_pixels; x++)
3104 p=PushShortPixel(endian,p,&pixel);
3105 SetPixelRed(image,ScaleShortToQuantum(pixel),q);
3106 p=PushShortPixel(endian,p,&pixel);
3107 SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
3108 p=PushShortPixel(endian,p,&pixel);
3109 SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
3110 p=PushShortPixel(endian,p,&pixel);
3111 SetPixelBlack(image,ScaleShortToQuantum(pixel),q);
3112 p=PushShortPixel(endian,p,&pixel);
3113 SetPixelAlpha(image,ScaleShortToQuantum(pixel),q);
3114 p+=quantum_info->pad;
3124 if (quantum_info->format == FloatingPointQuantumFormat)
3129 for (x=0; x < (ssize_t) number_pixels; x++)
3131 p=PushFloatPixel(&quantum_state,p,&pixel);
3132 SetPixelRed(image,ClampToQuantum(pixel),q);
3133 p=PushFloatPixel(&quantum_state,p,&pixel);
3134 SetPixelGreen(image,ClampToQuantum(pixel),q);
3135 p=PushFloatPixel(&quantum_state,p,&pixel);
3136 SetPixelBlue(image,ClampToQuantum(pixel),q);
3137 p=PushFloatPixel(&quantum_state,p,&pixel);
3138 SetPixelBlack(image,ClampToQuantum(pixel),q);
3139 p=PushFloatPixel(&quantum_state,p,&pixel);
3140 SetPixelAlpha(image,ClampToQuantum(pixel),q);
3141 p+=quantum_info->pad;
3146 for (x=0; x < (ssize_t) number_pixels; x++)
3148 p=PushLongPixel(endian,p,&pixel);
3149 SetPixelRed(image,ScaleLongToQuantum(pixel),q);
3150 p=PushLongPixel(endian,p,&pixel);
3151 SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
3152 p=PushLongPixel(endian,p,&pixel);
3153 SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
3154 p=PushLongPixel(endian,p,&pixel);
3155 SetPixelBlack(image,ScaleLongToQuantum(pixel),q);
3156 p=PushLongPixel(endian,p,&pixel);
3157 SetPixelAlpha(image,ScaleLongToQuantum(pixel),q);
3158 p+=quantum_info->pad;
3165 if (quantum_info->format == FloatingPointQuantumFormat)
3170 for (x=0; x < (ssize_t) number_pixels; x++)
3172 p=PushDoublePixel(&quantum_state,p,&pixel);
3173 SetPixelRed(image,ClampToQuantum(pixel),q);
3174 p=PushDoublePixel(&quantum_state,p,&pixel);
3175 SetPixelGreen(image,ClampToQuantum(pixel),q);
3176 p=PushDoublePixel(&quantum_state,p,&pixel);
3177 SetPixelBlue(image,ClampToQuantum(pixel),q);
3178 p=PushDoublePixel(&quantum_state,p,&pixel);
3179 SetPixelBlack(image,ClampToQuantum(pixel),q);
3180 p=PushDoublePixel(&quantum_state,p,&pixel);
3181 SetPixelAlpha(image,ClampToQuantum(pixel),q);
3182 p=PushDoublePixel(&quantum_state,p,&pixel);
3183 p+=quantum_info->pad;
3191 range=GetQuantumRange(image->depth);
3192 for (x=0; x < (ssize_t) number_pixels; x++)
3194 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
3195 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
3196 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
3197 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
3198 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
3199 SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
3200 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
3201 SetPixelBlack(image,ScaleAnyToQuantum(pixel,range),q);
3202 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
3203 SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
3213 switch (quantum_info->depth)
3221 if (quantum_info->pack == MagickFalse)
3234 for (x=0; x < (ssize_t) number_pixels; x+=2)
3236 for (i=0; i < 4; i++)
3242 p=PushLongPixel(endian,p,&pixel);
3243 quantum=(size_t) (ScaleShortToQuantum((unsigned short)
3244 (((pixel >> 22) & 0x3ff) << 6)));
3249 quantum=(size_t) (ScaleShortToQuantum((unsigned short)
3250 (((pixel >> 12) & 0x3ff) << 6)));
3255 quantum=(size_t) (ScaleShortToQuantum((unsigned short)
3256 (((pixel >> 2) & 0x3ff) << 6)));
3260 cbcr[i]=(Quantum) (quantum);
3263 p+=quantum_info->pad;
3264 SetPixelRed(image,cbcr[1],q);
3265 SetPixelGreen(image,cbcr[0],q);
3266 SetPixelBlue(image,cbcr[2],q);
3268 SetPixelRed(image,cbcr[3],q);
3269 SetPixelGreen(image,cbcr[0],q);
3270 SetPixelBlue(image,cbcr[2],q);
3278 range=GetQuantumRange(image->depth);
3279 for (x=0; x < (ssize_t) number_pixels; x++)
3281 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
3282 SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
3283 p=PushQuantumPixel(&quantum_state,image->depth,p,&pixel);
3284 SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
3295 if ((quantum_type == CbYCrQuantum) || (quantum_type == CbYCrAQuantum))
3303 q=GetAuthenticPixelQueue(image);
3304 if (image_view != (CacheView *) NULL)
3305 q=GetCacheViewAuthenticPixelQueue(image_view);
3306 for (x=0; x < (ssize_t) number_pixels; x++)
3308 quantum=GetPixelRed(image,q);
3309 SetPixelRed(image,GetPixelGreen(image,q),q);
3310 SetPixelGreen(image,quantum,q);
3314 if ((quantum_type == RGBOQuantum) || (quantum_type == CMYKOQuantum))
3319 q=GetAuthenticPixelQueue(image);
3320 if (image_view != (CacheView *) NULL)
3321 q=GetCacheViewAuthenticPixelQueue(image_view);
3322 for (x=0; x < (ssize_t) number_pixels; x++)
3324 SetPixelAlpha(image,GetPixelAlpha(image,q),q);
3328 if (quantum_info->alpha_type == DisassociatedQuantumAlpha)
3339 q=GetAuthenticPixelQueue(image);
3340 if (image_view != (CacheView *) NULL)
3341 q=GetCacheViewAuthenticPixelQueue(image_view);
3342 for (x=0; x < (ssize_t) number_pixels; x++)
3344 alpha=QuantumScale*GetPixelAlpha(image,q);
3345 alpha=1.0/(fabs(alpha) <= MagickEpsilon ? 1.0 : alpha);
3346 SetPixelRed(image,ClampToQuantum(alpha*GetPixelRed(image,q)),q);
3347 SetPixelGreen(image,ClampToQuantum(alpha*GetPixelGreen(image,q)),q);
3348 SetPixelBlue(image,ClampToQuantum(alpha*GetPixelBlue(image,q)),q);