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,
93 % const CacheView *image_view,const QuantumInfo *quantum_info,
94 % const QuantumType quantum_type,unsigned char *pixels,
95 % ExceptionInfo *exception)
97 % A description of each parameter follows:
101 % o image_view: the image cache view.
103 % o quantum_info: the quantum info.
105 % o quantum_type: Declare which pixel components to transfer (RGB, RGBA,
108 % o pixels: The components are transferred to this buffer.
110 % o exception: return any errors or warnings in this structure.
114 static inline unsigned char *PopDoublePixel(const QuantumState *quantum_state,
115 const double pixel,unsigned char *pixels)
123 p=(double *) quantum;
124 *p=(double) (pixel*quantum_state->inverse_scale+quantum_state->minimum);
125 if (quantum_state->endian != LSBEndian)
127 *pixels++=quantum[7];
128 *pixels++=quantum[6];
129 *pixels++=quantum[5];
130 *pixels++=quantum[4];
131 *pixels++=quantum[3];
132 *pixels++=quantum[2];
133 *pixels++=quantum[1];
134 *pixels++=quantum[0];
137 *pixels++=quantum[0];
138 *pixels++=quantum[1];
139 *pixels++=quantum[2];
140 *pixels++=quantum[3];
141 *pixels++=quantum[4];
142 *pixels++=quantum[5];
143 *pixels++=quantum[6];
144 *pixels++=quantum[7];
148 static inline unsigned char *PopFloatPixel(const QuantumState *quantum_state,
149 const float pixel,unsigned char *pixels)
158 *p=(float) ((double) pixel*quantum_state->inverse_scale+
159 quantum_state->minimum);
160 if (quantum_state->endian != LSBEndian)
162 *pixels++=quantum[3];
163 *pixels++=quantum[2];
164 *pixels++=quantum[1];
165 *pixels++=quantum[0];
168 *pixels++=quantum[0];
169 *pixels++=quantum[1];
170 *pixels++=quantum[2];
171 *pixels++=quantum[3];
175 static inline unsigned char *PopQuantumPixel(QuantumState *quantum_state,
176 const unsigned long depth,const QuantumAny pixel,unsigned char *pixels)
181 register unsigned long
184 if (quantum_state->bits == 0UL)
185 quantum_state->bits=8UL;
186 for (i=(long) depth; i > 0L; )
188 quantum_bits=(unsigned long) i;
189 if (quantum_bits > quantum_state->bits)
190 quantum_bits=quantum_state->bits;
192 if (quantum_state->bits == 8)
194 quantum_state->bits-=quantum_bits;
195 *pixels|=(((pixel >> i) &~ ((~0UL) << quantum_bits)) <<
196 quantum_state->bits);
197 if (quantum_state->bits == 0UL)
200 quantum_state->bits=8UL;
206 static inline unsigned char *PopQuantumLongPixel(QuantumState *quantum_state,
207 const unsigned long depth,const unsigned long pixel,unsigned char *pixels)
215 if (quantum_state->bits == 0UL)
216 quantum_state->bits=32UL;
217 for (i=(long) depth; i > 0; )
219 quantum_bits=(unsigned long) i;
220 if (quantum_bits > quantum_state->bits)
221 quantum_bits=quantum_state->bits;
222 quantum_state->pixel|=(((pixel >> (depth-i)) &
223 quantum_state->mask[quantum_bits]) << (32UL-quantum_state->bits));
225 quantum_state->bits-=quantum_bits;
226 if (quantum_state->bits == 0U)
228 pixels=PopLongPixel(quantum_state->endian,quantum_state->pixel,pixels);
229 quantum_state->pixel=0U;
230 quantum_state->bits=32UL;
236 MagickExport size_t ExportQuantumPixels(const Image *image,
237 const CacheView *image_view,const QuantumInfo *quantum_info,
238 const QuantumType quantum_type,unsigned char *pixels,ExceptionInfo *exception)
258 register const IndexPacket
261 register const PixelPacket
267 register unsigned char
273 assert(image != (Image *) NULL);
274 assert(image->signature == MagickSignature);
275 if (image->debug != MagickFalse)
276 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
277 assert(quantum_info != (QuantumInfo *) NULL);
278 assert(quantum_info->signature == MagickSignature);
279 if (pixels == (unsigned char *) NULL)
280 pixels=GetQuantumPixels(quantum_info);
281 number_pixels=GetImageExtent(image);
282 p=GetVirtualPixelQueue(image);
283 indexes=GetVirtualIndexQueue(image);
284 if (image_view != (CacheView *) NULL)
286 number_pixels=GetCacheViewExtent(image_view);
287 p=GetCacheViewVirtualPixelQueue(image_view);
288 indexes=GetCacheViewVirtualIndexQueue(image_view);
290 if (quantum_info->alpha_type == AssociatedQuantumAlpha)
298 q=GetAuthenticPixelQueue(image);
299 if (image_view != (CacheView *) NULL)
300 q=(PixelPacket *) GetCacheViewVirtualPixelQueue(image_view);
301 for (x=0; x < (long) image->columns; x++)
303 alpha=QuantumScale*((double) QuantumRange-q->opacity);
304 q->red=ClampToQuantum(alpha*q->red);
305 q->green=ClampToQuantum(alpha*q->green);
306 q->blue=ClampToQuantum(alpha*q->blue);
310 if ((quantum_type == RGBOQuantum) || (quantum_type == CMYKOQuantum))
315 q=GetAuthenticPixelQueue(image);
316 if (image_view != (CacheView *) NULL)
317 q=(PixelPacket *) GetCacheViewVirtualPixelQueue(image_view);
318 for (x=0; x < (long) number_pixels; x++)
320 q->opacity=(Quantum) GetAlphaPixelComponent(q);
324 if ((quantum_type == CbYCrQuantum) || (quantum_type == CbYCrAQuantum))
332 q=GetAuthenticPixelQueue(image);
333 if (image_view != (CacheView *) NULL)
334 q=GetAuthenticPixelQueue(image);
335 for (x=0; x < (long) number_pixels; x++)
345 InitializeQuantumState(quantum_info,image->endian,&quantum_state);
346 extent=GetQuantumExtent(image,quantum_info,quantum_type);
347 endian=quantum_state.endian;
348 switch (quantum_type)
352 if (image->storage_class != PseudoClass)
354 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
355 "ColormappedImageRequired","`%s'",image->filename);
358 switch (quantum_info->depth)
362 register unsigned char
365 for (x=((long) number_pixels-7); x > 0; x-=8)
367 pixel=(unsigned char) *indexes++;
368 *q=((pixel & 0x01) << 7);
369 pixel=(unsigned char) *indexes++;
370 *q|=((pixel & 0x01) << 6);
371 pixel=(unsigned char) *indexes++;
372 *q|=((pixel & 0x01) << 5);
373 pixel=(unsigned char) *indexes++;
374 *q|=((pixel & 0x01) << 4);
375 pixel=(unsigned char) *indexes++;
376 *q|=((pixel & 0x01) << 3);
377 pixel=(unsigned char) *indexes++;
378 *q|=((pixel & 0x01) << 2);
379 pixel=(unsigned char) *indexes++;
380 *q|=((pixel & 0x01) << 1);
381 pixel=(unsigned char) *indexes++;
382 *q|=((pixel & 0x01) << 0);
385 if ((number_pixels % 8) != 0)
388 for (bit=7; bit >= (long) (8-(number_pixels % 8)); bit--)
390 pixel=(unsigned char) *indexes++;
391 *q|=((pixel & 0x01) << (unsigned char) bit);
399 register unsigned char
402 for (x=0; x < (long) (number_pixels-1) ; x+=2)
404 pixel=(unsigned char) *indexes++;
405 *q=((pixel & 0xf) << 4);
406 pixel=(unsigned char) *indexes++;
407 *q|=((pixel & 0xf) << 0);
410 if ((number_pixels % 2) != 0)
412 pixel=(unsigned char) *indexes++;
413 *q=((pixel & 0xf) << 4);
420 for (x=0; x < (long) number_pixels; x++)
422 q=PopCharPixel((unsigned char) indexes[x],q);
423 q+=quantum_info->pad;
429 if (quantum_info->format == FloatingPointQuantumFormat)
431 for (x=0; x < (long) number_pixels; x++)
433 q=PopShortPixel(endian,SinglePrecisionToHalf(QuantumScale*
435 q+=quantum_info->pad;
439 for (x=0; x < (long) number_pixels; x++)
441 q=PopShortPixel(endian,(unsigned short) indexes[x],q);
442 q+=quantum_info->pad;
448 if (quantum_info->format == FloatingPointQuantumFormat)
450 for (x=0; x < (long) number_pixels; x++)
452 q=PopFloatPixel(&quantum_state,(float) indexes[x],q);
454 q+=quantum_info->pad;
458 for (x=0; x < (long) number_pixels; x++)
460 q=PopLongPixel(endian,(unsigned long) indexes[x],q);
461 q+=quantum_info->pad;
467 if (quantum_info->format == FloatingPointQuantumFormat)
469 for (x=0; x < (long) number_pixels; x++)
471 q=PopDoublePixel(&quantum_state,(double) indexes[x],q);
473 q+=quantum_info->pad;
480 for (x=0; x < (long) number_pixels; x++)
482 q=PopQuantumPixel(&quantum_state,image->depth,indexes[x],q);
484 q+=quantum_info->pad;
491 case IndexAlphaQuantum:
493 if (image->storage_class != PseudoClass)
495 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
496 "ColormappedImageRequired","`%s'",image->filename);
499 switch (quantum_info->depth)
503 register unsigned char
506 for (x=((long) number_pixels-3); x > 0; x-=4)
508 pixel=(unsigned char) *indexes++;
509 *q=((pixel & 0x01) << 7);
510 pixel=(unsigned char) (p->opacity == (Quantum) TransparentOpacity ?
512 *q|=((pixel & 0x01) << 6);
514 pixel=(unsigned char) *indexes++;
515 *q|=((pixel & 0x01) << 5);
516 pixel=(unsigned char) (p->opacity == (Quantum) TransparentOpacity ?
518 *q|=((pixel & 0x01) << 4);
520 pixel=(unsigned char) *indexes++;
521 *q|=((pixel & 0x01) << 3);
522 pixel=(unsigned char) (p->opacity == (Quantum) TransparentOpacity ?
524 *q|=((pixel & 0x01) << 2);
526 pixel=(unsigned char) *indexes++;
527 *q|=((pixel & 0x01) << 1);
528 pixel=(unsigned char) (p->opacity == (Quantum) TransparentOpacity ?
530 *q|=((pixel & 0x01) << 0);
534 if ((number_pixels % 4) != 0)
537 for (bit=3; bit >= (long) (4-(number_pixels % 4)); bit-=2)
539 pixel=(unsigned char) *indexes++;
540 *q|=((pixel & 0x01) << (unsigned char) (bit+4));
541 pixel=(unsigned char) (p->opacity == (Quantum)
542 TransparentOpacity ? 1 : 0);
543 *q|=((pixel & 0x01) << (unsigned char) (bit+4-1));
552 register unsigned char
555 for (x=0; x < (long) number_pixels ; x++)
557 pixel=(unsigned char) *indexes++;
558 *q=((pixel & 0xf) << 4);
559 pixel=(unsigned char) (16*QuantumScale*((Quantum) (QuantumRange-
560 GetOpacityPixelComponent(p)))+0.5);
561 *q|=((pixel & 0xf) << 0);
569 register unsigned char
572 for (x=0; x < (long) number_pixels; x++)
574 q=PopCharPixel((unsigned char) indexes[x],q);
575 pixel=ScaleQuantumToChar((Quantum) (QuantumRange-
576 GetOpacityPixelComponent(p)));
577 q=PopCharPixel(pixel,q);
579 q+=quantum_info->pad;
585 register unsigned short
588 if (quantum_info->format == FloatingPointQuantumFormat)
590 for (x=0; x < (long) number_pixels; x++)
592 q=PopShortPixel(endian,(unsigned short) indexes[x],q);
593 pixel=SinglePrecisionToHalf(QuantumScale*
594 GetAlphaPixelComponent(p));
595 q=PopShortPixel(endian,pixel,q);
597 q+=quantum_info->pad;
601 for (x=0; x < (long) number_pixels; x++)
603 q=PopShortPixel(endian,(unsigned short) indexes[x],q);
604 pixel=ScaleQuantumToShort((Quantum) (QuantumRange-
605 GetOpacityPixelComponent(p)));
606 q=PopShortPixel(endian,pixel,q);
608 q+=quantum_info->pad;
614 register unsigned long
617 if (quantum_info->format == FloatingPointQuantumFormat)
619 for (x=0; x < (long) number_pixels; x++)
624 q=PopFloatPixel(&quantum_state,(float) indexes[x],q);
625 pixel=(float) (GetAlphaPixelComponent(p));
626 q=PopFloatPixel(&quantum_state,pixel,q);
628 q+=quantum_info->pad;
632 for (x=0; x < (long) number_pixels; x++)
634 q=PopLongPixel(endian,(unsigned long) indexes[x],q);
635 pixel=ScaleQuantumToLong((Quantum) (QuantumRange-
636 GetOpacityPixelComponent(p)));
637 q=PopLongPixel(endian,pixel,q);
639 q+=quantum_info->pad;
645 if (quantum_info->format == FloatingPointQuantumFormat)
647 for (x=0; x < (long) number_pixels; x++)
652 q=PopDoublePixel(&quantum_state,(double) indexes[x],q);
653 pixel=(double) (GetAlphaPixelComponent(p));
654 q=PopDoublePixel(&quantum_state,pixel,q);
656 q+=quantum_info->pad;
663 range=GetQuantumRange(image->depth);
664 for (x=0; x < (long) number_pixels; x++)
666 q=PopQuantumPixel(&quantum_state,image->depth,indexes[x],q);
667 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
668 (Quantum) (GetAlphaPixelComponent(p)),range),q);
670 q+=quantum_info->pad;
679 switch (quantum_info->depth)
686 register unsigned char
692 if (quantum_info->min_is_white != MagickFalse)
697 threshold=(Quantum) (QuantumRange/2);
698 for (x=((long) number_pixels-7); x > 0; x-=8)
701 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 7;
703 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 6;
705 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 5;
707 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 4;
709 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 3;
711 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 2;
713 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 1;
715 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 0;
719 if ((number_pixels % 8) != 0)
722 for (bit=7; bit >= (long) (8-(number_pixels % 8)); bit--)
724 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) <<
734 register unsigned char
737 for (x=0; x < (long) (number_pixels-1) ; x+=2)
739 pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
740 *q=(((pixel >> 4) & 0xf) << 4);
742 pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
747 if ((number_pixels % 2) != 0)
749 pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
750 *q=(((pixel >> 4) & 0xf) << 4);
758 register unsigned char
761 for (x=0; x < (long) number_pixels; x++)
763 pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
764 q=PopCharPixel(pixel,q);
766 q+=quantum_info->pad;
772 range=GetQuantumRange(image->depth);
773 if (quantum_info->pack == MagickFalse)
775 register unsigned long
778 for (x=0; x < (long) (number_pixels-2); x+=3)
780 pixel=(unsigned long) (
781 ScaleQuantumToAny(PixelIntensityToQuantum(p+2),range) << 22 |
782 ScaleQuantumToAny(PixelIntensityToQuantum(p+1),range) << 12 |
783 ScaleQuantumToAny(PixelIntensityToQuantum(p+0),range) << 2);
784 q=PopLongPixel(endian,pixel,q);
786 q+=quantum_info->pad;
789 if (x++ < (long) (number_pixels-1))
790 pixel|=ScaleQuantumToAny(PixelIntensityToQuantum(p+1),
792 if (x++ < (long) number_pixels)
793 pixel|=ScaleQuantumToAny(PixelIntensityToQuantum(p+0),
795 q=PopLongPixel(endian,pixel,q);
798 for (x=0; x < (long) number_pixels; x++)
800 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
801 PixelIntensityToQuantum(p),range),q);
803 q+=quantum_info->pad;
809 register unsigned short
812 range=GetQuantumRange(image->depth);
813 if (quantum_info->pack == MagickFalse)
815 for (x=0; x < (long) number_pixels; x++)
817 pixel=ScaleQuantumToShort(PixelIntensityToQuantum(p));
818 q=PopShortPixel(endian,(unsigned short) (pixel >> 4),q);
820 q+=quantum_info->pad;
824 for (x=0; x < (long) number_pixels; x++)
826 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
827 PixelIntensityToQuantum(p),range),q);
829 q+=quantum_info->pad;
835 register unsigned short
838 if (quantum_info->format == FloatingPointQuantumFormat)
840 for (x=0; x < (long) number_pixels; x++)
842 pixel=SinglePrecisionToHalf(QuantumScale*
843 PixelIntensityToQuantum(p));
844 q=PopShortPixel(endian,pixel,q);
846 q+=quantum_info->pad;
850 for (x=0; x < (long) number_pixels; x++)
852 pixel=ScaleQuantumToShort(PixelIntensityToQuantum(p));
853 q=PopShortPixel(endian,pixel,q);
855 q+=quantum_info->pad;
861 register unsigned long
864 if (quantum_info->format == FloatingPointQuantumFormat)
866 for (x=0; x < (long) number_pixels; x++)
871 pixel=(float) PixelIntensityToQuantum(p);
872 q=PopFloatPixel(&quantum_state,pixel,q);
874 q+=quantum_info->pad;
878 for (x=0; x < (long) number_pixels; x++)
880 pixel=ScaleQuantumToLong(PixelIntensityToQuantum(p));
881 q=PopLongPixel(endian,pixel,q);
883 q+=quantum_info->pad;
889 if (quantum_info->format == FloatingPointQuantumFormat)
891 for (x=0; x < (long) number_pixels; x++)
896 pixel=(double) PixelIntensityToQuantum(p);
897 q=PopDoublePixel(&quantum_state,pixel,q);
899 q+=quantum_info->pad;
906 range=GetQuantumRange(image->depth);
907 for (x=0; x < (long) number_pixels; x++)
909 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
910 PixelIntensityToQuantum(p),range),q);
912 q+=quantum_info->pad;
919 case GrayAlphaQuantum:
921 switch (quantum_info->depth)
928 register unsigned char
935 if (quantum_info->min_is_white == MagickFalse)
940 threshold=(Quantum) (QuantumRange/2);
941 for (x=((long) number_pixels-3); x > 0; x-=4)
944 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 7;
945 pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 : 0x01);
946 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 6);
948 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 5;
949 pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 : 0x01);
950 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 4);
952 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 3;
953 pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 : 0x01);
954 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 2);
956 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 1;
957 pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 : 0x01);
958 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 0);
962 if ((number_pixels % 4) != 0)
965 for (bit=3; bit >= (long) (4-(number_pixels % 4)); bit-=2)
967 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) <<
969 pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 :
971 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << (unsigned char)
981 register unsigned char
984 for (x=0; x < (long) number_pixels ; x++)
986 pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
987 *q=(((pixel >> 4) & 0xf) << 4);
988 pixel=(unsigned char) (16*QuantumScale*((Quantum) (QuantumRange-
989 GetOpacityPixelComponent(p)))+0.5);
998 register unsigned char
1001 for (x=0; x < (long) number_pixels; x++)
1003 pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
1004 q=PopCharPixel(pixel,q);
1005 pixel=ScaleQuantumToChar((Quantum) (QuantumRange-
1006 GetOpacityPixelComponent(p)));
1007 q=PopCharPixel(pixel,q);
1009 q+=quantum_info->pad;
1015 register unsigned short
1018 if (quantum_info->format == FloatingPointQuantumFormat)
1020 for (x=0; x < (long) number_pixels; x++)
1022 pixel=SinglePrecisionToHalf(QuantumScale*
1023 PixelIntensityToQuantum(p));
1024 q=PopShortPixel(endian,pixel,q);
1025 pixel=SinglePrecisionToHalf(QuantumScale*
1026 GetAlphaPixelComponent(p));
1027 q=PopShortPixel(endian,pixel,q);
1029 q+=quantum_info->pad;
1033 for (x=0; x < (long) number_pixels; x++)
1035 pixel=ScaleQuantumToShort(PixelIntensityToQuantum(p));
1036 q=PopShortPixel(endian,pixel,q);
1037 pixel=ScaleQuantumToShort((Quantum) (QuantumRange-
1038 GetOpacityPixelComponent(p)));
1039 q=PopShortPixel(endian,pixel,q);
1041 q+=quantum_info->pad;
1047 register unsigned long
1050 if (quantum_info->format == FloatingPointQuantumFormat)
1052 for (x=0; x < (long) number_pixels; x++)
1057 pixel=(float) PixelIntensityToQuantum(p);
1058 q=PopFloatPixel(&quantum_state,pixel,q);
1059 pixel=(float) (GetAlphaPixelComponent(p));
1060 q=PopFloatPixel(&quantum_state,pixel,q);
1062 q+=quantum_info->pad;
1066 for (x=0; x < (long) number_pixels; x++)
1068 pixel=ScaleQuantumToLong(PixelIntensityToQuantum(p));
1069 q=PopLongPixel(endian,pixel,q);
1070 pixel=ScaleQuantumToLong((Quantum) (QuantumRange-
1071 GetOpacityPixelComponent(p)));
1072 q=PopLongPixel(endian,pixel,q);
1074 q+=quantum_info->pad;
1080 if (quantum_info->format == FloatingPointQuantumFormat)
1082 for (x=0; x < (long) number_pixels; x++)
1087 pixel=(double) PixelIntensityToQuantum(p);
1088 q=PopDoublePixel(&quantum_state,pixel,q);
1089 pixel=(double) (GetAlphaPixelComponent(p));
1090 q=PopDoublePixel(&quantum_state,pixel,q);
1092 q+=quantum_info->pad;
1099 range=GetQuantumRange(image->depth);
1100 for (x=0; x < (long) number_pixels; x++)
1102 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1103 PixelIntensityToQuantum(p),range),q);
1104 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1105 (Quantum) (GetAlphaPixelComponent(p)),range),q);
1107 q+=quantum_info->pad;
1117 switch (quantum_info->depth)
1121 register unsigned char
1124 for (x=0; x < (long) number_pixels; x++)
1126 pixel=ScaleQuantumToChar(GetRedPixelComponent(p));
1127 q=PopCharPixel(pixel,q);
1129 q+=quantum_info->pad;
1135 register unsigned short
1138 if (quantum_info->format == FloatingPointQuantumFormat)
1140 for (x=0; x < (long) number_pixels; x++)
1142 pixel=SinglePrecisionToHalf(QuantumScale*
1143 GetRedPixelComponent(p));
1144 q=PopShortPixel(endian,pixel,q);
1146 q+=quantum_info->pad;
1150 for (x=0; x < (long) number_pixels; x++)
1152 pixel=ScaleQuantumToShort(GetRedPixelComponent(p));
1153 q=PopShortPixel(endian,pixel,q);
1155 q+=quantum_info->pad;
1161 register unsigned long
1164 if (quantum_info->format == FloatingPointQuantumFormat)
1166 for (x=0; x < (long) number_pixels; x++)
1168 q=PopFloatPixel(&quantum_state,(float) p->red,q);
1170 q+=quantum_info->pad;
1174 for (x=0; x < (long) number_pixels; x++)
1176 pixel=ScaleQuantumToLong(GetRedPixelComponent(p));
1177 q=PopLongPixel(endian,pixel,q);
1179 q+=quantum_info->pad;
1185 if (quantum_info->format == FloatingPointQuantumFormat)
1187 for (x=0; x < (long) number_pixels; x++)
1189 q=PopDoublePixel(&quantum_state,(double) p->red,q);
1191 q+=quantum_info->pad;
1198 range=GetQuantumRange(image->depth);
1199 for (x=0; x < (long) number_pixels; x++)
1201 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1204 q+=quantum_info->pad;
1212 case MagentaQuantum:
1214 switch (quantum_info->depth)
1218 register unsigned char
1221 for (x=0; x < (long) number_pixels; x++)
1223 pixel=ScaleQuantumToChar(GetGreenPixelComponent(p));
1224 q=PopCharPixel(pixel,q);
1226 q+=quantum_info->pad;
1232 register unsigned short
1235 if (quantum_info->format == FloatingPointQuantumFormat)
1237 for (x=0; x < (long) number_pixels; x++)
1239 pixel=SinglePrecisionToHalf(QuantumScale*
1240 GetGreenPixelComponent(p));
1241 q=PopShortPixel(endian,pixel,q);
1243 q+=quantum_info->pad;
1247 for (x=0; x < (long) number_pixels; x++)
1249 pixel=ScaleQuantumToShort(GetGreenPixelComponent(p));
1250 q=PopShortPixel(endian,pixel,q);
1252 q+=quantum_info->pad;
1258 register unsigned long
1261 if (quantum_info->format == FloatingPointQuantumFormat)
1263 for (x=0; x < (long) number_pixels; x++)
1265 q=PopFloatPixel(&quantum_state,(float) p->green,q);
1267 q+=quantum_info->pad;
1271 for (x=0; x < (long) number_pixels; x++)
1273 pixel=ScaleQuantumToLong(GetGreenPixelComponent(p));
1274 q=PopLongPixel(endian,pixel,q);
1276 q+=quantum_info->pad;
1282 if (quantum_info->format == FloatingPointQuantumFormat)
1284 for (x=0; x < (long) number_pixels; x++)
1286 q=PopDoublePixel(&quantum_state,(double) p->green,q);
1288 q+=quantum_info->pad;
1295 range=GetQuantumRange(image->depth);
1296 for (x=0; x < (long) number_pixels; x++)
1298 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1301 q+=quantum_info->pad;
1311 switch (quantum_info->depth)
1315 register unsigned char
1318 for (x=0; x < (long) number_pixels; x++)
1320 pixel=ScaleQuantumToChar(GetBluePixelComponent(p));
1321 q=PopCharPixel(pixel,q);
1323 q+=quantum_info->pad;
1329 register unsigned short
1332 if (quantum_info->format == FloatingPointQuantumFormat)
1334 for (x=0; x < (long) number_pixels; x++)
1336 pixel=SinglePrecisionToHalf(QuantumScale*
1337 GetBluePixelComponent(p));
1338 q=PopShortPixel(endian,pixel,q);
1340 q+=quantum_info->pad;
1344 for (x=0; x < (long) number_pixels; x++)
1346 pixel=ScaleQuantumToShort(GetBluePixelComponent(p));
1347 q=PopShortPixel(endian,pixel,q);
1349 q+=quantum_info->pad;
1355 register unsigned long
1358 if (quantum_info->format == FloatingPointQuantumFormat)
1360 for (x=0; x < (long) number_pixels; x++)
1362 q=PopFloatPixel(&quantum_state,(float) p->blue,q);
1364 q+=quantum_info->pad;
1368 for (x=0; x < (long) number_pixels; x++)
1370 pixel=ScaleQuantumToLong(GetBluePixelComponent(p));
1371 q=PopLongPixel(endian,pixel,q);
1373 q+=quantum_info->pad;
1379 if (quantum_info->format == FloatingPointQuantumFormat)
1381 for (x=0; x < (long) number_pixels; x++)
1383 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
1385 q+=quantum_info->pad;
1392 range=GetQuantumRange(image->depth);
1393 for (x=0; x < (long) number_pixels; x++)
1395 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1398 q+=quantum_info->pad;
1407 switch (quantum_info->depth)
1411 register unsigned char
1414 for (x=0; x < (long) number_pixels; x++)
1416 pixel=ScaleQuantumToChar((Quantum) (QuantumRange-
1417 GetOpacityPixelComponent(p)));
1418 q=PopCharPixel(pixel,q);
1420 q+=quantum_info->pad;
1426 register unsigned short
1429 if (quantum_info->format == FloatingPointQuantumFormat)
1431 for (x=0; x < (long) number_pixels; x++)
1433 pixel=SinglePrecisionToHalf(QuantumScale*
1434 GetAlphaPixelComponent(p));
1435 q=PopShortPixel(endian,pixel,q);
1437 q+=quantum_info->pad;
1441 for (x=0; x < (long) number_pixels; x++)
1443 pixel=ScaleQuantumToShort((Quantum) (QuantumRange-
1444 GetOpacityPixelComponent(p)));
1445 q=PopShortPixel(endian,pixel,q);
1447 q+=quantum_info->pad;
1453 register unsigned long
1456 if (quantum_info->format == FloatingPointQuantumFormat)
1458 for (x=0; x < (long) number_pixels; x++)
1463 pixel=(float) (GetAlphaPixelComponent(p));
1464 q=PopFloatPixel(&quantum_state,pixel,q);
1466 q+=quantum_info->pad;
1470 for (x=0; x < (long) number_pixels; x++)
1472 pixel=ScaleQuantumToLong((Quantum) (QuantumRange-
1473 GetOpacityPixelComponent(p)));
1474 q=PopLongPixel(endian,pixel,q);
1476 q+=quantum_info->pad;
1482 if (quantum_info->format == FloatingPointQuantumFormat)
1484 for (x=0; x < (long) number_pixels; x++)
1489 pixel=(double) (GetAlphaPixelComponent(p));
1490 q=PopDoublePixel(&quantum_state,pixel,q);
1492 q+=quantum_info->pad;
1499 range=GetQuantumRange(image->depth);
1500 for (x=0; x < (long) number_pixels; x++)
1502 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1503 (Quantum) (GetAlphaPixelComponent(p)),range),q);
1505 q+=quantum_info->pad;
1512 case OpacityQuantum:
1514 switch (quantum_info->depth)
1518 register unsigned char
1521 for (x=0; x < (long) number_pixels; x++)
1523 pixel=ScaleQuantumToChar(GetOpacityPixelComponent(p));
1524 q=PopCharPixel(pixel,q);
1526 q+=quantum_info->pad;
1532 register unsigned short
1535 if (quantum_info->format == FloatingPointQuantumFormat)
1537 for (x=0; x < (long) number_pixels; x++)
1539 pixel=SinglePrecisionToHalf(QuantumScale*
1540 GetOpacityPixelComponent(p));
1541 q=PopShortPixel(endian,pixel,q);
1543 q+=quantum_info->pad;
1547 for (x=0; x < (long) number_pixels; x++)
1549 pixel=ScaleQuantumToShort(GetOpacityPixelComponent(p));
1550 q=PopShortPixel(endian,pixel,q);
1552 q+=quantum_info->pad;
1558 register unsigned long
1561 if (quantum_info->format == FloatingPointQuantumFormat)
1563 for (x=0; x < (long) number_pixels; x++)
1565 q=PopFloatPixel(&quantum_state,(float) p->opacity,q);
1567 q+=quantum_info->pad;
1571 for (x=0; x < (long) number_pixels; x++)
1573 pixel=ScaleQuantumToLong(GetOpacityPixelComponent(p));
1574 q=PopLongPixel(endian,pixel,q);
1576 q+=quantum_info->pad;
1582 if (quantum_info->format == FloatingPointQuantumFormat)
1584 for (x=0; x < (long) number_pixels; x++)
1586 q=PopDoublePixel(&quantum_state,(double) p->opacity,q);
1588 q+=quantum_info->pad;
1595 range=GetQuantumRange(image->depth);
1596 for (x=0; x < (long) number_pixels; x++)
1598 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1599 p->opacity,range),q);
1601 q+=quantum_info->pad;
1610 if (image->colorspace != CMYKColorspace)
1612 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1613 "ColorSeparatedImageRequired","`%s'",image->filename);
1616 switch (quantum_info->depth)
1620 register unsigned char
1623 for (x=0; x < (long) number_pixels; x++)
1625 pixel=ScaleQuantumToChar(indexes[x]);
1626 q=PopCharPixel(pixel,q);
1628 q+=quantum_info->pad;
1634 register unsigned short
1637 if (quantum_info->format == FloatingPointQuantumFormat)
1639 for (x=0; x < (long) number_pixels; x++)
1641 pixel=SinglePrecisionToHalf(QuantumScale*indexes[x]);
1642 q=PopShortPixel(endian,pixel,q);
1644 q+=quantum_info->pad;
1648 for (x=0; x < (long) number_pixels; x++)
1650 pixel=ScaleQuantumToShort(indexes[x]);
1651 q=PopShortPixel(endian,pixel,q);
1653 q+=quantum_info->pad;
1659 register unsigned long
1662 if (quantum_info->format == FloatingPointQuantumFormat)
1664 for (x=0; x < (long) number_pixels; x++)
1666 q=PopFloatPixel(&quantum_state,(float) indexes[x],q);
1668 q+=quantum_info->pad;
1672 for (x=0; x < (long) number_pixels; x++)
1674 pixel=ScaleQuantumToLong(indexes[x]);
1675 q=PopLongPixel(endian,pixel,q);
1677 q+=quantum_info->pad;
1683 if (quantum_info->format == FloatingPointQuantumFormat)
1685 for (x=0; x < (long) number_pixels; x++)
1687 q=PopDoublePixel(&quantum_state,(double) indexes[x],q);
1689 q+=quantum_info->pad;
1696 range=GetQuantumRange(image->depth);
1697 for (x=0; x < (long) number_pixels; x++)
1699 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1700 (Quantum) indexes[x],range),q);
1702 q+=quantum_info->pad;
1712 switch (quantum_info->depth)
1716 for (x=0; x < (long) number_pixels; x++)
1718 q=PopCharPixel(ScaleQuantumToChar(GetRedPixelComponent(p)),q);
1719 q=PopCharPixel(ScaleQuantumToChar(GetGreenPixelComponent(p)),q);
1720 q=PopCharPixel(ScaleQuantumToChar(GetBluePixelComponent(p)),q);
1722 q+=quantum_info->pad;
1728 register unsigned long
1731 range=GetQuantumRange(image->depth);
1732 if (quantum_info->pack == MagickFalse)
1734 for (x=0; x < (long) number_pixels; x++)
1736 pixel=(unsigned long) (ScaleQuantumToAny(p->red,range) << 22 |
1737 ScaleQuantumToAny(p->green,range) << 12 |
1738 ScaleQuantumToAny(p->blue,range) << 2);
1739 q=PopLongPixel(endian,pixel,q);
1741 q+=quantum_info->pad;
1745 if (quantum_info->quantum == 32UL)
1747 for (x=0; x < (long) number_pixels; x++)
1749 pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
1750 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
1751 pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
1752 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
1753 pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
1754 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
1756 q+=quantum_info->pad;
1760 for (x=0; x < (long) number_pixels; x++)
1762 pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
1763 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
1764 pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
1765 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
1766 pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
1767 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
1769 q+=quantum_info->pad;
1775 register unsigned long
1778 range=GetQuantumRange(image->depth);
1779 if (quantum_info->pack == MagickFalse)
1781 for (x=0; x < (long) (3*number_pixels-1); x+=2)
1788 pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
1793 pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
1798 pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
1803 q=PopShortPixel(endian,(unsigned short) (pixel << 4),q);
1809 pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
1814 pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
1819 pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
1824 q=PopShortPixel(endian,(unsigned short) (pixel << 4),q);
1825 q+=quantum_info->pad;
1827 for (bit=0; bit < (long) (3*number_pixels % 2); bit++)
1829 switch ((x+bit) % 3)
1834 pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
1839 pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
1844 pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
1849 q=PopShortPixel(endian,(unsigned short) (pixel << 4),q);
1850 q+=quantum_info->pad;
1856 if (quantum_info->quantum == 32UL)
1858 for (x=0; x < (long) number_pixels; x++)
1860 pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
1861 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
1862 pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
1863 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
1864 pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
1865 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
1867 q+=quantum_info->pad;
1871 for (x=0; x < (long) number_pixels; x++)
1873 pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
1874 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
1875 pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
1876 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
1877 pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
1878 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
1880 q+=quantum_info->pad;
1886 register unsigned short
1889 if (quantum_info->format == FloatingPointQuantumFormat)
1891 for (x=0; x < (long) number_pixels; x++)
1893 pixel=SinglePrecisionToHalf(QuantumScale*
1894 GetRedPixelComponent(p));
1895 q=PopShortPixel(endian,pixel,q);
1896 pixel=SinglePrecisionToHalf(QuantumScale*
1897 GetGreenPixelComponent(p));
1898 q=PopShortPixel(endian,pixel,q);
1899 pixel=SinglePrecisionToHalf(QuantumScale*
1900 GetBluePixelComponent(p));
1901 q=PopShortPixel(endian,pixel,q);
1903 q+=quantum_info->pad;
1907 for (x=0; x < (long) number_pixels; x++)
1909 pixel=ScaleQuantumToShort(GetRedPixelComponent(p));
1910 q=PopShortPixel(endian,pixel,q);
1911 pixel=ScaleQuantumToShort(GetGreenPixelComponent(p));
1912 q=PopShortPixel(endian,pixel,q);
1913 pixel=ScaleQuantumToShort(GetBluePixelComponent(p));
1914 q=PopShortPixel(endian,pixel,q);
1916 q+=quantum_info->pad;
1922 register unsigned long
1925 if (quantum_info->format == FloatingPointQuantumFormat)
1927 for (x=0; x < (long) number_pixels; x++)
1929 q=PopFloatPixel(&quantum_state,(float) p->red,q);
1930 q=PopFloatPixel(&quantum_state,(float) p->green,q);
1931 q=PopFloatPixel(&quantum_state,(float) p->blue,q);
1933 q+=quantum_info->pad;
1937 for (x=0; x < (long) number_pixels; x++)
1939 pixel=ScaleQuantumToLong(GetRedPixelComponent(p));
1940 q=PopLongPixel(endian,pixel,q);
1941 pixel=ScaleQuantumToLong(GetGreenPixelComponent(p));
1942 q=PopLongPixel(endian,pixel,q);
1943 pixel=ScaleQuantumToLong(GetBluePixelComponent(p));
1944 q=PopLongPixel(endian,pixel,q);
1946 q+=quantum_info->pad;
1952 if (quantum_info->format == FloatingPointQuantumFormat)
1954 for (x=0; x < (long) number_pixels; x++)
1956 q=PopDoublePixel(&quantum_state,(double) p->red,q);
1957 q=PopDoublePixel(&quantum_state,(double) p->green,q);
1958 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
1960 q+=quantum_info->pad;
1967 range=GetQuantumRange(image->depth);
1968 for (x=0; x < (long) number_pixels; x++)
1970 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1972 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1974 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1977 q+=quantum_info->pad;
1988 switch (quantum_info->depth)
1992 register unsigned char
1995 for (x=0; x < (long) number_pixels; x++)
1997 pixel=ScaleQuantumToChar(GetRedPixelComponent(p));
1998 q=PopCharPixel(pixel,q);
1999 pixel=ScaleQuantumToChar(GetGreenPixelComponent(p));
2000 q=PopCharPixel(pixel,q);
2001 pixel=ScaleQuantumToChar(GetBluePixelComponent(p));
2002 q=PopCharPixel(pixel,q);
2003 pixel=ScaleQuantumToChar(GetAlphaPixelComponent(p));
2004 q=PopCharPixel(pixel,q);
2006 q+=quantum_info->pad;
2012 register unsigned long
2015 range=GetQuantumRange(image->depth);
2016 if (quantum_info->pack == MagickFalse)
2030 for (x=0; x < (long) number_pixels; x++)
2032 for (i=0; i < 4; i++)
2036 case 0: quantum=p->red; break;
2037 case 1: quantum=p->green; break;
2038 case 2: quantum=p->blue; break;
2039 case 3: quantum=QuantumRange-p->opacity; break;
2045 pixel|=(unsigned long) (ScaleQuantumToAny(quantum,
2051 pixel|=(unsigned long) (ScaleQuantumToAny(quantum,
2057 pixel|=(unsigned long) (ScaleQuantumToAny(quantum,
2059 q=PopLongPixel(endian,pixel,q);
2067 q+=quantum_info->pad;
2071 if (quantum_info->quantum == 32UL)
2073 for (x=0; x < (long) number_pixels; x++)
2075 pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
2076 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
2077 pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
2078 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
2079 pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
2080 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
2081 pixel=(unsigned long) ScaleQuantumToAny(QuantumRange-p->opacity,
2083 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
2085 q+=quantum_info->pad;
2089 for (x=0; x < (long) number_pixels; x++)
2091 pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
2092 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
2093 pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
2094 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
2095 pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
2096 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
2097 pixel=(unsigned long) ScaleQuantumToAny(QuantumRange-
2099 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
2101 q+=quantum_info->pad;
2107 register unsigned short
2110 if (quantum_info->format == FloatingPointQuantumFormat)
2112 for (x=0; x < (long) number_pixels; x++)
2114 pixel=SinglePrecisionToHalf(QuantumScale*
2115 GetRedPixelComponent(p));
2116 q=PopShortPixel(endian,pixel,q);
2117 pixel=SinglePrecisionToHalf(QuantumScale*
2118 GetGreenPixelComponent(p));
2119 q=PopShortPixel(endian,pixel,q);
2120 pixel=SinglePrecisionToHalf(QuantumScale*
2121 GetBluePixelComponent(p));
2122 q=PopShortPixel(endian,pixel,q);
2123 pixel=SinglePrecisionToHalf(QuantumScale*
2124 GetAlphaPixelComponent(p));
2125 q=PopShortPixel(endian,pixel,q);
2127 q+=quantum_info->pad;
2131 for (x=0; x < (long) number_pixels; x++)
2133 pixel=ScaleQuantumToShort(GetRedPixelComponent(p));
2134 q=PopShortPixel(endian,pixel,q);
2135 pixel=ScaleQuantumToShort(GetGreenPixelComponent(p));
2136 q=PopShortPixel(endian,pixel,q);
2137 pixel=ScaleQuantumToShort(GetBluePixelComponent(p));
2138 q=PopShortPixel(endian,pixel,q);
2139 pixel=ScaleQuantumToShort(GetAlphaPixelComponent(p));
2140 q=PopShortPixel(endian,pixel,q);
2142 q+=quantum_info->pad;
2148 register unsigned long
2151 if (quantum_info->format == FloatingPointQuantumFormat)
2153 for (x=0; x < (long) number_pixels; x++)
2158 q=PopFloatPixel(&quantum_state,(float) p->red,q);
2159 q=PopFloatPixel(&quantum_state,(float) p->green,q);
2160 q=PopFloatPixel(&quantum_state,(float) p->blue,q);
2161 pixel=GetAlphaPixelComponent(p);
2162 q=PopFloatPixel(&quantum_state,pixel,q);
2164 q+=quantum_info->pad;
2168 for (x=0; x < (long) number_pixels; x++)
2170 pixel=ScaleQuantumToLong(GetRedPixelComponent(p));
2171 q=PopLongPixel(endian,pixel,q);
2172 pixel=ScaleQuantumToLong(GetGreenPixelComponent(p));
2173 q=PopLongPixel(endian,pixel,q);
2174 pixel=ScaleQuantumToLong(GetBluePixelComponent(p));
2175 q=PopLongPixel(endian,pixel,q);
2176 pixel=ScaleQuantumToLong(GetAlphaPixelComponent(p));
2177 q=PopLongPixel(endian,pixel,q);
2179 q+=quantum_info->pad;
2185 if (quantum_info->format == FloatingPointQuantumFormat)
2190 for (x=0; x < (long) number_pixels; x++)
2192 q=PopDoublePixel(&quantum_state,(double) p->red,q);
2193 q=PopDoublePixel(&quantum_state,(double) p->green,q);
2194 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
2195 pixel=(double) GetAlphaPixelComponent(p);
2196 q=PopDoublePixel(&quantum_state,pixel,q);
2198 q+=quantum_info->pad;
2205 range=GetQuantumRange(image->depth);
2206 for (x=0; x < (long) number_pixels; x++)
2208 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2209 GetRedPixelComponent(p),range),q);
2210 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2211 GetGreenPixelComponent(p),range),q);
2212 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2213 GetBluePixelComponent(p),range),q);
2214 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2215 GetAlphaPixelComponent(p),range),q);
2217 q+=quantum_info->pad;
2226 if (image->colorspace != CMYKColorspace)
2228 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2229 "ColorSeparatedImageRequired","`%s'",image->filename);
2232 switch (quantum_info->depth)
2236 register unsigned char
2239 for (x=0; x < (long) number_pixels; x++)
2241 pixel=ScaleQuantumToChar(GetRedPixelComponent(p));
2242 q=PopCharPixel(pixel,q);
2243 pixel=ScaleQuantumToChar(GetGreenPixelComponent(p));
2244 q=PopCharPixel(pixel,q);
2245 pixel=ScaleQuantumToChar(GetBluePixelComponent(p));
2246 q=PopCharPixel(pixel,q);
2247 pixel=ScaleQuantumToChar(indexes[x]);
2248 q=PopCharPixel(pixel,q);
2250 q+=quantum_info->pad;
2256 register unsigned short
2259 if (quantum_info->format == FloatingPointQuantumFormat)
2261 for (x=0; x < (long) number_pixels; x++)
2263 pixel=SinglePrecisionToHalf(QuantumScale*
2264 GetRedPixelComponent(p));
2265 q=PopShortPixel(endian,pixel,q);
2266 pixel=SinglePrecisionToHalf(QuantumScale*
2267 GetGreenPixelComponent(p));
2268 q=PopShortPixel(endian,pixel,q);
2269 pixel=SinglePrecisionToHalf(QuantumScale*
2270 GetBluePixelComponent(p));
2271 q=PopShortPixel(endian,pixel,q);
2272 pixel=SinglePrecisionToHalf(QuantumScale*indexes[x]);
2273 q=PopShortPixel(endian,pixel,q);
2275 q+=quantum_info->pad;
2279 for (x=0; x < (long) number_pixels; x++)
2281 pixel=ScaleQuantumToShort(GetRedPixelComponent(p));
2282 q=PopShortPixel(endian,pixel,q);
2283 pixel=ScaleQuantumToShort(GetGreenPixelComponent(p));
2284 q=PopShortPixel(endian,pixel,q);
2285 pixel=ScaleQuantumToShort(GetBluePixelComponent(p));
2286 q=PopShortPixel(endian,pixel,q);
2287 pixel=ScaleQuantumToShort(indexes[x]);
2288 q=PopShortPixel(endian,pixel,q);
2290 q+=quantum_info->pad;
2296 register unsigned long
2299 if (quantum_info->format == FloatingPointQuantumFormat)
2301 for (x=0; x < (long) number_pixels; x++)
2303 q=PopFloatPixel(&quantum_state,(float) p->red,q);
2304 q=PopFloatPixel(&quantum_state,(float) p->green,q);
2305 q=PopFloatPixel(&quantum_state,(float) p->blue,q);
2306 q=PopFloatPixel(&quantum_state,(float) indexes[x],q);
2308 q+=quantum_info->pad;
2312 for (x=0; x < (long) number_pixels; x++)
2314 pixel=ScaleQuantumToLong(GetRedPixelComponent(p));
2315 q=PopLongPixel(endian,pixel,q);
2316 pixel=ScaleQuantumToLong(GetGreenPixelComponent(p));
2317 q=PopLongPixel(endian,pixel,q);
2318 pixel=ScaleQuantumToLong(GetBluePixelComponent(p));
2319 q=PopLongPixel(endian,pixel,q);
2320 pixel=ScaleQuantumToLong(indexes[x]);
2321 q=PopLongPixel(endian,pixel,q);
2323 q+=quantum_info->pad;
2329 if (quantum_info->format == FloatingPointQuantumFormat)
2331 for (x=0; x < (long) number_pixels; x++)
2333 q=PopDoublePixel(&quantum_state,(double) p->red,q);
2334 q=PopDoublePixel(&quantum_state,(double) p->green,q);
2335 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
2336 q=PopDoublePixel(&quantum_state,(double) indexes[x],q);
2338 q+=quantum_info->pad;
2345 range=GetQuantumRange(image->depth);
2346 for (x=0; x < (long) number_pixels; x++)
2348 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2350 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2352 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2354 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2355 indexes[x],range),q);
2357 q+=quantum_info->pad;
2367 if (image->colorspace != CMYKColorspace)
2369 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2370 "ColorSeparatedImageRequired","`%s'",image->filename);
2373 switch (quantum_info->depth)
2377 register unsigned char
2380 for (x=0; x < (long) number_pixels; x++)
2382 pixel=ScaleQuantumToChar(GetRedPixelComponent(p));
2383 q=PopCharPixel(pixel,q);
2384 pixel=ScaleQuantumToChar(GetGreenPixelComponent(p));
2385 q=PopCharPixel(pixel,q);
2386 pixel=ScaleQuantumToChar(GetBluePixelComponent(p));
2387 q=PopCharPixel(pixel,q);
2388 pixel=ScaleQuantumToChar(indexes[x]);
2389 q=PopCharPixel(pixel,q);
2390 pixel=ScaleQuantumToChar((Quantum) (QuantumRange-
2391 GetOpacityPixelComponent(p)));
2392 q=PopCharPixel(pixel,q);
2394 q+=quantum_info->pad;
2400 register unsigned short
2403 if (quantum_info->format == FloatingPointQuantumFormat)
2405 for (x=0; x < (long) number_pixels; x++)
2407 pixel=SinglePrecisionToHalf(QuantumScale*
2408 GetRedPixelComponent(p));
2409 q=PopShortPixel(endian,pixel,q);
2410 pixel=SinglePrecisionToHalf(QuantumScale*
2411 GetGreenPixelComponent(p));
2412 q=PopShortPixel(endian,pixel,q);
2413 pixel=SinglePrecisionToHalf(QuantumScale*
2414 GetBluePixelComponent(p));
2415 q=PopShortPixel(endian,pixel,q);
2416 pixel=SinglePrecisionToHalf(QuantumScale*indexes[x]);
2417 q=PopShortPixel(endian,pixel,q);
2418 pixel=SinglePrecisionToHalf(QuantumScale*
2419 GetAlphaPixelComponent(p));
2420 q=PopShortPixel(endian,pixel,q);
2422 q+=quantum_info->pad;
2426 for (x=0; x < (long) number_pixels; x++)
2428 pixel=ScaleQuantumToShort(GetRedPixelComponent(p));
2429 q=PopShortPixel(endian,pixel,q);
2430 pixel=ScaleQuantumToShort(GetGreenPixelComponent(p));
2431 q=PopShortPixel(endian,pixel,q);
2432 pixel=ScaleQuantumToShort(GetBluePixelComponent(p));
2433 q=PopShortPixel(endian,pixel,q);
2434 pixel=ScaleQuantumToShort(indexes[x]);
2435 q=PopShortPixel(endian,pixel,q);
2436 pixel=ScaleQuantumToShort((Quantum) (QuantumRange-
2437 GetOpacityPixelComponent(p)));
2438 q=PopShortPixel(endian,pixel,q);
2440 q+=quantum_info->pad;
2446 register unsigned long
2449 if (quantum_info->format == FloatingPointQuantumFormat)
2451 for (x=0; x < (long) number_pixels; x++)
2456 q=PopFloatPixel(&quantum_state,(float) p->red,q);
2457 q=PopFloatPixel(&quantum_state,(float) p->green,q);
2458 q=PopFloatPixel(&quantum_state,(float) p->blue,q);
2459 q=PopFloatPixel(&quantum_state,(float) indexes[x],q);
2460 pixel=(float) (GetAlphaPixelComponent(p));
2461 q=PopFloatPixel(&quantum_state,pixel,q);
2463 q+=quantum_info->pad;
2467 for (x=0; x < (long) number_pixels; x++)
2469 pixel=ScaleQuantumToLong(GetRedPixelComponent(p));
2470 q=PopLongPixel(endian,pixel,q);
2471 pixel=ScaleQuantumToLong(GetGreenPixelComponent(p));
2472 q=PopLongPixel(endian,pixel,q);
2473 pixel=ScaleQuantumToLong(GetBluePixelComponent(p));
2474 q=PopLongPixel(endian,pixel,q);
2475 pixel=ScaleQuantumToLong(indexes[x]);
2476 q=PopLongPixel(endian,pixel,q);
2477 pixel=ScaleQuantumToLong((Quantum) (QuantumRange-
2478 GetOpacityPixelComponent(p)));
2479 q=PopLongPixel(endian,pixel,q);
2481 q+=quantum_info->pad;
2487 if (quantum_info->format == FloatingPointQuantumFormat)
2492 for (x=0; x < (long) number_pixels; x++)
2494 q=PopDoublePixel(&quantum_state,(double) p->red,q);
2495 q=PopDoublePixel(&quantum_state,(double) p->green,q);
2496 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
2497 q=PopDoublePixel(&quantum_state,(double) indexes[x],q);
2498 pixel=(double) (GetAlphaPixelComponent(p));
2499 q=PopDoublePixel(&quantum_state,pixel,q);
2501 q+=quantum_info->pad;
2508 range=GetQuantumRange(image->depth);
2509 for (x=0; x < (long) number_pixels; x++)
2511 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2513 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2515 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2517 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2518 indexes[x],range),q);
2519 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2520 p->opacity,range),q);
2522 q+=quantum_info->pad;
2540 register unsigned long
2548 range=GetQuantumRange(image->depth);
2549 switch (quantum_info->depth)
2553 if (quantum_info->pack == MagickFalse)
2555 for (x=0; x < (long) number_pixels; x+=2)
2557 for (i=0; i < 4; i++)
2563 quantum=GetRedPixelComponent(p);
2568 quantum=GetGreenPixelComponent(p);
2573 quantum=GetBluePixelComponent(p);
2577 cbcr[i]=(Quantum) quantum;
2580 pixel=(unsigned long) ((unsigned long) (cbcr[1]) << 22 |
2581 (unsigned long) (cbcr[0]) << 12 |
2582 (unsigned long) (cbcr[2]) << 2);
2583 q=PopLongPixel(endian,pixel,q);
2585 pixel=(unsigned long) ((unsigned long) (cbcr[3]) << 22 |
2586 (unsigned long) (cbcr[0]) << 12 |
2587 (unsigned long) (cbcr[2]) << 2);
2588 q=PopLongPixel(endian,pixel,q);
2590 q+=quantum_info->pad;
2598 for (x=0; x < (long) number_pixels; x+=2)
2600 for (i=0; i < 4; i++)
2606 quantum=GetRedPixelComponent(p);
2611 quantum=GetGreenPixelComponent(p);
2616 quantum=GetBluePixelComponent(p);
2620 cbcr[i]=(Quantum) quantum;
2623 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2625 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2627 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2630 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2632 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2634 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2637 q+=quantum_info->pad;
2647 if ((quantum_type == CbYCrQuantum) || (quantum_type == CbYCrAQuantum))
2652 register PixelPacket
2655 q=GetAuthenticPixelQueue(image);
2656 if (image_view != (CacheView *) NULL)
2657 q=(PixelPacket *) GetCacheViewVirtualPixelQueue(image_view);
2658 for (x=0; x < (long) number_pixels; x++)
2666 if ((quantum_type == RGBOQuantum) || (quantum_type == CMYKOQuantum))
2668 register PixelPacket
2671 q=GetAuthenticPixelQueue(image);
2672 if (image_view != (CacheView *) NULL)
2673 q=(PixelPacket *) GetCacheViewVirtualPixelQueue(image_view);
2674 for (x=0; x < (long) number_pixels; x++)
2676 q->opacity=(Quantum) GetAlphaPixelComponent(q);