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=ClampToQuantum(alpha*q->red);
304 q->green=ClampToQuantum(alpha*q->green);
305 q->blue=ClampToQuantum(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) GetAlphaPixelComponent(q);
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 if (quantum_info->format == FloatingPointQuantumFormat)
430 for (x=0; x < (long) number_pixels; x++)
432 q=PopShortPixel(endian,SinglePrecisionToHalf(QuantumScale*
434 q+=quantum_info->pad;
438 for (x=0; x < (long) number_pixels; x++)
440 q=PopShortPixel(endian,(unsigned short) indexes[x],q);
441 q+=quantum_info->pad;
447 if (quantum_info->format == FloatingPointQuantumFormat)
449 for (x=0; x < (long) number_pixels; x++)
451 q=PopFloatPixel(&quantum_state,(float) indexes[x],q);
453 q+=quantum_info->pad;
457 for (x=0; x < (long) number_pixels; x++)
459 q=PopLongPixel(endian,(unsigned long) indexes[x],q);
460 q+=quantum_info->pad;
466 if (quantum_info->format == FloatingPointQuantumFormat)
468 for (x=0; x < (long) number_pixels; x++)
470 q=PopDoublePixel(&quantum_state,(double) indexes[x],q);
472 q+=quantum_info->pad;
479 for (x=0; x < (long) number_pixels; x++)
481 q=PopQuantumPixel(&quantum_state,image->depth,indexes[x],q);
483 q+=quantum_info->pad;
490 case IndexAlphaQuantum:
492 if (image->storage_class != PseudoClass)
494 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
495 "ColormappedImageRequired","`%s'",image->filename);
498 switch (quantum_info->depth)
502 register unsigned char
505 for (x=((long) number_pixels-3); x > 0; x-=4)
507 pixel=(unsigned char) *indexes++;
508 *q=((pixel & 0x01) << 7);
509 pixel=(unsigned char) (p->opacity == (Quantum) TransparentOpacity ?
511 *q|=((pixel & 0x01) << 6);
513 pixel=(unsigned char) *indexes++;
514 *q|=((pixel & 0x01) << 5);
515 pixel=(unsigned char) (p->opacity == (Quantum) TransparentOpacity ?
517 *q|=((pixel & 0x01) << 4);
519 pixel=(unsigned char) *indexes++;
520 *q|=((pixel & 0x01) << 3);
521 pixel=(unsigned char) (p->opacity == (Quantum) TransparentOpacity ?
523 *q|=((pixel & 0x01) << 2);
525 pixel=(unsigned char) *indexes++;
526 *q|=((pixel & 0x01) << 1);
527 pixel=(unsigned char) (p->opacity == (Quantum) TransparentOpacity ?
529 *q|=((pixel & 0x01) << 0);
533 if ((number_pixels % 4) != 0)
536 for (bit=3; bit >= (long) (4-(number_pixels % 4)); bit-=2)
538 pixel=(unsigned char) *indexes++;
539 *q|=((pixel & 0x01) << (unsigned char) (bit+4));
540 pixel=(unsigned char) (p->opacity == (Quantum)
541 TransparentOpacity ? 1 : 0);
542 *q|=((pixel & 0x01) << (unsigned char) (bit+4-1));
551 register unsigned char
554 for (x=0; x < (long) number_pixels ; x++)
556 pixel=(unsigned char) *indexes++;
557 *q=((pixel & 0xf) << 4);
558 pixel=(unsigned char) (16*QuantumScale*((Quantum) (QuantumRange-
559 GetOpacityPixelComponent(p)))+0.5);
560 *q|=((pixel & 0xf) << 0);
568 register unsigned char
571 for (x=0; x < (long) number_pixels; x++)
573 q=PopCharPixel((unsigned char) indexes[x],q);
574 pixel=ScaleQuantumToChar((Quantum) (QuantumRange-
575 GetOpacityPixelComponent(p)));
576 q=PopCharPixel(pixel,q);
578 q+=quantum_info->pad;
584 register unsigned short
587 if (quantum_info->format == FloatingPointQuantumFormat)
589 for (x=0; x < (long) number_pixels; x++)
591 q=PopShortPixel(endian,(unsigned short) indexes[x],q);
592 pixel=SinglePrecisionToHalf(QuantumScale*
593 GetAlphaPixelComponent(p));
594 q=PopShortPixel(endian,pixel,q);
596 q+=quantum_info->pad;
600 for (x=0; x < (long) number_pixels; x++)
602 q=PopShortPixel(endian,(unsigned short) indexes[x],q);
603 pixel=ScaleQuantumToShort((Quantum) (QuantumRange-
604 GetOpacityPixelComponent(p)));
605 q=PopShortPixel(endian,pixel,q);
607 q+=quantum_info->pad;
613 register unsigned long
616 if (quantum_info->format == FloatingPointQuantumFormat)
618 for (x=0; x < (long) number_pixels; x++)
623 q=PopFloatPixel(&quantum_state,(float) indexes[x],q);
624 pixel=(float) (GetAlphaPixelComponent(p));
625 q=PopFloatPixel(&quantum_state,pixel,q);
627 q+=quantum_info->pad;
631 for (x=0; x < (long) number_pixels; x++)
633 q=PopLongPixel(endian,(unsigned long) indexes[x],q);
634 pixel=ScaleQuantumToLong((Quantum) (QuantumRange-
635 GetOpacityPixelComponent(p)));
636 q=PopLongPixel(endian,pixel,q);
638 q+=quantum_info->pad;
644 if (quantum_info->format == FloatingPointQuantumFormat)
646 for (x=0; x < (long) number_pixels; x++)
651 q=PopDoublePixel(&quantum_state,(double) indexes[x],q);
652 pixel=(double) (GetAlphaPixelComponent(p));
653 q=PopDoublePixel(&quantum_state,pixel,q);
655 q+=quantum_info->pad;
662 range=GetQuantumRange(image->depth);
663 for (x=0; x < (long) number_pixels; x++)
665 q=PopQuantumPixel(&quantum_state,image->depth,indexes[x],q);
666 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
667 (Quantum) (GetAlphaPixelComponent(p)),range),q);
669 q+=quantum_info->pad;
678 switch (quantum_info->depth)
685 register unsigned char
691 if (quantum_info->min_is_white != MagickFalse)
696 threshold=(Quantum) (QuantumRange/2);
697 for (x=((long) number_pixels-7); x > 0; x-=8)
700 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 7;
702 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 6;
704 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 5;
706 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 4;
708 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 3;
710 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 2;
712 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 1;
714 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 0;
718 if ((number_pixels % 8) != 0)
721 for (bit=7; bit >= (long) (8-(number_pixels % 8)); bit--)
723 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) <<
733 register unsigned char
736 for (x=0; x < (long) (number_pixels-1) ; x+=2)
738 pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
739 *q=(((pixel >> 4) & 0xf) << 4);
741 pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
746 if ((number_pixels % 2) != 0)
748 pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
749 *q=(((pixel >> 4) & 0xf) << 4);
757 register unsigned char
760 for (x=0; x < (long) number_pixels; x++)
762 pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
763 q=PopCharPixel(pixel,q);
765 q+=quantum_info->pad;
771 range=GetQuantumRange(image->depth);
772 if (quantum_info->pack == MagickFalse)
774 register unsigned long
777 for (x=0; x < (long) number_pixels; x+=3)
779 pixel=(unsigned long) (
780 ScaleQuantumToAny(PixelIntensityToQuantum(p+2),range) << 22 |
781 ScaleQuantumToAny(PixelIntensityToQuantum(p+1),range) << 12 |
782 ScaleQuantumToAny(PixelIntensityToQuantum(p+0),range) << 2);
783 q=PopLongPixel(endian,pixel,q);
785 q+=quantum_info->pad;
787 if (x++ < (long) (number_pixels-1))
788 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
789 PixelIntensityToQuantum(p+1),range),q);
790 if (x++ < (long) number_pixels)
791 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
792 PixelIntensityToQuantum(p+0),range),q);
795 for (x=0; x < (long) number_pixels; x++)
797 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
798 PixelIntensityToQuantum(p),range),q);
800 q+=quantum_info->pad;
806 register unsigned short
809 range=GetQuantumRange(image->depth);
810 if (quantum_info->pack == MagickFalse)
812 for (x=0; x < (long) number_pixels; x++)
814 pixel=ScaleQuantumToShort(PixelIntensityToQuantum(p));
815 q=PopShortPixel(endian,(unsigned short) (pixel >> 4),q);
817 q+=quantum_info->pad;
821 for (x=0; x < (long) number_pixels; x++)
823 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
824 PixelIntensityToQuantum(p),range),q);
826 q+=quantum_info->pad;
832 register unsigned short
835 if (quantum_info->format == FloatingPointQuantumFormat)
837 for (x=0; x < (long) number_pixels; x++)
839 pixel=SinglePrecisionToHalf(QuantumScale*
840 PixelIntensityToQuantum(p));
841 q=PopShortPixel(endian,pixel,q);
843 q+=quantum_info->pad;
847 for (x=0; x < (long) number_pixels; x++)
849 pixel=ScaleQuantumToShort(PixelIntensityToQuantum(p));
850 q=PopShortPixel(endian,pixel,q);
852 q+=quantum_info->pad;
858 register unsigned long
861 if (quantum_info->format == FloatingPointQuantumFormat)
863 for (x=0; x < (long) number_pixels; x++)
868 pixel=(float) PixelIntensityToQuantum(p);
869 q=PopFloatPixel(&quantum_state,pixel,q);
871 q+=quantum_info->pad;
875 for (x=0; x < (long) number_pixels; x++)
877 pixel=ScaleQuantumToLong(PixelIntensityToQuantum(p));
878 q=PopLongPixel(endian,pixel,q);
880 q+=quantum_info->pad;
886 if (quantum_info->format == FloatingPointQuantumFormat)
888 for (x=0; x < (long) number_pixels; x++)
893 pixel=(double) PixelIntensityToQuantum(p);
894 q=PopDoublePixel(&quantum_state,pixel,q);
896 q+=quantum_info->pad;
903 range=GetQuantumRange(image->depth);
904 for (x=0; x < (long) number_pixels; x++)
906 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
907 PixelIntensityToQuantum(p),range),q);
909 q+=quantum_info->pad;
916 case GrayAlphaQuantum:
918 switch (quantum_info->depth)
925 register unsigned char
932 if (quantum_info->min_is_white == MagickFalse)
937 threshold=(Quantum) (QuantumRange/2);
938 for (x=((long) number_pixels-3); x > 0; x-=4)
941 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 7;
942 pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 : 0x01);
943 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 6);
945 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 5;
946 pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 : 0x01);
947 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 4);
949 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 3;
950 pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 : 0x01);
951 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 2);
953 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 1;
954 pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 : 0x01);
955 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 0);
959 if ((number_pixels % 4) != 0)
962 for (bit=3; bit >= (long) (4-(number_pixels % 4)); bit-=2)
964 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) <<
966 pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 :
968 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << (unsigned char)
978 register unsigned char
981 for (x=0; x < (long) number_pixels ; x++)
983 pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
984 *q=(((pixel >> 4) & 0xf) << 4);
985 pixel=(unsigned char) (16*QuantumScale*((Quantum) (QuantumRange-
986 GetOpacityPixelComponent(p)))+0.5);
995 register unsigned char
998 for (x=0; x < (long) number_pixels; x++)
1000 pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
1001 q=PopCharPixel(pixel,q);
1002 pixel=ScaleQuantumToChar((Quantum) (QuantumRange-
1003 GetOpacityPixelComponent(p)));
1004 q=PopCharPixel(pixel,q);
1006 q+=quantum_info->pad;
1012 register unsigned short
1015 if (quantum_info->format == FloatingPointQuantumFormat)
1017 for (x=0; x < (long) number_pixels; x++)
1019 pixel=SinglePrecisionToHalf(QuantumScale*
1020 PixelIntensityToQuantum(p));
1021 q=PopShortPixel(endian,pixel,q);
1022 pixel=SinglePrecisionToHalf(QuantumScale*
1023 GetAlphaPixelComponent(p));
1024 q=PopShortPixel(endian,pixel,q);
1026 q+=quantum_info->pad;
1030 for (x=0; x < (long) number_pixels; x++)
1032 pixel=ScaleQuantumToShort(PixelIntensityToQuantum(p));
1033 q=PopShortPixel(endian,pixel,q);
1034 pixel=ScaleQuantumToShort((Quantum) (QuantumRange-
1035 GetOpacityPixelComponent(p)));
1036 q=PopShortPixel(endian,pixel,q);
1038 q+=quantum_info->pad;
1044 register unsigned long
1047 if (quantum_info->format == FloatingPointQuantumFormat)
1049 for (x=0; x < (long) number_pixels; x++)
1054 pixel=(float) PixelIntensityToQuantum(p);
1055 q=PopFloatPixel(&quantum_state,pixel,q);
1056 pixel=(float) (GetAlphaPixelComponent(p));
1057 q=PopFloatPixel(&quantum_state,pixel,q);
1059 q+=quantum_info->pad;
1063 for (x=0; x < (long) number_pixels; x++)
1065 pixel=ScaleQuantumToLong(PixelIntensityToQuantum(p));
1066 q=PopLongPixel(endian,pixel,q);
1067 pixel=ScaleQuantumToLong((Quantum) (QuantumRange-
1068 GetOpacityPixelComponent(p)));
1069 q=PopLongPixel(endian,pixel,q);
1071 q+=quantum_info->pad;
1077 if (quantum_info->format == FloatingPointQuantumFormat)
1079 for (x=0; x < (long) number_pixels; x++)
1084 pixel=(double) PixelIntensityToQuantum(p);
1085 q=PopDoublePixel(&quantum_state,pixel,q);
1086 pixel=(double) (GetAlphaPixelComponent(p));
1087 q=PopDoublePixel(&quantum_state,pixel,q);
1089 q+=quantum_info->pad;
1096 range=GetQuantumRange(image->depth);
1097 for (x=0; x < (long) number_pixels; x++)
1099 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1100 PixelIntensityToQuantum(p),range),q);
1101 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1102 (Quantum) (GetAlphaPixelComponent(p)),range),q);
1104 q+=quantum_info->pad;
1114 switch (quantum_info->depth)
1118 register unsigned char
1121 for (x=0; x < (long) number_pixels; x++)
1123 pixel=ScaleQuantumToChar(GetRedPixelComponent(p));
1124 q=PopCharPixel(pixel,q);
1126 q+=quantum_info->pad;
1132 register unsigned short
1135 if (quantum_info->format == FloatingPointQuantumFormat)
1137 for (x=0; x < (long) number_pixels; x++)
1139 pixel=SinglePrecisionToHalf(QuantumScale*
1140 GetRedPixelComponent(p));
1141 q=PopShortPixel(endian,pixel,q);
1143 q+=quantum_info->pad;
1147 for (x=0; x < (long) number_pixels; x++)
1149 pixel=ScaleQuantumToShort(GetRedPixelComponent(p));
1150 q=PopShortPixel(endian,pixel,q);
1152 q+=quantum_info->pad;
1158 register unsigned long
1161 if (quantum_info->format == FloatingPointQuantumFormat)
1163 for (x=0; x < (long) number_pixels; x++)
1165 q=PopFloatPixel(&quantum_state,(float) p->red,q);
1167 q+=quantum_info->pad;
1171 for (x=0; x < (long) number_pixels; x++)
1173 pixel=ScaleQuantumToLong(GetRedPixelComponent(p));
1174 q=PopLongPixel(endian,pixel,q);
1176 q+=quantum_info->pad;
1182 if (quantum_info->format == FloatingPointQuantumFormat)
1184 for (x=0; x < (long) number_pixels; x++)
1186 q=PopDoublePixel(&quantum_state,(double) p->red,q);
1188 q+=quantum_info->pad;
1195 range=GetQuantumRange(image->depth);
1196 for (x=0; x < (long) number_pixels; x++)
1198 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1201 q+=quantum_info->pad;
1209 case MagentaQuantum:
1211 switch (quantum_info->depth)
1215 register unsigned char
1218 for (x=0; x < (long) number_pixels; x++)
1220 pixel=ScaleQuantumToChar(GetGreenPixelComponent(p));
1221 q=PopCharPixel(pixel,q);
1223 q+=quantum_info->pad;
1229 register unsigned short
1232 if (quantum_info->format == FloatingPointQuantumFormat)
1234 for (x=0; x < (long) number_pixels; x++)
1236 pixel=SinglePrecisionToHalf(QuantumScale*
1237 GetGreenPixelComponent(p));
1238 q=PopShortPixel(endian,pixel,q);
1240 q+=quantum_info->pad;
1244 for (x=0; x < (long) number_pixels; x++)
1246 pixel=ScaleQuantumToShort(GetGreenPixelComponent(p));
1247 q=PopShortPixel(endian,pixel,q);
1249 q+=quantum_info->pad;
1255 register unsigned long
1258 if (quantum_info->format == FloatingPointQuantumFormat)
1260 for (x=0; x < (long) number_pixels; x++)
1262 q=PopFloatPixel(&quantum_state,(float) p->green,q);
1264 q+=quantum_info->pad;
1268 for (x=0; x < (long) number_pixels; x++)
1270 pixel=ScaleQuantumToLong(GetGreenPixelComponent(p));
1271 q=PopLongPixel(endian,pixel,q);
1273 q+=quantum_info->pad;
1279 if (quantum_info->format == FloatingPointQuantumFormat)
1281 for (x=0; x < (long) number_pixels; x++)
1283 q=PopDoublePixel(&quantum_state,(double) p->green,q);
1285 q+=quantum_info->pad;
1292 range=GetQuantumRange(image->depth);
1293 for (x=0; x < (long) number_pixels; x++)
1295 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1298 q+=quantum_info->pad;
1308 switch (quantum_info->depth)
1312 register unsigned char
1315 for (x=0; x < (long) number_pixels; x++)
1317 pixel=ScaleQuantumToChar(GetBluePixelComponent(p));
1318 q=PopCharPixel(pixel,q);
1320 q+=quantum_info->pad;
1326 register unsigned short
1329 if (quantum_info->format == FloatingPointQuantumFormat)
1331 for (x=0; x < (long) number_pixels; x++)
1333 pixel=SinglePrecisionToHalf(QuantumScale*
1334 GetBluePixelComponent(p));
1335 q=PopShortPixel(endian,pixel,q);
1337 q+=quantum_info->pad;
1341 for (x=0; x < (long) number_pixels; x++)
1343 pixel=ScaleQuantumToShort(GetBluePixelComponent(p));
1344 q=PopShortPixel(endian,pixel,q);
1346 q+=quantum_info->pad;
1352 register unsigned long
1355 if (quantum_info->format == FloatingPointQuantumFormat)
1357 for (x=0; x < (long) number_pixels; x++)
1359 q=PopFloatPixel(&quantum_state,(float) p->blue,q);
1361 q+=quantum_info->pad;
1365 for (x=0; x < (long) number_pixels; x++)
1367 pixel=ScaleQuantumToLong(GetBluePixelComponent(p));
1368 q=PopLongPixel(endian,pixel,q);
1370 q+=quantum_info->pad;
1376 if (quantum_info->format == FloatingPointQuantumFormat)
1378 for (x=0; x < (long) number_pixels; x++)
1380 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
1382 q+=quantum_info->pad;
1389 range=GetQuantumRange(image->depth);
1390 for (x=0; x < (long) number_pixels; x++)
1392 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1395 q+=quantum_info->pad;
1404 switch (quantum_info->depth)
1408 register unsigned char
1411 for (x=0; x < (long) number_pixels; x++)
1413 pixel=ScaleQuantumToChar((Quantum) (QuantumRange-
1414 GetOpacityPixelComponent(p)));
1415 q=PopCharPixel(pixel,q);
1417 q+=quantum_info->pad;
1423 register unsigned short
1426 if (quantum_info->format == FloatingPointQuantumFormat)
1428 for (x=0; x < (long) number_pixels; x++)
1430 pixel=SinglePrecisionToHalf(QuantumScale*
1431 GetAlphaPixelComponent(p));
1432 q=PopShortPixel(endian,pixel,q);
1434 q+=quantum_info->pad;
1438 for (x=0; x < (long) number_pixels; x++)
1440 pixel=ScaleQuantumToShort((Quantum) (QuantumRange-
1441 GetOpacityPixelComponent(p)));
1442 q=PopShortPixel(endian,pixel,q);
1444 q+=quantum_info->pad;
1450 register unsigned long
1453 if (quantum_info->format == FloatingPointQuantumFormat)
1455 for (x=0; x < (long) number_pixels; x++)
1460 pixel=(float) (GetAlphaPixelComponent(p));
1461 q=PopFloatPixel(&quantum_state,pixel,q);
1463 q+=quantum_info->pad;
1467 for (x=0; x < (long) number_pixels; x++)
1469 pixel=ScaleQuantumToLong((Quantum) (QuantumRange-
1470 GetOpacityPixelComponent(p)));
1471 q=PopLongPixel(endian,pixel,q);
1473 q+=quantum_info->pad;
1479 if (quantum_info->format == FloatingPointQuantumFormat)
1481 for (x=0; x < (long) number_pixels; x++)
1486 pixel=(double) (GetAlphaPixelComponent(p));
1487 q=PopDoublePixel(&quantum_state,pixel,q);
1489 q+=quantum_info->pad;
1496 range=GetQuantumRange(image->depth);
1497 for (x=0; x < (long) number_pixels; x++)
1499 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1500 (Quantum) (GetAlphaPixelComponent(p)),range),q);
1502 q+=quantum_info->pad;
1509 case OpacityQuantum:
1511 switch (quantum_info->depth)
1515 register unsigned char
1518 for (x=0; x < (long) number_pixels; x++)
1520 pixel=ScaleQuantumToChar(GetOpacityPixelComponent(p));
1521 q=PopCharPixel(pixel,q);
1523 q+=quantum_info->pad;
1529 register unsigned short
1532 if (quantum_info->format == FloatingPointQuantumFormat)
1534 for (x=0; x < (long) number_pixels; x++)
1536 pixel=SinglePrecisionToHalf(QuantumScale*
1537 GetOpacityPixelComponent(p));
1538 q=PopShortPixel(endian,pixel,q);
1540 q+=quantum_info->pad;
1544 for (x=0; x < (long) number_pixels; x++)
1546 pixel=ScaleQuantumToShort(GetOpacityPixelComponent(p));
1547 q=PopShortPixel(endian,pixel,q);
1549 q+=quantum_info->pad;
1555 register unsigned long
1558 if (quantum_info->format == FloatingPointQuantumFormat)
1560 for (x=0; x < (long) number_pixels; x++)
1562 q=PopFloatPixel(&quantum_state,(float) p->opacity,q);
1564 q+=quantum_info->pad;
1568 for (x=0; x < (long) number_pixels; x++)
1570 pixel=ScaleQuantumToLong(GetOpacityPixelComponent(p));
1571 q=PopLongPixel(endian,pixel,q);
1573 q+=quantum_info->pad;
1579 if (quantum_info->format == FloatingPointQuantumFormat)
1581 for (x=0; x < (long) number_pixels; x++)
1583 q=PopDoublePixel(&quantum_state,(double) p->opacity,q);
1585 q+=quantum_info->pad;
1592 range=GetQuantumRange(image->depth);
1593 for (x=0; x < (long) number_pixels; x++)
1595 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1596 p->opacity,range),q);
1598 q+=quantum_info->pad;
1607 if (image->colorspace != CMYKColorspace)
1609 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1610 "ColorSeparatedImageRequired","`%s'",image->filename);
1613 switch (quantum_info->depth)
1617 register unsigned char
1620 for (x=0; x < (long) number_pixels; x++)
1622 pixel=ScaleQuantumToChar(indexes[x]);
1623 q=PopCharPixel(pixel,q);
1625 q+=quantum_info->pad;
1631 register unsigned short
1634 if (quantum_info->format == FloatingPointQuantumFormat)
1636 for (x=0; x < (long) number_pixels; x++)
1638 pixel=SinglePrecisionToHalf(QuantumScale*indexes[x]);
1639 q=PopShortPixel(endian,pixel,q);
1641 q+=quantum_info->pad;
1645 for (x=0; x < (long) number_pixels; x++)
1647 pixel=ScaleQuantumToShort(indexes[x]);
1648 q=PopShortPixel(endian,pixel,q);
1650 q+=quantum_info->pad;
1656 register unsigned long
1659 if (quantum_info->format == FloatingPointQuantumFormat)
1661 for (x=0; x < (long) number_pixels; x++)
1663 q=PopFloatPixel(&quantum_state,(float) indexes[x],q);
1665 q+=quantum_info->pad;
1669 for (x=0; x < (long) number_pixels; x++)
1671 pixel=ScaleQuantumToLong(indexes[x]);
1672 q=PopLongPixel(endian,pixel,q);
1674 q+=quantum_info->pad;
1680 if (quantum_info->format == FloatingPointQuantumFormat)
1682 for (x=0; x < (long) number_pixels; x++)
1684 q=PopDoublePixel(&quantum_state,(double) indexes[x],q);
1686 q+=quantum_info->pad;
1693 range=GetQuantumRange(image->depth);
1694 for (x=0; x < (long) number_pixels; x++)
1696 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1697 (Quantum) indexes[x],range),q);
1699 q+=quantum_info->pad;
1709 switch (quantum_info->depth)
1713 for (x=0; x < (long) number_pixels; x++)
1715 q=PopCharPixel(ScaleQuantumToChar(GetRedPixelComponent(p)),q);
1716 q=PopCharPixel(ScaleQuantumToChar(GetGreenPixelComponent(p)),q);
1717 q=PopCharPixel(ScaleQuantumToChar(GetBluePixelComponent(p)),q);
1719 q+=quantum_info->pad;
1725 register unsigned long
1728 range=GetQuantumRange(image->depth);
1729 if (quantum_info->pack == MagickFalse)
1731 for (x=0; x < (long) number_pixels; x++)
1733 pixel=(unsigned long) (ScaleQuantumToAny(p->red,range) << 22 |
1734 ScaleQuantumToAny(p->green,range) << 12 |
1735 ScaleQuantumToAny(p->blue,range) << 2);
1736 q=PopLongPixel(endian,pixel,q);
1738 q+=quantum_info->pad;
1742 if (quantum_info->quantum == 32UL)
1744 for (x=0; x < (long) number_pixels; x++)
1746 pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
1747 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
1748 pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
1749 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
1750 pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
1751 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
1753 q+=quantum_info->pad;
1757 for (x=0; x < (long) number_pixels; x++)
1759 pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
1760 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
1761 pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
1762 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
1763 pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
1764 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
1766 q+=quantum_info->pad;
1772 register unsigned long
1775 range=GetQuantumRange(image->depth);
1776 if (quantum_info->pack == MagickFalse)
1778 for (x=0; x < (long) (3*number_pixels-1); x+=2)
1785 pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
1790 pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
1795 pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
1800 q=PopShortPixel(endian,(unsigned short) (pixel << 4),q);
1806 pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
1811 pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
1816 pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
1821 q=PopShortPixel(endian,(unsigned short) (pixel << 4),q);
1822 q+=quantum_info->pad;
1824 for (bit=0; bit < (long) (3*number_pixels % 2); bit++)
1826 switch ((x+bit) % 3)
1831 pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
1836 pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
1841 pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
1846 q=PopShortPixel(endian,(unsigned short) (pixel << 4),q);
1847 q+=quantum_info->pad;
1853 if (quantum_info->quantum == 32UL)
1855 for (x=0; x < (long) number_pixels; x++)
1857 pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
1858 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
1859 pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
1860 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
1861 pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
1862 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
1864 q+=quantum_info->pad;
1868 for (x=0; x < (long) number_pixels; x++)
1870 pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
1871 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
1872 pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
1873 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
1874 pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
1875 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
1877 q+=quantum_info->pad;
1883 register unsigned short
1886 if (quantum_info->format == FloatingPointQuantumFormat)
1888 for (x=0; x < (long) number_pixels; x++)
1890 pixel=SinglePrecisionToHalf(QuantumScale*
1891 GetRedPixelComponent(p));
1892 q=PopShortPixel(endian,pixel,q);
1893 pixel=SinglePrecisionToHalf(QuantumScale*
1894 GetGreenPixelComponent(p));
1895 q=PopShortPixel(endian,pixel,q);
1896 pixel=SinglePrecisionToHalf(QuantumScale*
1897 GetBluePixelComponent(p));
1898 q=PopShortPixel(endian,pixel,q);
1900 q+=quantum_info->pad;
1904 for (x=0; x < (long) number_pixels; x++)
1906 pixel=ScaleQuantumToShort(GetRedPixelComponent(p));
1907 q=PopShortPixel(endian,pixel,q);
1908 pixel=ScaleQuantumToShort(GetGreenPixelComponent(p));
1909 q=PopShortPixel(endian,pixel,q);
1910 pixel=ScaleQuantumToShort(GetBluePixelComponent(p));
1911 q=PopShortPixel(endian,pixel,q);
1913 q+=quantum_info->pad;
1919 register unsigned long
1922 if (quantum_info->format == FloatingPointQuantumFormat)
1924 for (x=0; x < (long) number_pixels; x++)
1926 q=PopFloatPixel(&quantum_state,(float) p->red,q);
1927 q=PopFloatPixel(&quantum_state,(float) p->green,q);
1928 q=PopFloatPixel(&quantum_state,(float) p->blue,q);
1930 q+=quantum_info->pad;
1934 for (x=0; x < (long) number_pixels; x++)
1936 pixel=ScaleQuantumToLong(GetRedPixelComponent(p));
1937 q=PopLongPixel(endian,pixel,q);
1938 pixel=ScaleQuantumToLong(GetGreenPixelComponent(p));
1939 q=PopLongPixel(endian,pixel,q);
1940 pixel=ScaleQuantumToLong(GetBluePixelComponent(p));
1941 q=PopLongPixel(endian,pixel,q);
1943 q+=quantum_info->pad;
1949 if (quantum_info->format == FloatingPointQuantumFormat)
1951 for (x=0; x < (long) number_pixels; x++)
1953 q=PopDoublePixel(&quantum_state,(double) p->red,q);
1954 q=PopDoublePixel(&quantum_state,(double) p->green,q);
1955 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
1957 q+=quantum_info->pad;
1964 range=GetQuantumRange(image->depth);
1965 for (x=0; x < (long) number_pixels; x++)
1967 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1969 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1971 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1974 q+=quantum_info->pad;
1985 switch (quantum_info->depth)
1989 register unsigned char
1992 for (x=0; x < (long) number_pixels; x++)
1994 pixel=ScaleQuantumToChar(GetRedPixelComponent(p));
1995 q=PopCharPixel(pixel,q);
1996 pixel=ScaleQuantumToChar(GetGreenPixelComponent(p));
1997 q=PopCharPixel(pixel,q);
1998 pixel=ScaleQuantumToChar(GetBluePixelComponent(p));
1999 q=PopCharPixel(pixel,q);
2000 pixel=ScaleQuantumToChar((Quantum) (QuantumRange-
2001 GetOpacityPixelComponent(p)));
2002 q=PopCharPixel(pixel,q);
2004 q+=quantum_info->pad;
2010 register unsigned short
2013 if (quantum_info->format == FloatingPointQuantumFormat)
2015 for (x=0; x < (long) number_pixels; x++)
2017 pixel=SinglePrecisionToHalf(QuantumScale*
2018 GetRedPixelComponent(p));
2019 q=PopShortPixel(endian,pixel,q);
2020 pixel=SinglePrecisionToHalf(QuantumScale*
2021 GetGreenPixelComponent(p));
2022 q=PopShortPixel(endian,pixel,q);
2023 pixel=SinglePrecisionToHalf(QuantumScale*
2024 GetBluePixelComponent(p));
2025 q=PopShortPixel(endian,pixel,q);
2026 pixel=SinglePrecisionToHalf(QuantumScale*
2027 GetAlphaPixelComponent(p));
2028 q=PopShortPixel(endian,pixel,q);
2030 q+=quantum_info->pad;
2034 for (x=0; x < (long) number_pixels; x++)
2036 pixel=ScaleQuantumToShort(GetRedPixelComponent(p));
2037 q=PopShortPixel(endian,pixel,q);
2038 pixel=ScaleQuantumToShort(GetGreenPixelComponent(p));
2039 q=PopShortPixel(endian,pixel,q);
2040 pixel=ScaleQuantumToShort(GetBluePixelComponent(p));
2041 q=PopShortPixel(endian,pixel,q);
2042 pixel=ScaleQuantumToShort((Quantum) (QuantumRange-
2043 GetOpacityPixelComponent(p)));
2044 q=PopShortPixel(endian,pixel,q);
2046 q+=quantum_info->pad;
2052 register unsigned long
2055 if (quantum_info->format == FloatingPointQuantumFormat)
2057 for (x=0; x < (long) number_pixels; x++)
2062 q=PopFloatPixel(&quantum_state,(float) p->red,q);
2063 q=PopFloatPixel(&quantum_state,(float) p->green,q);
2064 q=PopFloatPixel(&quantum_state,(float) p->blue,q);
2065 pixel=(float) (GetAlphaPixelComponent(p));
2066 q=PopFloatPixel(&quantum_state,pixel,q);
2068 q+=quantum_info->pad;
2072 for (x=0; x < (long) number_pixels; x++)
2074 pixel=ScaleQuantumToLong(GetRedPixelComponent(p));
2075 q=PopLongPixel(endian,pixel,q);
2076 pixel=ScaleQuantumToLong(GetGreenPixelComponent(p));
2077 q=PopLongPixel(endian,pixel,q);
2078 pixel=ScaleQuantumToLong(GetBluePixelComponent(p));
2079 q=PopLongPixel(endian,pixel,q);
2080 pixel=ScaleQuantumToLong((Quantum) (QuantumRange-
2081 GetOpacityPixelComponent(p)));
2082 q=PopLongPixel(endian,pixel,q);
2084 q+=quantum_info->pad;
2090 if (quantum_info->format == FloatingPointQuantumFormat)
2095 for (x=0; x < (long) number_pixels; x++)
2097 q=PopDoublePixel(&quantum_state,(double) p->red,q);
2098 q=PopDoublePixel(&quantum_state,(double) p->green,q);
2099 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
2100 pixel=(double) (GetAlphaPixelComponent(p));
2101 q=PopDoublePixel(&quantum_state,pixel,q);
2103 q+=quantum_info->pad;
2110 range=GetQuantumRange(image->depth);
2111 for (x=0; x < (long) number_pixels; x++)
2113 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2115 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2117 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2119 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2120 (Quantum) (GetAlphaPixelComponent(p)),range),q);
2122 q+=quantum_info->pad;
2131 if (image->colorspace != CMYKColorspace)
2133 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2134 "ColorSeparatedImageRequired","`%s'",image->filename);
2137 switch (quantum_info->depth)
2141 register unsigned char
2144 for (x=0; x < (long) number_pixels; x++)
2146 pixel=ScaleQuantumToChar(GetRedPixelComponent(p));
2147 q=PopCharPixel(pixel,q);
2148 pixel=ScaleQuantumToChar(GetGreenPixelComponent(p));
2149 q=PopCharPixel(pixel,q);
2150 pixel=ScaleQuantumToChar(GetBluePixelComponent(p));
2151 q=PopCharPixel(pixel,q);
2152 pixel=ScaleQuantumToChar(indexes[x]);
2153 q=PopCharPixel(pixel,q);
2155 q+=quantum_info->pad;
2161 register unsigned short
2164 if (quantum_info->format == FloatingPointQuantumFormat)
2166 for (x=0; x < (long) number_pixels; x++)
2168 pixel=SinglePrecisionToHalf(QuantumScale*
2169 GetRedPixelComponent(p));
2170 q=PopShortPixel(endian,pixel,q);
2171 pixel=SinglePrecisionToHalf(QuantumScale*
2172 GetGreenPixelComponent(p));
2173 q=PopShortPixel(endian,pixel,q);
2174 pixel=SinglePrecisionToHalf(QuantumScale*
2175 GetBluePixelComponent(p));
2176 q=PopShortPixel(endian,pixel,q);
2177 pixel=SinglePrecisionToHalf(QuantumScale*indexes[x]);
2178 q=PopShortPixel(endian,pixel,q);
2180 q+=quantum_info->pad;
2184 for (x=0; x < (long) number_pixels; x++)
2186 pixel=ScaleQuantumToShort(GetRedPixelComponent(p));
2187 q=PopShortPixel(endian,pixel,q);
2188 pixel=ScaleQuantumToShort(GetGreenPixelComponent(p));
2189 q=PopShortPixel(endian,pixel,q);
2190 pixel=ScaleQuantumToShort(GetBluePixelComponent(p));
2191 q=PopShortPixel(endian,pixel,q);
2192 pixel=ScaleQuantumToShort(indexes[x]);
2193 q=PopShortPixel(endian,pixel,q);
2195 q+=quantum_info->pad;
2201 register unsigned long
2204 if (quantum_info->format == FloatingPointQuantumFormat)
2206 for (x=0; x < (long) number_pixels; x++)
2208 q=PopFloatPixel(&quantum_state,(float) p->red,q);
2209 q=PopFloatPixel(&quantum_state,(float) p->green,q);
2210 q=PopFloatPixel(&quantum_state,(float) p->blue,q);
2211 q=PopFloatPixel(&quantum_state,(float) indexes[x],q);
2213 q+=quantum_info->pad;
2217 for (x=0; x < (long) number_pixels; x++)
2219 pixel=ScaleQuantumToLong(GetRedPixelComponent(p));
2220 q=PopLongPixel(endian,pixel,q);
2221 pixel=ScaleQuantumToLong(GetGreenPixelComponent(p));
2222 q=PopLongPixel(endian,pixel,q);
2223 pixel=ScaleQuantumToLong(GetBluePixelComponent(p));
2224 q=PopLongPixel(endian,pixel,q);
2225 pixel=ScaleQuantumToLong(indexes[x]);
2226 q=PopLongPixel(endian,pixel,q);
2228 q+=quantum_info->pad;
2234 if (quantum_info->format == FloatingPointQuantumFormat)
2236 for (x=0; x < (long) number_pixels; x++)
2238 q=PopDoublePixel(&quantum_state,(double) p->red,q);
2239 q=PopDoublePixel(&quantum_state,(double) p->green,q);
2240 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
2241 q=PopDoublePixel(&quantum_state,(double) indexes[x],q);
2243 q+=quantum_info->pad;
2250 range=GetQuantumRange(image->depth);
2251 for (x=0; x < (long) number_pixels; x++)
2253 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2255 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2257 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2259 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2260 indexes[x],range),q);
2262 q+=quantum_info->pad;
2272 if (image->colorspace != CMYKColorspace)
2274 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2275 "ColorSeparatedImageRequired","`%s'",image->filename);
2278 switch (quantum_info->depth)
2282 register unsigned char
2285 for (x=0; x < (long) number_pixels; x++)
2287 pixel=ScaleQuantumToChar(GetRedPixelComponent(p));
2288 q=PopCharPixel(pixel,q);
2289 pixel=ScaleQuantumToChar(GetGreenPixelComponent(p));
2290 q=PopCharPixel(pixel,q);
2291 pixel=ScaleQuantumToChar(GetBluePixelComponent(p));
2292 q=PopCharPixel(pixel,q);
2293 pixel=ScaleQuantumToChar(indexes[x]);
2294 q=PopCharPixel(pixel,q);
2295 pixel=ScaleQuantumToChar((Quantum) (QuantumRange-
2296 GetOpacityPixelComponent(p)));
2297 q=PopCharPixel(pixel,q);
2299 q+=quantum_info->pad;
2305 register unsigned short
2308 if (quantum_info->format == FloatingPointQuantumFormat)
2310 for (x=0; x < (long) number_pixels; x++)
2312 pixel=SinglePrecisionToHalf(QuantumScale*
2313 GetRedPixelComponent(p));
2314 q=PopShortPixel(endian,pixel,q);
2315 pixel=SinglePrecisionToHalf(QuantumScale*
2316 GetGreenPixelComponent(p));
2317 q=PopShortPixel(endian,pixel,q);
2318 pixel=SinglePrecisionToHalf(QuantumScale*
2319 GetBluePixelComponent(p));
2320 q=PopShortPixel(endian,pixel,q);
2321 pixel=SinglePrecisionToHalf(QuantumScale*indexes[x]);
2322 q=PopShortPixel(endian,pixel,q);
2323 pixel=SinglePrecisionToHalf(QuantumScale*
2324 GetAlphaPixelComponent(p));
2325 q=PopShortPixel(endian,pixel,q);
2327 q+=quantum_info->pad;
2331 for (x=0; x < (long) number_pixels; x++)
2333 pixel=ScaleQuantumToShort(GetRedPixelComponent(p));
2334 q=PopShortPixel(endian,pixel,q);
2335 pixel=ScaleQuantumToShort(GetGreenPixelComponent(p));
2336 q=PopShortPixel(endian,pixel,q);
2337 pixel=ScaleQuantumToShort(GetBluePixelComponent(p));
2338 q=PopShortPixel(endian,pixel,q);
2339 pixel=ScaleQuantumToShort(indexes[x]);
2340 q=PopShortPixel(endian,pixel,q);
2341 pixel=ScaleQuantumToShort((Quantum) (QuantumRange-
2342 GetOpacityPixelComponent(p)));
2343 q=PopShortPixel(endian,pixel,q);
2345 q+=quantum_info->pad;
2351 register unsigned long
2354 if (quantum_info->format == FloatingPointQuantumFormat)
2356 for (x=0; x < (long) number_pixels; x++)
2361 q=PopFloatPixel(&quantum_state,(float) p->red,q);
2362 q=PopFloatPixel(&quantum_state,(float) p->green,q);
2363 q=PopFloatPixel(&quantum_state,(float) p->blue,q);
2364 q=PopFloatPixel(&quantum_state,(float) indexes[x],q);
2365 pixel=(float) (GetAlphaPixelComponent(p));
2366 q=PopFloatPixel(&quantum_state,pixel,q);
2368 q+=quantum_info->pad;
2372 for (x=0; x < (long) number_pixels; x++)
2374 pixel=ScaleQuantumToLong(GetRedPixelComponent(p));
2375 q=PopLongPixel(endian,pixel,q);
2376 pixel=ScaleQuantumToLong(GetGreenPixelComponent(p));
2377 q=PopLongPixel(endian,pixel,q);
2378 pixel=ScaleQuantumToLong(GetBluePixelComponent(p));
2379 q=PopLongPixel(endian,pixel,q);
2380 pixel=ScaleQuantumToLong(indexes[x]);
2381 q=PopLongPixel(endian,pixel,q);
2382 pixel=ScaleQuantumToLong((Quantum) (QuantumRange-
2383 GetOpacityPixelComponent(p)));
2384 q=PopLongPixel(endian,pixel,q);
2386 q+=quantum_info->pad;
2392 if (quantum_info->format == FloatingPointQuantumFormat)
2397 for (x=0; x < (long) number_pixels; x++)
2399 q=PopDoublePixel(&quantum_state,(double) p->red,q);
2400 q=PopDoublePixel(&quantum_state,(double) p->green,q);
2401 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
2402 q=PopDoublePixel(&quantum_state,(double) indexes[x],q);
2403 pixel=(double) (GetAlphaPixelComponent(p));
2404 q=PopDoublePixel(&quantum_state,pixel,q);
2406 q+=quantum_info->pad;
2413 range=GetQuantumRange(image->depth);
2414 for (x=0; x < (long) number_pixels; x++)
2416 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2418 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2420 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2422 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2423 indexes[x],range),q);
2424 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2425 p->opacity,range),q);
2427 q+=quantum_info->pad;
2445 register unsigned long
2453 range=GetQuantumRange(image->depth);
2454 switch (quantum_info->depth)
2458 if (quantum_info->pack == MagickFalse)
2460 for (x=0; x < (long) number_pixels; x+=2)
2462 for (i=0; i < 4; i++)
2468 quantum=GetRedPixelComponent(p);
2473 quantum=GetGreenPixelComponent(p);
2478 quantum=GetBluePixelComponent(p);
2482 cbcr[i]=(Quantum) quantum;
2485 pixel=(unsigned long) ((unsigned long) (cbcr[1]) << 22 |
2486 (unsigned long) (cbcr[0]) << 12 |
2487 (unsigned long) (cbcr[2]) << 2);
2488 q=PopLongPixel(endian,pixel,q);
2490 pixel=(unsigned long) ((unsigned long) (cbcr[3]) << 22 |
2491 (unsigned long) (cbcr[0]) << 12 |
2492 (unsigned long) (cbcr[2]) << 2);
2493 q=PopLongPixel(endian,pixel,q);
2495 q+=quantum_info->pad;
2503 for (x=0; x < (long) number_pixels; x+=2)
2505 for (i=0; i < 4; i++)
2511 quantum=GetRedPixelComponent(p);
2516 quantum=GetGreenPixelComponent(p);
2521 quantum=GetBluePixelComponent(p);
2525 cbcr[i]=(Quantum) quantum;
2528 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2530 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2532 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2535 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2537 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2539 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2542 q+=quantum_info->pad;
2552 if ((quantum_type == CbYCrQuantum) || (quantum_type == CbYCrAQuantum))
2557 register PixelPacket
2560 q=GetAuthenticPixelQueue(image);
2561 if (image_view != (CacheView *) NULL)
2562 q=(PixelPacket *) GetCacheViewVirtualPixelQueue(image_view);
2563 for (x=0; x < (long) number_pixels; x++)
2571 if ((quantum_type == RGBOQuantum) || (quantum_type == CMYKOQuantum))
2573 register PixelPacket
2576 q=GetAuthenticPixelQueue(image);
2577 if (image_view != (CacheView *) NULL)
2578 q=(PixelPacket *) GetCacheViewVirtualPixelQueue(image_view);
2579 for (x=0; x < (long) number_pixels; x++)
2581 q->opacity=(Quantum) GetAlphaPixelComponent(q);