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 % EEEEE X X PPPP OOO RRRR TTTTT %
13 % E X X P P O O R R T %
14 % EEE X PPPP O O RRRR T %
16 % EEEEE X X P OOO R R T %
18 % MagickCore Methods to Export 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 "magick/studio.h"
48 #include "magick/property.h"
49 #include "magick/blob.h"
50 #include "magick/blob-private.h"
51 #include "magick/color-private.h"
52 #include "magick/exception.h"
53 #include "magick/exception-private.h"
54 #include "magick/cache.h"
55 #include "magick/constitute.h"
56 #include "magick/delegate.h"
57 #include "magick/geometry.h"
58 #include "magick/list.h"
59 #include "magick/magick.h"
60 #include "magick/memory_.h"
61 #include "magick/monitor.h"
62 #include "magick/option.h"
63 #include "magick/pixel.h"
64 #include "magick/pixel-private.h"
65 #include "magick/quantum.h"
66 #include "magick/quantum-private.h"
67 #include "magick/resource_.h"
68 #include "magick/semaphore.h"
69 #include "magick/statistic.h"
70 #include "magick/stream.h"
71 #include "magick/string_.h"
72 #include "magick/utility.h"
75 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
79 + E x p o r t Q u a n t u m P i x e l s %
83 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
85 % ExportQuantumPixels() transfers one or more pixel components from the image
86 % pixel cache to a user supplied buffer. The pixels are returned in network
87 % byte order. MagickTrue is returned if the pixels are successfully
88 % transferred, otherwise MagickFalse.
90 % The format of the ExportQuantumPixels method is:
92 % size_t ExportQuantumPixels(const Image *image,const CacheView *image_view,
93 % const QuantumInfo *quantum_info,const QuantumType quantum_type,
94 % 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 (RGB, RGBA,
107 % o pixels: The components are transferred to this buffer.
109 % o exception: return any errors or warnings in this structure.
113 static inline unsigned char *PopDoublePixel(const QuantumState *quantum_state,
114 const double pixel,unsigned char *pixels)
122 p=(double *) quantum;
123 *p=(double) (pixel*quantum_state->inverse_scale+quantum_state->minimum);
124 if (quantum_state->endian != LSBEndian)
126 *pixels++=quantum[7];
127 *pixels++=quantum[6];
128 *pixels++=quantum[5];
129 *pixels++=quantum[4];
130 *pixels++=quantum[3];
131 *pixels++=quantum[2];
132 *pixels++=quantum[1];
133 *pixels++=quantum[0];
136 *pixels++=quantum[0];
137 *pixels++=quantum[1];
138 *pixels++=quantum[2];
139 *pixels++=quantum[3];
140 *pixels++=quantum[4];
141 *pixels++=quantum[5];
142 *pixels++=quantum[6];
143 *pixels++=quantum[7];
147 static inline unsigned char *PopFloatPixel(const QuantumState *quantum_state,
148 const float pixel,unsigned char *pixels)
157 *p=(float) ((double) pixel*quantum_state->inverse_scale+
158 quantum_state->minimum);
159 if (quantum_state->endian != LSBEndian)
161 *pixels++=quantum[3];
162 *pixels++=quantum[2];
163 *pixels++=quantum[1];
164 *pixels++=quantum[0];
167 *pixels++=quantum[0];
168 *pixels++=quantum[1];
169 *pixels++=quantum[2];
170 *pixels++=quantum[3];
174 static inline unsigned char *PopQuantumPixel(QuantumState *quantum_state,
175 const unsigned long depth,const QuantumAny pixel,unsigned char *pixels)
180 register unsigned long
183 if (quantum_state->bits == 0UL)
184 quantum_state->bits=8UL;
185 for (i=(long) depth; i > 0L; )
187 quantum_bits=(unsigned long) i;
188 if (quantum_bits > quantum_state->bits)
189 quantum_bits=quantum_state->bits;
191 if (quantum_state->bits == 8)
193 quantum_state->bits-=quantum_bits;
194 *pixels|=(((pixel >> i) &~ ((~0UL) << quantum_bits)) <<
195 quantum_state->bits);
196 if (quantum_state->bits == 0UL)
199 quantum_state->bits=8UL;
205 static inline unsigned char *PopQuantumLongPixel(QuantumState *quantum_state,
206 const unsigned long depth,const unsigned long pixel,unsigned char *pixels)
214 if (quantum_state->bits == 0UL)
215 quantum_state->bits=32UL;
216 for (i=(long) depth; i > 0; )
218 quantum_bits=(unsigned long) i;
219 if (quantum_bits > quantum_state->bits)
220 quantum_bits=quantum_state->bits;
221 quantum_state->pixel|=(((pixel >> (depth-i)) &
222 quantum_state->mask[quantum_bits]) << (32UL-quantum_state->bits));
224 quantum_state->bits-=quantum_bits;
225 if (quantum_state->bits == 0U)
227 pixels=PopLongPixel(quantum_state->endian,quantum_state->pixel,pixels);
228 quantum_state->pixel=0U;
229 quantum_state->bits=32UL;
235 MagickExport size_t ExportQuantumPixels(const Image *image,
236 const CacheView *image_view,const QuantumInfo *quantum_info,
237 const QuantumType quantum_type,unsigned char *pixels,ExceptionInfo *exception)
257 register const IndexPacket
260 register const PixelPacket
266 register unsigned char
272 assert(image != (Image *) NULL);
273 assert(image->signature == MagickSignature);
274 if (image->debug != MagickFalse)
275 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
276 assert(quantum_info != (QuantumInfo *) NULL);
277 assert(quantum_info->signature == MagickSignature);
278 if (pixels == (unsigned char *) NULL)
279 pixels=GetQuantumPixels(quantum_info);
280 number_pixels=GetImageExtent(image);
281 p=GetVirtualPixelQueue(image);
282 indexes=GetVirtualIndexQueue(image);
283 if (image_view != (CacheView *) NULL)
285 number_pixels=GetCacheViewExtent(image_view);
286 p=GetCacheViewVirtualPixelQueue(image_view);
287 indexes=GetCacheViewVirtualIndexQueue(image_view);
289 if (quantum_info->alpha_type == AssociatedQuantumAlpha)
297 q=GetAuthenticPixelQueue(image);
298 if (image_view != (CacheView *) NULL)
299 q=(PixelPacket *) GetCacheViewVirtualPixelQueue(image_view);
300 for (x=0; x < (long) image->columns; x++)
302 alpha=QuantumScale*((double) QuantumRange-q->opacity);
303 q->red=RoundToQuantum(alpha*q->red);
304 q->green=RoundToQuantum(alpha*q->green);
305 q->blue=RoundToQuantum(alpha*q->blue);
309 if ((quantum_type == RGBOQuantum) || (quantum_type == CMYKOQuantum))
314 q=GetAuthenticPixelQueue(image);
315 if (image_view != (CacheView *) NULL)
316 q=(PixelPacket *) GetCacheViewVirtualPixelQueue(image_view);
317 for (x=0; x < (long) number_pixels; x++)
319 q->opacity=(Quantum) (QuantumRange-q->opacity);
323 if ((quantum_type == CbYCrQuantum) || (quantum_type == CbYCrAQuantum))
331 q=GetAuthenticPixelQueue(image);
332 if (image_view != (CacheView *) NULL)
333 q=GetAuthenticPixelQueue(image);
334 for (x=0; x < (long) number_pixels; x++)
344 InitializeQuantumState(quantum_info,image->endian,&quantum_state);
345 extent=GetQuantumExtent(image,quantum_info,quantum_type);
346 endian=quantum_state.endian;
347 switch (quantum_type)
351 if (image->storage_class != PseudoClass)
353 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
354 "ColormappedImageRequired","`%s'",image->filename);
357 switch (quantum_info->depth)
361 register unsigned char
364 for (x=((long) number_pixels-7); x > 0; x-=8)
366 pixel=(unsigned char) *indexes++;
367 *q=((pixel & 0x01) << 7);
368 pixel=(unsigned char) *indexes++;
369 *q|=((pixel & 0x01) << 6);
370 pixel=(unsigned char) *indexes++;
371 *q|=((pixel & 0x01) << 5);
372 pixel=(unsigned char) *indexes++;
373 *q|=((pixel & 0x01) << 4);
374 pixel=(unsigned char) *indexes++;
375 *q|=((pixel & 0x01) << 3);
376 pixel=(unsigned char) *indexes++;
377 *q|=((pixel & 0x01) << 2);
378 pixel=(unsigned char) *indexes++;
379 *q|=((pixel & 0x01) << 1);
380 pixel=(unsigned char) *indexes++;
381 *q|=((pixel & 0x01) << 0);
384 if ((number_pixels % 8) != 0)
387 for (bit=7; bit >= (long) (8-(number_pixels % 8)); bit--)
389 pixel=(unsigned char) *indexes++;
390 *q|=((pixel & 0x01) << (unsigned char) bit);
398 register unsigned char
401 for (x=0; x < (long) (number_pixels-1) ; x+=2)
403 pixel=(unsigned char) *indexes++;
404 *q=((pixel & 0xf) << 4);
405 pixel=(unsigned char) *indexes++;
406 *q|=((pixel & 0xf) << 0);
409 if ((number_pixels % 2) != 0)
411 pixel=(unsigned char) *indexes++;
412 *q=((pixel & 0xf) << 4);
419 for (x=0; x < (long) number_pixels; x++)
421 q=PopCharPixel((unsigned char) indexes[x],q);
422 q+=quantum_info->pad;
428 for (x=0; x < (long) number_pixels; x++)
430 q=PopShortPixel(endian,(unsigned short) indexes[x],q);
431 q+=quantum_info->pad;
437 if (quantum_info->format == FloatingPointQuantumFormat)
439 for (x=0; x < (long) number_pixels; x++)
441 q=PopFloatPixel(&quantum_state,(float) indexes[x],q);
443 q+=quantum_info->pad;
447 for (x=0; x < (long) number_pixels; x++)
449 q=PopLongPixel(endian,(unsigned long) indexes[x],q);
450 q+=quantum_info->pad;
456 if (quantum_info->format == FloatingPointQuantumFormat)
458 for (x=0; x < (long) number_pixels; x++)
460 q=PopDoublePixel(&quantum_state,(double) indexes[x],q);
462 q+=quantum_info->pad;
469 for (x=0; x < (long) number_pixels; x++)
471 q=PopQuantumPixel(&quantum_state,image->depth,indexes[x],q);
473 q+=quantum_info->pad;
480 case IndexAlphaQuantum:
482 if (image->storage_class != PseudoClass)
484 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
485 "ColormappedImageRequired","`%s'",image->filename);
488 switch (quantum_info->depth)
492 register unsigned char
495 for (x=((long) number_pixels-3); x > 0; x-=4)
497 pixel=(unsigned char) *indexes++;
498 *q=((pixel & 0x01) << 7);
499 pixel=(unsigned char) (p->opacity == (Quantum) TransparentOpacity ?
501 *q|=((pixel & 0x01) << 6);
503 pixel=(unsigned char) *indexes++;
504 *q|=((pixel & 0x01) << 5);
505 pixel=(unsigned char) (p->opacity == (Quantum) TransparentOpacity ?
507 *q|=((pixel & 0x01) << 4);
509 pixel=(unsigned char) *indexes++;
510 *q|=((pixel & 0x01) << 3);
511 pixel=(unsigned char) (p->opacity == (Quantum) TransparentOpacity ?
513 *q|=((pixel & 0x01) << 2);
515 pixel=(unsigned char) *indexes++;
516 *q|=((pixel & 0x01) << 1);
517 pixel=(unsigned char) (p->opacity == (Quantum) TransparentOpacity ?
519 *q|=((pixel & 0x01) << 0);
523 if ((number_pixels % 4) != 0)
526 for (bit=3; bit >= (long) (4-(number_pixels % 4)); bit-=2)
528 pixel=(unsigned char) *indexes++;
529 *q|=((pixel & 0x01) << (unsigned char) (bit+4));
530 pixel=(unsigned char) (p->opacity == (Quantum)
531 TransparentOpacity ? 1 : 0);
532 *q|=((pixel & 0x01) << (unsigned char) (bit+4-1));
541 register unsigned char
544 for (x=0; x < (long) number_pixels ; x++)
546 pixel=(unsigned char) *indexes++;
547 *q=((pixel & 0xf) << 4);
548 pixel=(unsigned char) (16*QuantumScale*((Quantum) (QuantumRange-
550 *q|=((pixel & 0xf) << 0);
558 register unsigned char
561 for (x=0; x < (long) number_pixels; x++)
563 q=PopCharPixel((unsigned char) indexes[x],q);
564 pixel=ScaleQuantumToChar((Quantum) (QuantumRange-p->opacity));
565 q=PopCharPixel(pixel,q);
567 q+=quantum_info->pad;
573 register unsigned short
576 for (x=0; x < (long) number_pixels; x++)
578 q=PopShortPixel(endian,(unsigned short) indexes[x],q);
579 pixel=ScaleQuantumToShort((Quantum) (QuantumRange-p->opacity));
580 q=PopShortPixel(endian,pixel,q);
582 q+=quantum_info->pad;
588 register unsigned long
591 if (quantum_info->format == FloatingPointQuantumFormat)
593 for (x=0; x < (long) number_pixels; x++)
598 q=PopFloatPixel(&quantum_state,(float) indexes[x],q);
599 pixel=(float) (QuantumRange-p->opacity);
600 q=PopFloatPixel(&quantum_state,pixel,q);
602 q+=quantum_info->pad;
606 for (x=0; x < (long) number_pixels; x++)
608 q=PopLongPixel(endian,(unsigned long) indexes[x],q);
609 pixel=ScaleQuantumToLong((Quantum) (QuantumRange-p->opacity));
610 q=PopLongPixel(endian,pixel,q);
612 q+=quantum_info->pad;
618 if (quantum_info->format == FloatingPointQuantumFormat)
620 for (x=0; x < (long) number_pixels; x++)
625 q=PopDoublePixel(&quantum_state,(double) indexes[x],q);
626 pixel=(double) (QuantumRange-p->opacity);
627 q=PopDoublePixel(&quantum_state,pixel,q);
629 q+=quantum_info->pad;
636 range=GetQuantumRange(image->depth);
637 for (x=0; x < (long) number_pixels; x++)
639 q=PopQuantumPixel(&quantum_state,image->depth,indexes[x],q);
640 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
641 (Quantum) (QuantumRange-p->opacity),range),q);
643 q+=quantum_info->pad;
652 switch (quantum_info->depth)
659 register unsigned char
665 if (quantum_info->min_is_white != MagickFalse)
670 threshold=(Quantum) (QuantumRange/2);
671 for (x=((long) number_pixels-7); x > 0; x-=8)
674 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 7;
676 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 6;
678 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 5;
680 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 4;
682 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 3;
684 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 2;
686 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 1;
688 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 0;
692 if ((number_pixels % 8) != 0)
695 for (bit=7; bit >= (long) (8-(number_pixels % 8)); bit--)
697 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) <<
707 register unsigned char
710 for (x=0; x < (long) (number_pixels-1) ; x+=2)
712 pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
713 *q=(((pixel >> 4) & 0xf) << 4);
715 pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
720 if ((number_pixels % 2) != 0)
722 pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
723 *q=(((pixel >> 4) & 0xf) << 4);
731 register unsigned char
734 for (x=0; x < (long) number_pixels; x++)
736 pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
737 q=PopCharPixel(pixel,q);
739 q+=quantum_info->pad;
745 register unsigned short
748 range=GetQuantumRange(image->depth);
749 if (quantum_info->pack == MagickFalse)
751 for (x=0; x < (long) number_pixels; x++)
753 pixel=ScaleQuantumToShort(PixelIntensityToQuantum(p));
754 q=PopShortPixel(endian,(unsigned short) ScaleQuantumToAny(
755 (Quantum) pixel,range),q);
757 q+=quantum_info->pad;
761 for (x=0; x < (long) number_pixels; x++)
763 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
764 PixelIntensityToQuantum(p),range),q);
766 q+=quantum_info->pad;
772 register unsigned short
775 range=GetQuantumRange(image->depth);
776 if (quantum_info->pack == MagickFalse)
778 for (x=0; x < (long) number_pixels; x++)
780 pixel=ScaleQuantumToShort(PixelIntensityToQuantum(p));
781 q=PopShortPixel(endian,(unsigned short) (pixel >> 4),q);
783 q+=quantum_info->pad;
787 for (x=0; x < (long) number_pixels; x++)
789 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
790 PixelIntensityToQuantum(p),range),q);
792 q+=quantum_info->pad;
798 register unsigned short
801 for (x=0; x < (long) number_pixels; x++)
803 pixel=ScaleQuantumToShort(PixelIntensityToQuantum(p));
804 q=PopShortPixel(endian,pixel,q);
806 q+=quantum_info->pad;
812 register unsigned long
815 if (quantum_info->format == FloatingPointQuantumFormat)
817 for (x=0; x < (long) number_pixels; x++)
822 pixel=(float) PixelIntensityToQuantum(p);
823 q=PopFloatPixel(&quantum_state,pixel,q);
825 q+=quantum_info->pad;
829 for (x=0; x < (long) number_pixels; x++)
831 pixel=ScaleQuantumToLong(PixelIntensityToQuantum(p));
832 q=PopLongPixel(endian,pixel,q);
834 q+=quantum_info->pad;
840 if (quantum_info->format == FloatingPointQuantumFormat)
842 for (x=0; x < (long) number_pixels; x++)
847 pixel=(double) PixelIntensityToQuantum(p);
848 q=PopDoublePixel(&quantum_state,pixel,q);
850 q+=quantum_info->pad;
857 range=GetQuantumRange(image->depth);
858 for (x=0; x < (long) number_pixels; x++)
860 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
861 PixelIntensityToQuantum(p),range),q);
863 q+=quantum_info->pad;
870 case GrayAlphaQuantum:
872 switch (quantum_info->depth)
879 register unsigned char
886 if (quantum_info->min_is_white == MagickFalse)
891 threshold=(Quantum) (QuantumRange/2);
892 for (x=((long) number_pixels-3); x > 0; x-=4)
895 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 7;
896 pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 : 0x01);
897 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 6);
899 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 5;
900 pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 : 0x01);
901 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 4);
903 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 3;
904 pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 : 0x01);
905 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 2);
907 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 1;
908 pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 : 0x01);
909 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 0);
913 if ((number_pixels % 4) != 0)
916 for (bit=3; bit >= (long) (4-(number_pixels % 4)); bit-=2)
918 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) <<
920 pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 :
922 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << (unsigned char)
932 register unsigned char
935 for (x=0; x < (long) number_pixels ; x++)
937 pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
938 *q=(((pixel >> 4) & 0xf) << 4);
939 pixel=(unsigned char) (16*QuantumScale*((Quantum) (QuantumRange-
949 register unsigned char
952 for (x=0; x < (long) number_pixels; x++)
954 pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
955 q=PopCharPixel(pixel,q);
956 pixel=ScaleQuantumToChar((Quantum) (QuantumRange-p->opacity));
957 q=PopCharPixel(pixel,q);
959 q+=quantum_info->pad;
965 register unsigned short
968 for (x=0; x < (long) number_pixels; x++)
970 pixel=ScaleQuantumToShort(PixelIntensityToQuantum(p));
971 q=PopShortPixel(endian,pixel,q);
972 pixel=ScaleQuantumToShort((Quantum) (QuantumRange-p->opacity));
973 q=PopShortPixel(endian,pixel,q);
975 q+=quantum_info->pad;
981 register unsigned long
984 if (quantum_info->format == FloatingPointQuantumFormat)
986 for (x=0; x < (long) number_pixels; x++)
991 pixel=(float) PixelIntensityToQuantum(p);
992 q=PopFloatPixel(&quantum_state,pixel,q);
993 pixel=(float) (QuantumRange-p->opacity);
994 q=PopFloatPixel(&quantum_state,pixel,q);
996 q+=quantum_info->pad;
1000 for (x=0; x < (long) number_pixels; x++)
1002 pixel=ScaleQuantumToLong(PixelIntensityToQuantum(p));
1003 q=PopLongPixel(endian,pixel,q);
1004 pixel=ScaleQuantumToLong((Quantum) (QuantumRange-p->opacity));
1005 q=PopLongPixel(endian,pixel,q);
1007 q+=quantum_info->pad;
1013 if (quantum_info->format == FloatingPointQuantumFormat)
1015 for (x=0; x < (long) number_pixels; x++)
1020 pixel=(double) PixelIntensityToQuantum(p);
1021 q=PopDoublePixel(&quantum_state,pixel,q);
1022 pixel=(double) (QuantumRange-p->opacity);
1023 q=PopDoublePixel(&quantum_state,pixel,q);
1025 q+=quantum_info->pad;
1032 range=GetQuantumRange(image->depth);
1033 for (x=0; x < (long) number_pixels; x++)
1035 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1036 PixelIntensityToQuantum(p),range),q);
1037 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1038 (Quantum) (QuantumRange-p->opacity),range),q);
1040 q+=quantum_info->pad;
1050 switch (quantum_info->depth)
1054 register unsigned char
1057 for (x=0; x < (long) number_pixels; x++)
1059 pixel=ScaleQuantumToChar(p->red);
1060 q=PopCharPixel(pixel,q);
1062 q+=quantum_info->pad;
1068 register unsigned short
1071 for (x=0; x < (long) number_pixels; x++)
1073 pixel=ScaleQuantumToShort(p->red);
1074 q=PopShortPixel(endian,pixel,q);
1076 q+=quantum_info->pad;
1082 register unsigned long
1085 if (quantum_info->format == FloatingPointQuantumFormat)
1087 for (x=0; x < (long) number_pixels; x++)
1089 q=PopFloatPixel(&quantum_state,(float) p->red,q);
1091 q+=quantum_info->pad;
1095 for (x=0; x < (long) number_pixels; x++)
1097 pixel=ScaleQuantumToLong(p->red);
1098 q=PopLongPixel(endian,pixel,q);
1100 q+=quantum_info->pad;
1106 if (quantum_info->format == FloatingPointQuantumFormat)
1108 for (x=0; x < (long) number_pixels; x++)
1110 q=PopDoublePixel(&quantum_state,(double) p->red,q);
1112 q+=quantum_info->pad;
1119 range=GetQuantumRange(image->depth);
1120 for (x=0; x < (long) number_pixels; x++)
1122 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1125 q+=quantum_info->pad;
1133 case MagentaQuantum:
1135 switch (quantum_info->depth)
1139 register unsigned char
1142 for (x=0; x < (long) number_pixels; x++)
1144 pixel=ScaleQuantumToChar(p->green);
1145 q=PopCharPixel(pixel,q);
1147 q+=quantum_info->pad;
1153 register unsigned short
1156 for (x=0; x < (long) number_pixels; x++)
1158 pixel=ScaleQuantumToShort(p->green);
1159 q=PopShortPixel(endian,pixel,q);
1161 q+=quantum_info->pad;
1167 register unsigned long
1170 if (quantum_info->format == FloatingPointQuantumFormat)
1172 for (x=0; x < (long) number_pixels; x++)
1174 q=PopFloatPixel(&quantum_state,(float) p->green,q);
1176 q+=quantum_info->pad;
1180 for (x=0; x < (long) number_pixels; x++)
1182 pixel=ScaleQuantumToLong(p->green);
1183 q=PopLongPixel(endian,pixel,q);
1185 q+=quantum_info->pad;
1191 if (quantum_info->format == FloatingPointQuantumFormat)
1193 for (x=0; x < (long) number_pixels; x++)
1195 q=PopDoublePixel(&quantum_state,(double) p->green,q);
1197 q+=quantum_info->pad;
1204 range=GetQuantumRange(image->depth);
1205 for (x=0; x < (long) number_pixels; x++)
1207 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1210 q+=quantum_info->pad;
1220 switch (quantum_info->depth)
1224 register unsigned char
1227 for (x=0; x < (long) number_pixels; x++)
1229 pixel=ScaleQuantumToChar(p->blue);
1230 q=PopCharPixel(pixel,q);
1232 q+=quantum_info->pad;
1238 register unsigned short
1241 for (x=0; x < (long) number_pixels; x++)
1243 pixel=ScaleQuantumToShort(p->blue);
1244 q=PopShortPixel(endian,pixel,q);
1246 q+=quantum_info->pad;
1252 register unsigned long
1255 if (quantum_info->format == FloatingPointQuantumFormat)
1257 for (x=0; x < (long) number_pixels; x++)
1259 q=PopFloatPixel(&quantum_state,(float) p->blue,q);
1261 q+=quantum_info->pad;
1265 for (x=0; x < (long) number_pixels; x++)
1267 pixel=ScaleQuantumToLong(p->blue);
1268 q=PopLongPixel(endian,pixel,q);
1270 q+=quantum_info->pad;
1276 if (quantum_info->format == FloatingPointQuantumFormat)
1278 for (x=0; x < (long) number_pixels; x++)
1280 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
1282 q+=quantum_info->pad;
1289 range=GetQuantumRange(image->depth);
1290 for (x=0; x < (long) number_pixels; x++)
1292 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1295 q+=quantum_info->pad;
1304 switch (quantum_info->depth)
1308 register unsigned char
1311 for (x=0; x < (long) number_pixels; x++)
1313 pixel=ScaleQuantumToChar((Quantum) (QuantumRange-p->opacity));
1314 q=PopCharPixel(pixel,q);
1316 q+=quantum_info->pad;
1322 register unsigned short
1325 for (x=0; x < (long) number_pixels; x++)
1327 pixel=ScaleQuantumToShort((Quantum) (QuantumRange-p->opacity));
1328 q=PopShortPixel(endian,pixel,q);
1330 q+=quantum_info->pad;
1336 register unsigned long
1339 if (quantum_info->format == FloatingPointQuantumFormat)
1341 for (x=0; x < (long) number_pixels; x++)
1346 pixel=(float) (QuantumRange-p->opacity);
1347 q=PopFloatPixel(&quantum_state,pixel,q);
1349 q+=quantum_info->pad;
1353 for (x=0; x < (long) number_pixels; x++)
1355 pixel=ScaleQuantumToLong((Quantum) (QuantumRange-p->opacity));
1356 q=PopLongPixel(endian,pixel,q);
1358 q+=quantum_info->pad;
1364 if (quantum_info->format == FloatingPointQuantumFormat)
1366 for (x=0; x < (long) number_pixels; x++)
1371 pixel=(double) (QuantumRange-p->opacity);
1372 q=PopDoublePixel(&quantum_state,pixel,q);
1374 q+=quantum_info->pad;
1381 range=GetQuantumRange(image->depth);
1382 for (x=0; x < (long) number_pixels; x++)
1384 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1385 (Quantum) (QuantumRange-p->opacity),range),q);
1387 q+=quantum_info->pad;
1394 case OpacityQuantum:
1396 switch (quantum_info->depth)
1400 register unsigned char
1403 for (x=0; x < (long) number_pixels; x++)
1405 pixel=ScaleQuantumToChar(p->opacity);
1406 q=PopCharPixel(pixel,q);
1408 q+=quantum_info->pad;
1414 register unsigned short
1417 for (x=0; x < (long) number_pixels; x++)
1419 pixel=ScaleQuantumToShort(p->opacity);
1420 q=PopShortPixel(endian,pixel,q);
1422 q+=quantum_info->pad;
1428 register unsigned long
1431 if (quantum_info->format == FloatingPointQuantumFormat)
1433 for (x=0; x < (long) number_pixels; x++)
1435 q=PopFloatPixel(&quantum_state,(float) p->opacity,q);
1437 q+=quantum_info->pad;
1441 for (x=0; x < (long) number_pixels; x++)
1443 pixel=ScaleQuantumToLong(p->opacity);
1444 q=PopLongPixel(endian,pixel,q);
1446 q+=quantum_info->pad;
1452 if (quantum_info->format == FloatingPointQuantumFormat)
1454 for (x=0; x < (long) number_pixels; x++)
1456 q=PopDoublePixel(&quantum_state,(double) p->opacity,q);
1458 q+=quantum_info->pad;
1465 range=GetQuantumRange(image->depth);
1466 for (x=0; x < (long) number_pixels; x++)
1468 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1469 p->opacity,range),q);
1471 q+=quantum_info->pad;
1480 if (image->colorspace != CMYKColorspace)
1482 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1483 "ColorSeparatedImageRequired","`%s'",image->filename);
1486 switch (quantum_info->depth)
1490 register unsigned char
1493 for (x=0; x < (long) number_pixels; x++)
1495 pixel=ScaleQuantumToChar(indexes[x]);
1496 q=PopCharPixel(pixel,q);
1498 q+=quantum_info->pad;
1504 register unsigned short
1507 for (x=0; x < (long) number_pixels; x++)
1509 pixel=ScaleQuantumToShort(indexes[x]);
1510 q=PopShortPixel(endian,pixel,q);
1512 q+=quantum_info->pad;
1518 register unsigned long
1521 if (quantum_info->format == FloatingPointQuantumFormat)
1523 for (x=0; x < (long) number_pixels; x++)
1525 q=PopFloatPixel(&quantum_state,(float) indexes[x],q);
1527 q+=quantum_info->pad;
1531 for (x=0; x < (long) number_pixels; x++)
1533 pixel=ScaleQuantumToLong(indexes[x]);
1534 q=PopLongPixel(endian,pixel,q);
1536 q+=quantum_info->pad;
1542 if (quantum_info->format == FloatingPointQuantumFormat)
1544 for (x=0; x < (long) number_pixels; x++)
1546 q=PopDoublePixel(&quantum_state,(double) indexes[x],q);
1548 q+=quantum_info->pad;
1555 range=GetQuantumRange(image->depth);
1556 for (x=0; x < (long) number_pixels; x++)
1558 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1559 (Quantum) indexes[x],range),q);
1561 q+=quantum_info->pad;
1571 switch (quantum_info->depth)
1575 for (x=0; x < (long) number_pixels; x++)
1577 q=PopCharPixel(ScaleQuantumToChar(p->red),q);
1578 q=PopCharPixel(ScaleQuantumToChar(p->green),q);
1579 q=PopCharPixel(ScaleQuantumToChar(p->blue),q);
1581 q+=quantum_info->pad;
1587 register unsigned long
1590 range=GetQuantumRange(image->depth);
1591 if (quantum_info->pack == MagickFalse)
1593 for (x=0; x < (long) number_pixels; x++)
1595 pixel=(unsigned long) (ScaleQuantumToAny(p->red,range) << 22 |
1596 ScaleQuantumToAny(p->green,range) << 12 |
1597 ScaleQuantumToAny(p->blue,range) << 2);
1598 q=PopLongPixel(endian,pixel,q);
1600 q+=quantum_info->pad;
1604 if (quantum_info->quantum == 32UL)
1606 for (x=0; x < (long) number_pixels; x++)
1608 pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
1609 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
1610 pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
1611 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
1612 pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
1613 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
1615 q+=quantum_info->pad;
1619 for (x=0; x < (long) number_pixels; x++)
1621 pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
1622 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
1623 pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
1624 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
1625 pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
1626 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
1628 q+=quantum_info->pad;
1634 register unsigned long
1637 range=GetQuantumRange(image->depth);
1638 if (quantum_info->pack == MagickFalse)
1640 for (x=0; x < (long) (3*number_pixels-1); x+=2)
1647 pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
1652 pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
1657 pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
1662 q=PopShortPixel(endian,(unsigned short) (pixel << 4),q);
1668 pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
1673 pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
1678 pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
1683 q=PopShortPixel(endian,(unsigned short) (pixel << 4),q);
1684 q+=quantum_info->pad;
1686 for (bit=0; bit < (long) (3*number_pixels % 2); bit++)
1688 switch ((x+bit) % 3)
1693 pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
1698 pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
1703 pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
1708 q=PopShortPixel(endian,(unsigned short) (pixel << 4),q);
1709 q+=quantum_info->pad;
1715 if (quantum_info->quantum == 32UL)
1717 for (x=0; x < (long) number_pixels; x++)
1719 pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
1720 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
1721 pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
1722 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
1723 pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
1724 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
1726 q+=quantum_info->pad;
1730 for (x=0; x < (long) number_pixels; x++)
1732 pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
1733 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
1734 pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
1735 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
1736 pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
1737 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
1739 q+=quantum_info->pad;
1745 register unsigned short
1748 for (x=0; x < (long) number_pixels; x++)
1750 pixel=ScaleQuantumToShort(p->red);
1751 q=PopShortPixel(endian,pixel,q);
1752 pixel=ScaleQuantumToShort(p->green);
1753 q=PopShortPixel(endian,pixel,q);
1754 pixel=ScaleQuantumToShort(p->blue);
1755 q=PopShortPixel(endian,pixel,q);
1757 q+=quantum_info->pad;
1763 register unsigned long
1766 if (quantum_info->format == FloatingPointQuantumFormat)
1768 for (x=0; x < (long) number_pixels; x++)
1770 q=PopFloatPixel(&quantum_state,(float) p->red,q);
1771 q=PopFloatPixel(&quantum_state,(float) p->green,q);
1772 q=PopFloatPixel(&quantum_state,(float) p->blue,q);
1774 q+=quantum_info->pad;
1778 for (x=0; x < (long) number_pixels; x++)
1780 pixel=ScaleQuantumToLong(p->red);
1781 q=PopLongPixel(endian,pixel,q);
1782 pixel=ScaleQuantumToLong(p->green);
1783 q=PopLongPixel(endian,pixel,q);
1784 pixel=ScaleQuantumToLong(p->blue);
1785 q=PopLongPixel(endian,pixel,q);
1787 q+=quantum_info->pad;
1793 if (quantum_info->format == FloatingPointQuantumFormat)
1795 for (x=0; x < (long) number_pixels; x++)
1797 q=PopDoublePixel(&quantum_state,(double) p->red,q);
1798 q=PopDoublePixel(&quantum_state,(double) p->green,q);
1799 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
1801 q+=quantum_info->pad;
1808 range=GetQuantumRange(image->depth);
1809 for (x=0; x < (long) number_pixels; x++)
1811 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1813 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1815 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1818 q+=quantum_info->pad;
1829 switch (quantum_info->depth)
1833 register unsigned char
1836 for (x=0; x < (long) number_pixels; x++)
1838 pixel=ScaleQuantumToChar(p->red);
1839 q=PopCharPixel(pixel,q);
1840 pixel=ScaleQuantumToChar(p->green);
1841 q=PopCharPixel(pixel,q);
1842 pixel=ScaleQuantumToChar(p->blue);
1843 q=PopCharPixel(pixel,q);
1844 pixel=ScaleQuantumToChar((Quantum) (QuantumRange-p->opacity));
1845 q=PopCharPixel(pixel,q);
1847 q+=quantum_info->pad;
1853 register unsigned short
1856 for (x=0; x < (long) number_pixels; x++)
1858 pixel=ScaleQuantumToShort(p->red);
1859 q=PopShortPixel(endian,pixel,q);
1860 pixel=ScaleQuantumToShort(p->green);
1861 q=PopShortPixel(endian,pixel,q);
1862 pixel=ScaleQuantumToShort(p->blue);
1863 q=PopShortPixel(endian,pixel,q);
1864 pixel=ScaleQuantumToShort((Quantum) (QuantumRange-p->opacity));
1865 q=PopShortPixel(endian,pixel,q);
1867 q+=quantum_info->pad;
1873 register unsigned long
1876 if (quantum_info->format == FloatingPointQuantumFormat)
1878 for (x=0; x < (long) number_pixels; x++)
1883 q=PopFloatPixel(&quantum_state,(float) p->red,q);
1884 q=PopFloatPixel(&quantum_state,(float) p->green,q);
1885 q=PopFloatPixel(&quantum_state,(float) p->blue,q);
1886 pixel=(float) (QuantumRange-p->opacity);
1887 q=PopFloatPixel(&quantum_state,pixel,q);
1889 q+=quantum_info->pad;
1893 for (x=0; x < (long) number_pixels; x++)
1895 pixel=ScaleQuantumToLong(p->red);
1896 q=PopLongPixel(endian,pixel,q);
1897 pixel=ScaleQuantumToLong(p->green);
1898 q=PopLongPixel(endian,pixel,q);
1899 pixel=ScaleQuantumToLong(p->blue);
1900 q=PopLongPixel(endian,pixel,q);
1901 pixel=ScaleQuantumToLong((Quantum) (QuantumRange-p->opacity));
1902 q=PopLongPixel(endian,pixel,q);
1904 q+=quantum_info->pad;
1910 if (quantum_info->format == FloatingPointQuantumFormat)
1915 for (x=0; x < (long) number_pixels; x++)
1917 q=PopDoublePixel(&quantum_state,(double) p->red,q);
1918 q=PopDoublePixel(&quantum_state,(double) p->green,q);
1919 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
1920 pixel=(double) (QuantumRange-p->opacity);
1921 q=PopDoublePixel(&quantum_state,pixel,q);
1923 q+=quantum_info->pad;
1930 range=GetQuantumRange(image->depth);
1931 for (x=0; x < (long) number_pixels; x++)
1933 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1935 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1937 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1939 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1940 (Quantum) (QuantumRange-p->opacity),range),q);
1942 q+=quantum_info->pad;
1951 if (image->colorspace != CMYKColorspace)
1953 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1954 "ColorSeparatedImageRequired","`%s'",image->filename);
1957 switch (quantum_info->depth)
1961 register unsigned char
1964 for (x=0; x < (long) number_pixels; x++)
1966 pixel=ScaleQuantumToChar(p->red);
1967 q=PopCharPixel(pixel,q);
1968 pixel=ScaleQuantumToChar(p->green);
1969 q=PopCharPixel(pixel,q);
1970 pixel=ScaleQuantumToChar(p->blue);
1971 q=PopCharPixel(pixel,q);
1972 pixel=ScaleQuantumToChar(indexes[x]);
1973 q=PopCharPixel(pixel,q);
1975 q+=quantum_info->pad;
1981 register unsigned short
1984 for (x=0; x < (long) number_pixels; x++)
1986 pixel=ScaleQuantumToShort(p->red);
1987 q=PopShortPixel(endian,pixel,q);
1988 pixel=ScaleQuantumToShort(p->green);
1989 q=PopShortPixel(endian,pixel,q);
1990 pixel=ScaleQuantumToShort(p->blue);
1991 q=PopShortPixel(endian,pixel,q);
1992 pixel=ScaleQuantumToShort(indexes[x]);
1993 q=PopShortPixel(endian,pixel,q);
1995 q+=quantum_info->pad;
2001 register unsigned long
2004 if (quantum_info->format == FloatingPointQuantumFormat)
2006 for (x=0; x < (long) number_pixels; x++)
2008 q=PopFloatPixel(&quantum_state,(float) p->red,q);
2009 q=PopFloatPixel(&quantum_state,(float) p->green,q);
2010 q=PopFloatPixel(&quantum_state,(float) p->blue,q);
2011 q=PopFloatPixel(&quantum_state,(float) indexes[x],q);
2013 q+=quantum_info->pad;
2017 for (x=0; x < (long) number_pixels; x++)
2019 pixel=ScaleQuantumToLong(p->red);
2020 q=PopLongPixel(endian,pixel,q);
2021 pixel=ScaleQuantumToLong(p->green);
2022 q=PopLongPixel(endian,pixel,q);
2023 pixel=ScaleQuantumToLong(p->blue);
2024 q=PopLongPixel(endian,pixel,q);
2025 pixel=ScaleQuantumToLong(indexes[x]);
2026 q=PopLongPixel(endian,pixel,q);
2028 q+=quantum_info->pad;
2034 if (quantum_info->format == FloatingPointQuantumFormat)
2036 for (x=0; x < (long) number_pixels; x++)
2038 q=PopDoublePixel(&quantum_state,(double) p->red,q);
2039 q=PopDoublePixel(&quantum_state,(double) p->green,q);
2040 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
2041 q=PopDoublePixel(&quantum_state,(double) indexes[x],q);
2043 q+=quantum_info->pad;
2050 range=GetQuantumRange(image->depth);
2051 for (x=0; x < (long) number_pixels; x++)
2053 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2055 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2057 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2059 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2060 indexes[x],range),q);
2062 q+=quantum_info->pad;
2072 if (image->colorspace != CMYKColorspace)
2074 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2075 "ColorSeparatedImageRequired","`%s'",image->filename);
2078 switch (quantum_info->depth)
2082 register unsigned char
2085 for (x=0; x < (long) number_pixels; x++)
2087 pixel=ScaleQuantumToChar(p->red);
2088 q=PopCharPixel(pixel,q);
2089 pixel=ScaleQuantumToChar(p->green);
2090 q=PopCharPixel(pixel,q);
2091 pixel=ScaleQuantumToChar(p->blue);
2092 q=PopCharPixel(pixel,q);
2093 pixel=ScaleQuantumToChar(indexes[x]);
2094 q=PopCharPixel(pixel,q);
2095 pixel=ScaleQuantumToChar((Quantum) (QuantumRange-p->opacity));
2096 q=PopCharPixel(pixel,q);
2098 q+=quantum_info->pad;
2104 register unsigned short
2107 for (x=0; x < (long) number_pixels; x++)
2109 pixel=ScaleQuantumToShort(p->red);
2110 q=PopShortPixel(endian,pixel,q);
2111 pixel=ScaleQuantumToShort(p->green);
2112 q=PopShortPixel(endian,pixel,q);
2113 pixel=ScaleQuantumToShort(p->blue);
2114 q=PopShortPixel(endian,pixel,q);
2115 pixel=ScaleQuantumToShort(indexes[x]);
2116 q=PopShortPixel(endian,pixel,q);
2117 pixel=ScaleQuantumToShort((Quantum) (QuantumRange-p->opacity));
2118 q=PopShortPixel(endian,pixel,q);
2120 q+=quantum_info->pad;
2126 register unsigned long
2129 if (quantum_info->format == FloatingPointQuantumFormat)
2131 for (x=0; x < (long) number_pixels; x++)
2136 q=PopFloatPixel(&quantum_state,(float) p->red,q);
2137 q=PopFloatPixel(&quantum_state,(float) p->green,q);
2138 q=PopFloatPixel(&quantum_state,(float) p->blue,q);
2139 q=PopFloatPixel(&quantum_state,(float) indexes[x],q);
2140 pixel=(float) (QuantumRange-p->opacity);
2141 q=PopFloatPixel(&quantum_state,pixel,q);
2143 q+=quantum_info->pad;
2147 for (x=0; x < (long) number_pixels; x++)
2149 pixel=ScaleQuantumToLong(p->red);
2150 q=PopLongPixel(endian,pixel,q);
2151 pixel=ScaleQuantumToLong(p->green);
2152 q=PopLongPixel(endian,pixel,q);
2153 pixel=ScaleQuantumToLong(p->blue);
2154 q=PopLongPixel(endian,pixel,q);
2155 pixel=ScaleQuantumToLong(indexes[x]);
2156 q=PopLongPixel(endian,pixel,q);
2157 pixel=ScaleQuantumToLong((Quantum) (QuantumRange-p->opacity));
2158 q=PopLongPixel(endian,pixel,q);
2160 q+=quantum_info->pad;
2166 if (quantum_info->format == FloatingPointQuantumFormat)
2171 for (x=0; x < (long) number_pixels; x++)
2173 q=PopDoublePixel(&quantum_state,(double) p->red,q);
2174 q=PopDoublePixel(&quantum_state,(double) p->green,q);
2175 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
2176 q=PopDoublePixel(&quantum_state,(double) indexes[x],q);
2177 pixel=(double) (QuantumRange-p->opacity);
2178 q=PopDoublePixel(&quantum_state,pixel,q);
2180 q+=quantum_info->pad;
2187 range=GetQuantumRange(image->depth);
2188 for (x=0; x < (long) number_pixels; x++)
2190 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2192 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2194 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2196 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2197 indexes[x],range),q);
2198 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2199 p->opacity,range),q);
2201 q+=quantum_info->pad;
2219 register unsigned long
2227 range=GetQuantumRange(image->depth);
2228 switch (quantum_info->depth)
2232 if (quantum_info->pack == MagickFalse)
2234 for (x=0; x < (long) number_pixels; x+=2)
2236 for (i=0; i < 4; i++)
2256 cbcr[i]=(Quantum) quantum;
2259 pixel=(unsigned long) ((unsigned long) (cbcr[1]) << 22 |
2260 (unsigned long) (cbcr[0]) << 12 |
2261 (unsigned long) (cbcr[2]) << 2);
2262 q=PopLongPixel(endian,pixel,q);
2264 pixel=(unsigned long) ((unsigned long) (cbcr[3]) << 22 |
2265 (unsigned long) (cbcr[0]) << 12 |
2266 (unsigned long) (cbcr[2]) << 2);
2267 q=PopLongPixel(endian,pixel,q);
2269 q+=quantum_info->pad;
2277 for (x=0; x < (long) number_pixels; x+=2)
2279 for (i=0; i < 4; i++)
2299 cbcr[i]=(Quantum) quantum;
2302 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2304 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2306 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2309 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2311 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2313 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2316 q+=quantum_info->pad;
2326 if ((quantum_type == CbYCrQuantum) || (quantum_type == CbYCrAQuantum))
2331 register PixelPacket
2334 q=GetAuthenticPixelQueue(image);
2335 if (image_view != (CacheView *) NULL)
2336 q=(PixelPacket *) GetCacheViewVirtualPixelQueue(image_view);
2337 for (x=0; x < (long) number_pixels; x++)
2345 if ((quantum_type == RGBOQuantum) || (quantum_type == CMYKOQuantum))
2347 register PixelPacket
2350 q=GetAuthenticPixelQueue(image);
2351 if (image_view != (CacheView *) NULL)
2352 q=(PixelPacket *) GetCacheViewVirtualPixelQueue(image_view);
2353 for (x=0; x < (long) number_pixels; x++)
2355 q->opacity=(Quantum) (QuantumRange-q->opacity);