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-2); 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;
788 if (x++ < (long) (number_pixels-1))
789 pixel|=ScaleQuantumToAny(PixelIntensityToQuantum(p+1),
791 if (x++ < (long) number_pixels)
792 pixel|=ScaleQuantumToAny(PixelIntensityToQuantum(p+0),
794 q=PopLongPixel(endian,pixel,q);
797 for (x=0; x < (long) number_pixels; x++)
799 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
800 PixelIntensityToQuantum(p),range),q);
802 q+=quantum_info->pad;
808 register unsigned short
811 range=GetQuantumRange(image->depth);
812 if (quantum_info->pack == MagickFalse)
814 for (x=0; x < (long) number_pixels; x++)
816 pixel=ScaleQuantumToShort(PixelIntensityToQuantum(p));
817 q=PopShortPixel(endian,(unsigned short) (pixel >> 4),q);
819 q+=quantum_info->pad;
823 for (x=0; x < (long) number_pixels; x++)
825 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
826 PixelIntensityToQuantum(p),range),q);
828 q+=quantum_info->pad;
834 register unsigned short
837 if (quantum_info->format == FloatingPointQuantumFormat)
839 for (x=0; x < (long) number_pixels; x++)
841 pixel=SinglePrecisionToHalf(QuantumScale*
842 PixelIntensityToQuantum(p));
843 q=PopShortPixel(endian,pixel,q);
845 q+=quantum_info->pad;
849 for (x=0; x < (long) number_pixels; x++)
851 pixel=ScaleQuantumToShort(PixelIntensityToQuantum(p));
852 q=PopShortPixel(endian,pixel,q);
854 q+=quantum_info->pad;
860 register unsigned long
863 if (quantum_info->format == FloatingPointQuantumFormat)
865 for (x=0; x < (long) number_pixels; x++)
870 pixel=(float) PixelIntensityToQuantum(p);
871 q=PopFloatPixel(&quantum_state,pixel,q);
873 q+=quantum_info->pad;
877 for (x=0; x < (long) number_pixels; x++)
879 pixel=ScaleQuantumToLong(PixelIntensityToQuantum(p));
880 q=PopLongPixel(endian,pixel,q);
882 q+=quantum_info->pad;
888 if (quantum_info->format == FloatingPointQuantumFormat)
890 for (x=0; x < (long) number_pixels; x++)
895 pixel=(double) PixelIntensityToQuantum(p);
896 q=PopDoublePixel(&quantum_state,pixel,q);
898 q+=quantum_info->pad;
905 range=GetQuantumRange(image->depth);
906 for (x=0; x < (long) number_pixels; x++)
908 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
909 PixelIntensityToQuantum(p),range),q);
911 q+=quantum_info->pad;
918 case GrayAlphaQuantum:
920 switch (quantum_info->depth)
927 register unsigned char
934 if (quantum_info->min_is_white == MagickFalse)
939 threshold=(Quantum) (QuantumRange/2);
940 for (x=((long) number_pixels-3); x > 0; x-=4)
943 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 7;
944 pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 : 0x01);
945 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 6);
947 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 5;
948 pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 : 0x01);
949 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 4);
951 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 3;
952 pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 : 0x01);
953 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 2);
955 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 1;
956 pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 : 0x01);
957 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 0);
961 if ((number_pixels % 4) != 0)
964 for (bit=3; bit >= (long) (4-(number_pixels % 4)); bit-=2)
966 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) <<
968 pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 :
970 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << (unsigned char)
980 register unsigned char
983 for (x=0; x < (long) number_pixels ; x++)
985 pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
986 *q=(((pixel >> 4) & 0xf) << 4);
987 pixel=(unsigned char) (16*QuantumScale*((Quantum) (QuantumRange-
988 GetOpacityPixelComponent(p)))+0.5);
997 register unsigned char
1000 for (x=0; x < (long) number_pixels; x++)
1002 pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
1003 q=PopCharPixel(pixel,q);
1004 pixel=ScaleQuantumToChar((Quantum) (QuantumRange-
1005 GetOpacityPixelComponent(p)));
1006 q=PopCharPixel(pixel,q);
1008 q+=quantum_info->pad;
1014 register unsigned short
1017 if (quantum_info->format == FloatingPointQuantumFormat)
1019 for (x=0; x < (long) number_pixels; x++)
1021 pixel=SinglePrecisionToHalf(QuantumScale*
1022 PixelIntensityToQuantum(p));
1023 q=PopShortPixel(endian,pixel,q);
1024 pixel=SinglePrecisionToHalf(QuantumScale*
1025 GetAlphaPixelComponent(p));
1026 q=PopShortPixel(endian,pixel,q);
1028 q+=quantum_info->pad;
1032 for (x=0; x < (long) number_pixels; x++)
1034 pixel=ScaleQuantumToShort(PixelIntensityToQuantum(p));
1035 q=PopShortPixel(endian,pixel,q);
1036 pixel=ScaleQuantumToShort((Quantum) (QuantumRange-
1037 GetOpacityPixelComponent(p)));
1038 q=PopShortPixel(endian,pixel,q);
1040 q+=quantum_info->pad;
1046 register unsigned long
1049 if (quantum_info->format == FloatingPointQuantumFormat)
1051 for (x=0; x < (long) number_pixels; x++)
1056 pixel=(float) PixelIntensityToQuantum(p);
1057 q=PopFloatPixel(&quantum_state,pixel,q);
1058 pixel=(float) (GetAlphaPixelComponent(p));
1059 q=PopFloatPixel(&quantum_state,pixel,q);
1061 q+=quantum_info->pad;
1065 for (x=0; x < (long) number_pixels; x++)
1067 pixel=ScaleQuantumToLong(PixelIntensityToQuantum(p));
1068 q=PopLongPixel(endian,pixel,q);
1069 pixel=ScaleQuantumToLong((Quantum) (QuantumRange-
1070 GetOpacityPixelComponent(p)));
1071 q=PopLongPixel(endian,pixel,q);
1073 q+=quantum_info->pad;
1079 if (quantum_info->format == FloatingPointQuantumFormat)
1081 for (x=0; x < (long) number_pixels; x++)
1086 pixel=(double) PixelIntensityToQuantum(p);
1087 q=PopDoublePixel(&quantum_state,pixel,q);
1088 pixel=(double) (GetAlphaPixelComponent(p));
1089 q=PopDoublePixel(&quantum_state,pixel,q);
1091 q+=quantum_info->pad;
1098 range=GetQuantumRange(image->depth);
1099 for (x=0; x < (long) number_pixels; x++)
1101 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1102 PixelIntensityToQuantum(p),range),q);
1103 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1104 (Quantum) (GetAlphaPixelComponent(p)),range),q);
1106 q+=quantum_info->pad;
1116 switch (quantum_info->depth)
1120 register unsigned char
1123 for (x=0; x < (long) number_pixels; x++)
1125 pixel=ScaleQuantumToChar(GetRedPixelComponent(p));
1126 q=PopCharPixel(pixel,q);
1128 q+=quantum_info->pad;
1134 register unsigned short
1137 if (quantum_info->format == FloatingPointQuantumFormat)
1139 for (x=0; x < (long) number_pixels; x++)
1141 pixel=SinglePrecisionToHalf(QuantumScale*
1142 GetRedPixelComponent(p));
1143 q=PopShortPixel(endian,pixel,q);
1145 q+=quantum_info->pad;
1149 for (x=0; x < (long) number_pixels; x++)
1151 pixel=ScaleQuantumToShort(GetRedPixelComponent(p));
1152 q=PopShortPixel(endian,pixel,q);
1154 q+=quantum_info->pad;
1160 register unsigned long
1163 if (quantum_info->format == FloatingPointQuantumFormat)
1165 for (x=0; x < (long) number_pixels; x++)
1167 q=PopFloatPixel(&quantum_state,(float) p->red,q);
1169 q+=quantum_info->pad;
1173 for (x=0; x < (long) number_pixels; x++)
1175 pixel=ScaleQuantumToLong(GetRedPixelComponent(p));
1176 q=PopLongPixel(endian,pixel,q);
1178 q+=quantum_info->pad;
1184 if (quantum_info->format == FloatingPointQuantumFormat)
1186 for (x=0; x < (long) number_pixels; x++)
1188 q=PopDoublePixel(&quantum_state,(double) p->red,q);
1190 q+=quantum_info->pad;
1197 range=GetQuantumRange(image->depth);
1198 for (x=0; x < (long) number_pixels; x++)
1200 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1203 q+=quantum_info->pad;
1211 case MagentaQuantum:
1213 switch (quantum_info->depth)
1217 register unsigned char
1220 for (x=0; x < (long) number_pixels; x++)
1222 pixel=ScaleQuantumToChar(GetGreenPixelComponent(p));
1223 q=PopCharPixel(pixel,q);
1225 q+=quantum_info->pad;
1231 register unsigned short
1234 if (quantum_info->format == FloatingPointQuantumFormat)
1236 for (x=0; x < (long) number_pixels; x++)
1238 pixel=SinglePrecisionToHalf(QuantumScale*
1239 GetGreenPixelComponent(p));
1240 q=PopShortPixel(endian,pixel,q);
1242 q+=quantum_info->pad;
1246 for (x=0; x < (long) number_pixels; x++)
1248 pixel=ScaleQuantumToShort(GetGreenPixelComponent(p));
1249 q=PopShortPixel(endian,pixel,q);
1251 q+=quantum_info->pad;
1257 register unsigned long
1260 if (quantum_info->format == FloatingPointQuantumFormat)
1262 for (x=0; x < (long) number_pixels; x++)
1264 q=PopFloatPixel(&quantum_state,(float) p->green,q);
1266 q+=quantum_info->pad;
1270 for (x=0; x < (long) number_pixels; x++)
1272 pixel=ScaleQuantumToLong(GetGreenPixelComponent(p));
1273 q=PopLongPixel(endian,pixel,q);
1275 q+=quantum_info->pad;
1281 if (quantum_info->format == FloatingPointQuantumFormat)
1283 for (x=0; x < (long) number_pixels; x++)
1285 q=PopDoublePixel(&quantum_state,(double) p->green,q);
1287 q+=quantum_info->pad;
1294 range=GetQuantumRange(image->depth);
1295 for (x=0; x < (long) number_pixels; x++)
1297 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1300 q+=quantum_info->pad;
1310 switch (quantum_info->depth)
1314 register unsigned char
1317 for (x=0; x < (long) number_pixels; x++)
1319 pixel=ScaleQuantumToChar(GetBluePixelComponent(p));
1320 q=PopCharPixel(pixel,q);
1322 q+=quantum_info->pad;
1328 register unsigned short
1331 if (quantum_info->format == FloatingPointQuantumFormat)
1333 for (x=0; x < (long) number_pixels; x++)
1335 pixel=SinglePrecisionToHalf(QuantumScale*
1336 GetBluePixelComponent(p));
1337 q=PopShortPixel(endian,pixel,q);
1339 q+=quantum_info->pad;
1343 for (x=0; x < (long) number_pixels; x++)
1345 pixel=ScaleQuantumToShort(GetBluePixelComponent(p));
1346 q=PopShortPixel(endian,pixel,q);
1348 q+=quantum_info->pad;
1354 register unsigned long
1357 if (quantum_info->format == FloatingPointQuantumFormat)
1359 for (x=0; x < (long) number_pixels; x++)
1361 q=PopFloatPixel(&quantum_state,(float) p->blue,q);
1363 q+=quantum_info->pad;
1367 for (x=0; x < (long) number_pixels; x++)
1369 pixel=ScaleQuantumToLong(GetBluePixelComponent(p));
1370 q=PopLongPixel(endian,pixel,q);
1372 q+=quantum_info->pad;
1378 if (quantum_info->format == FloatingPointQuantumFormat)
1380 for (x=0; x < (long) number_pixels; x++)
1382 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
1384 q+=quantum_info->pad;
1391 range=GetQuantumRange(image->depth);
1392 for (x=0; x < (long) number_pixels; x++)
1394 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1397 q+=quantum_info->pad;
1406 switch (quantum_info->depth)
1410 register unsigned char
1413 for (x=0; x < (long) number_pixels; x++)
1415 pixel=ScaleQuantumToChar((Quantum) (QuantumRange-
1416 GetOpacityPixelComponent(p)));
1417 q=PopCharPixel(pixel,q);
1419 q+=quantum_info->pad;
1425 register unsigned short
1428 if (quantum_info->format == FloatingPointQuantumFormat)
1430 for (x=0; x < (long) number_pixels; x++)
1432 pixel=SinglePrecisionToHalf(QuantumScale*
1433 GetAlphaPixelComponent(p));
1434 q=PopShortPixel(endian,pixel,q);
1436 q+=quantum_info->pad;
1440 for (x=0; x < (long) number_pixels; x++)
1442 pixel=ScaleQuantumToShort((Quantum) (QuantumRange-
1443 GetOpacityPixelComponent(p)));
1444 q=PopShortPixel(endian,pixel,q);
1446 q+=quantum_info->pad;
1452 register unsigned long
1455 if (quantum_info->format == FloatingPointQuantumFormat)
1457 for (x=0; x < (long) number_pixels; x++)
1462 pixel=(float) (GetAlphaPixelComponent(p));
1463 q=PopFloatPixel(&quantum_state,pixel,q);
1465 q+=quantum_info->pad;
1469 for (x=0; x < (long) number_pixels; x++)
1471 pixel=ScaleQuantumToLong((Quantum) (QuantumRange-
1472 GetOpacityPixelComponent(p)));
1473 q=PopLongPixel(endian,pixel,q);
1475 q+=quantum_info->pad;
1481 if (quantum_info->format == FloatingPointQuantumFormat)
1483 for (x=0; x < (long) number_pixels; x++)
1488 pixel=(double) (GetAlphaPixelComponent(p));
1489 q=PopDoublePixel(&quantum_state,pixel,q);
1491 q+=quantum_info->pad;
1498 range=GetQuantumRange(image->depth);
1499 for (x=0; x < (long) number_pixels; x++)
1501 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1502 (Quantum) (GetAlphaPixelComponent(p)),range),q);
1504 q+=quantum_info->pad;
1511 case OpacityQuantum:
1513 switch (quantum_info->depth)
1517 register unsigned char
1520 for (x=0; x < (long) number_pixels; x++)
1522 pixel=ScaleQuantumToChar(GetOpacityPixelComponent(p));
1523 q=PopCharPixel(pixel,q);
1525 q+=quantum_info->pad;
1531 register unsigned short
1534 if (quantum_info->format == FloatingPointQuantumFormat)
1536 for (x=0; x < (long) number_pixels; x++)
1538 pixel=SinglePrecisionToHalf(QuantumScale*
1539 GetOpacityPixelComponent(p));
1540 q=PopShortPixel(endian,pixel,q);
1542 q+=quantum_info->pad;
1546 for (x=0; x < (long) number_pixels; x++)
1548 pixel=ScaleQuantumToShort(GetOpacityPixelComponent(p));
1549 q=PopShortPixel(endian,pixel,q);
1551 q+=quantum_info->pad;
1557 register unsigned long
1560 if (quantum_info->format == FloatingPointQuantumFormat)
1562 for (x=0; x < (long) number_pixels; x++)
1564 q=PopFloatPixel(&quantum_state,(float) p->opacity,q);
1566 q+=quantum_info->pad;
1570 for (x=0; x < (long) number_pixels; x++)
1572 pixel=ScaleQuantumToLong(GetOpacityPixelComponent(p));
1573 q=PopLongPixel(endian,pixel,q);
1575 q+=quantum_info->pad;
1581 if (quantum_info->format == FloatingPointQuantumFormat)
1583 for (x=0; x < (long) number_pixels; x++)
1585 q=PopDoublePixel(&quantum_state,(double) p->opacity,q);
1587 q+=quantum_info->pad;
1594 range=GetQuantumRange(image->depth);
1595 for (x=0; x < (long) number_pixels; x++)
1597 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1598 p->opacity,range),q);
1600 q+=quantum_info->pad;
1609 if (image->colorspace != CMYKColorspace)
1611 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1612 "ColorSeparatedImageRequired","`%s'",image->filename);
1615 switch (quantum_info->depth)
1619 register unsigned char
1622 for (x=0; x < (long) number_pixels; x++)
1624 pixel=ScaleQuantumToChar(indexes[x]);
1625 q=PopCharPixel(pixel,q);
1627 q+=quantum_info->pad;
1633 register unsigned short
1636 if (quantum_info->format == FloatingPointQuantumFormat)
1638 for (x=0; x < (long) number_pixels; x++)
1640 pixel=SinglePrecisionToHalf(QuantumScale*indexes[x]);
1641 q=PopShortPixel(endian,pixel,q);
1643 q+=quantum_info->pad;
1647 for (x=0; x < (long) number_pixels; x++)
1649 pixel=ScaleQuantumToShort(indexes[x]);
1650 q=PopShortPixel(endian,pixel,q);
1652 q+=quantum_info->pad;
1658 register unsigned long
1661 if (quantum_info->format == FloatingPointQuantumFormat)
1663 for (x=0; x < (long) number_pixels; x++)
1665 q=PopFloatPixel(&quantum_state,(float) indexes[x],q);
1667 q+=quantum_info->pad;
1671 for (x=0; x < (long) number_pixels; x++)
1673 pixel=ScaleQuantumToLong(indexes[x]);
1674 q=PopLongPixel(endian,pixel,q);
1676 q+=quantum_info->pad;
1682 if (quantum_info->format == FloatingPointQuantumFormat)
1684 for (x=0; x < (long) number_pixels; x++)
1686 q=PopDoublePixel(&quantum_state,(double) indexes[x],q);
1688 q+=quantum_info->pad;
1695 range=GetQuantumRange(image->depth);
1696 for (x=0; x < (long) number_pixels; x++)
1698 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1699 (Quantum) indexes[x],range),q);
1701 q+=quantum_info->pad;
1711 switch (quantum_info->depth)
1715 for (x=0; x < (long) number_pixels; x++)
1717 q=PopCharPixel(ScaleQuantumToChar(GetRedPixelComponent(p)),q);
1718 q=PopCharPixel(ScaleQuantumToChar(GetGreenPixelComponent(p)),q);
1719 q=PopCharPixel(ScaleQuantumToChar(GetBluePixelComponent(p)),q);
1721 q+=quantum_info->pad;
1727 register unsigned long
1730 range=GetQuantumRange(image->depth);
1731 if (quantum_info->pack == MagickFalse)
1733 for (x=0; x < (long) number_pixels; x++)
1735 pixel=(unsigned long) (ScaleQuantumToAny(p->red,range) << 22 |
1736 ScaleQuantumToAny(p->green,range) << 12 |
1737 ScaleQuantumToAny(p->blue,range) << 2);
1738 q=PopLongPixel(endian,pixel,q);
1740 q+=quantum_info->pad;
1744 if (quantum_info->quantum == 32UL)
1746 for (x=0; x < (long) number_pixels; x++)
1748 pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
1749 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
1750 pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
1751 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
1752 pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
1753 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
1755 q+=quantum_info->pad;
1759 for (x=0; x < (long) number_pixels; x++)
1761 pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
1762 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
1763 pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
1764 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
1765 pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
1766 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
1768 q+=quantum_info->pad;
1774 register unsigned long
1777 range=GetQuantumRange(image->depth);
1778 if (quantum_info->pack == MagickFalse)
1780 for (x=0; x < (long) (3*number_pixels-1); x+=2)
1787 pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
1792 pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
1797 pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
1802 q=PopShortPixel(endian,(unsigned short) (pixel << 4),q);
1808 pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
1813 pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
1818 pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
1823 q=PopShortPixel(endian,(unsigned short) (pixel << 4),q);
1824 q+=quantum_info->pad;
1826 for (bit=0; bit < (long) (3*number_pixels % 2); bit++)
1828 switch ((x+bit) % 3)
1833 pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
1838 pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
1843 pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
1848 q=PopShortPixel(endian,(unsigned short) (pixel << 4),q);
1849 q+=quantum_info->pad;
1855 if (quantum_info->quantum == 32UL)
1857 for (x=0; x < (long) number_pixels; x++)
1859 pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
1860 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
1861 pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
1862 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
1863 pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
1864 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
1866 q+=quantum_info->pad;
1870 for (x=0; x < (long) number_pixels; x++)
1872 pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
1873 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
1874 pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
1875 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
1876 pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
1877 q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
1879 q+=quantum_info->pad;
1885 register unsigned short
1888 if (quantum_info->format == FloatingPointQuantumFormat)
1890 for (x=0; x < (long) number_pixels; x++)
1892 pixel=SinglePrecisionToHalf(QuantumScale*
1893 GetRedPixelComponent(p));
1894 q=PopShortPixel(endian,pixel,q);
1895 pixel=SinglePrecisionToHalf(QuantumScale*
1896 GetGreenPixelComponent(p));
1897 q=PopShortPixel(endian,pixel,q);
1898 pixel=SinglePrecisionToHalf(QuantumScale*
1899 GetBluePixelComponent(p));
1900 q=PopShortPixel(endian,pixel,q);
1902 q+=quantum_info->pad;
1906 for (x=0; x < (long) number_pixels; x++)
1908 pixel=ScaleQuantumToShort(GetRedPixelComponent(p));
1909 q=PopShortPixel(endian,pixel,q);
1910 pixel=ScaleQuantumToShort(GetGreenPixelComponent(p));
1911 q=PopShortPixel(endian,pixel,q);
1912 pixel=ScaleQuantumToShort(GetBluePixelComponent(p));
1913 q=PopShortPixel(endian,pixel,q);
1915 q+=quantum_info->pad;
1921 register unsigned long
1924 if (quantum_info->format == FloatingPointQuantumFormat)
1926 for (x=0; x < (long) number_pixels; x++)
1928 q=PopFloatPixel(&quantum_state,(float) p->red,q);
1929 q=PopFloatPixel(&quantum_state,(float) p->green,q);
1930 q=PopFloatPixel(&quantum_state,(float) p->blue,q);
1932 q+=quantum_info->pad;
1936 for (x=0; x < (long) number_pixels; x++)
1938 pixel=ScaleQuantumToLong(GetRedPixelComponent(p));
1939 q=PopLongPixel(endian,pixel,q);
1940 pixel=ScaleQuantumToLong(GetGreenPixelComponent(p));
1941 q=PopLongPixel(endian,pixel,q);
1942 pixel=ScaleQuantumToLong(GetBluePixelComponent(p));
1943 q=PopLongPixel(endian,pixel,q);
1945 q+=quantum_info->pad;
1951 if (quantum_info->format == FloatingPointQuantumFormat)
1953 for (x=0; x < (long) number_pixels; x++)
1955 q=PopDoublePixel(&quantum_state,(double) p->red,q);
1956 q=PopDoublePixel(&quantum_state,(double) p->green,q);
1957 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
1959 q+=quantum_info->pad;
1966 range=GetQuantumRange(image->depth);
1967 for (x=0; x < (long) number_pixels; x++)
1969 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1971 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1973 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
1976 q+=quantum_info->pad;
1987 switch (quantum_info->depth)
1991 register unsigned char
1994 for (x=0; x < (long) number_pixels; x++)
1996 pixel=ScaleQuantumToChar(GetRedPixelComponent(p));
1997 q=PopCharPixel(pixel,q);
1998 pixel=ScaleQuantumToChar(GetGreenPixelComponent(p));
1999 q=PopCharPixel(pixel,q);
2000 pixel=ScaleQuantumToChar(GetBluePixelComponent(p));
2001 q=PopCharPixel(pixel,q);
2002 pixel=ScaleQuantumToChar(GetAlphaPixelComponent(p));
2003 q=PopCharPixel(pixel,q);
2005 q+=quantum_info->pad;
2011 register unsigned short
2014 if (quantum_info->format == FloatingPointQuantumFormat)
2016 for (x=0; x < (long) number_pixels; x++)
2018 pixel=SinglePrecisionToHalf(QuantumScale*
2019 GetRedPixelComponent(p));
2020 q=PopShortPixel(endian,pixel,q);
2021 pixel=SinglePrecisionToHalf(QuantumScale*
2022 GetGreenPixelComponent(p));
2023 q=PopShortPixel(endian,pixel,q);
2024 pixel=SinglePrecisionToHalf(QuantumScale*
2025 GetBluePixelComponent(p));
2026 q=PopShortPixel(endian,pixel,q);
2027 pixel=SinglePrecisionToHalf(QuantumScale*
2028 GetAlphaPixelComponent(p));
2029 q=PopShortPixel(endian,pixel,q);
2031 q+=quantum_info->pad;
2035 for (x=0; x < (long) number_pixels; x++)
2037 pixel=ScaleQuantumToShort(GetRedPixelComponent(p));
2038 q=PopShortPixel(endian,pixel,q);
2039 pixel=ScaleQuantumToShort(GetGreenPixelComponent(p));
2040 q=PopShortPixel(endian,pixel,q);
2041 pixel=ScaleQuantumToShort(GetBluePixelComponent(p));
2042 q=PopShortPixel(endian,pixel,q);
2043 pixel=ScaleQuantumToShort(GetAlphaPixelComponent(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=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(GetAlphaPixelComponent(p));
2081 q=PopLongPixel(endian,pixel,q);
2083 q+=quantum_info->pad;
2089 if (quantum_info->format == FloatingPointQuantumFormat)
2094 for (x=0; x < (long) number_pixels; x++)
2096 q=PopDoublePixel(&quantum_state,(double) p->red,q);
2097 q=PopDoublePixel(&quantum_state,(double) p->green,q);
2098 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
2099 pixel=(double) GetAlphaPixelComponent(p);
2100 q=PopDoublePixel(&quantum_state,pixel,q);
2102 q+=quantum_info->pad;
2109 range=GetQuantumRange(image->depth);
2110 for (x=0; x < (long) number_pixels; x++)
2112 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2113 GetRedPixelComponent(p),range),q);
2114 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2115 GetGreenPixelComponent(p),range),q);
2116 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2117 GetBluePixelComponent(p),range),q);
2118 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2119 GetAlphaPixelComponent(p),range),q);
2121 q+=quantum_info->pad;
2130 if (image->colorspace != CMYKColorspace)
2132 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2133 "ColorSeparatedImageRequired","`%s'",image->filename);
2136 switch (quantum_info->depth)
2140 register unsigned char
2143 for (x=0; x < (long) number_pixels; x++)
2145 pixel=ScaleQuantumToChar(GetRedPixelComponent(p));
2146 q=PopCharPixel(pixel,q);
2147 pixel=ScaleQuantumToChar(GetGreenPixelComponent(p));
2148 q=PopCharPixel(pixel,q);
2149 pixel=ScaleQuantumToChar(GetBluePixelComponent(p));
2150 q=PopCharPixel(pixel,q);
2151 pixel=ScaleQuantumToChar(indexes[x]);
2152 q=PopCharPixel(pixel,q);
2154 q+=quantum_info->pad;
2160 register unsigned short
2163 if (quantum_info->format == FloatingPointQuantumFormat)
2165 for (x=0; x < (long) number_pixels; x++)
2167 pixel=SinglePrecisionToHalf(QuantumScale*
2168 GetRedPixelComponent(p));
2169 q=PopShortPixel(endian,pixel,q);
2170 pixel=SinglePrecisionToHalf(QuantumScale*
2171 GetGreenPixelComponent(p));
2172 q=PopShortPixel(endian,pixel,q);
2173 pixel=SinglePrecisionToHalf(QuantumScale*
2174 GetBluePixelComponent(p));
2175 q=PopShortPixel(endian,pixel,q);
2176 pixel=SinglePrecisionToHalf(QuantumScale*indexes[x]);
2177 q=PopShortPixel(endian,pixel,q);
2179 q+=quantum_info->pad;
2183 for (x=0; x < (long) number_pixels; x++)
2185 pixel=ScaleQuantumToShort(GetRedPixelComponent(p));
2186 q=PopShortPixel(endian,pixel,q);
2187 pixel=ScaleQuantumToShort(GetGreenPixelComponent(p));
2188 q=PopShortPixel(endian,pixel,q);
2189 pixel=ScaleQuantumToShort(GetBluePixelComponent(p));
2190 q=PopShortPixel(endian,pixel,q);
2191 pixel=ScaleQuantumToShort(indexes[x]);
2192 q=PopShortPixel(endian,pixel,q);
2194 q+=quantum_info->pad;
2200 register unsigned long
2203 if (quantum_info->format == FloatingPointQuantumFormat)
2205 for (x=0; x < (long) number_pixels; x++)
2207 q=PopFloatPixel(&quantum_state,(float) p->red,q);
2208 q=PopFloatPixel(&quantum_state,(float) p->green,q);
2209 q=PopFloatPixel(&quantum_state,(float) p->blue,q);
2210 q=PopFloatPixel(&quantum_state,(float) indexes[x],q);
2212 q+=quantum_info->pad;
2216 for (x=0; x < (long) number_pixels; x++)
2218 pixel=ScaleQuantumToLong(GetRedPixelComponent(p));
2219 q=PopLongPixel(endian,pixel,q);
2220 pixel=ScaleQuantumToLong(GetGreenPixelComponent(p));
2221 q=PopLongPixel(endian,pixel,q);
2222 pixel=ScaleQuantumToLong(GetBluePixelComponent(p));
2223 q=PopLongPixel(endian,pixel,q);
2224 pixel=ScaleQuantumToLong(indexes[x]);
2225 q=PopLongPixel(endian,pixel,q);
2227 q+=quantum_info->pad;
2233 if (quantum_info->format == FloatingPointQuantumFormat)
2235 for (x=0; x < (long) number_pixels; x++)
2237 q=PopDoublePixel(&quantum_state,(double) p->red,q);
2238 q=PopDoublePixel(&quantum_state,(double) p->green,q);
2239 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
2240 q=PopDoublePixel(&quantum_state,(double) indexes[x],q);
2242 q+=quantum_info->pad;
2249 range=GetQuantumRange(image->depth);
2250 for (x=0; x < (long) number_pixels; x++)
2252 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2254 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2256 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2258 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2259 indexes[x],range),q);
2261 q+=quantum_info->pad;
2271 if (image->colorspace != CMYKColorspace)
2273 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2274 "ColorSeparatedImageRequired","`%s'",image->filename);
2277 switch (quantum_info->depth)
2281 register unsigned char
2284 for (x=0; x < (long) number_pixels; x++)
2286 pixel=ScaleQuantumToChar(GetRedPixelComponent(p));
2287 q=PopCharPixel(pixel,q);
2288 pixel=ScaleQuantumToChar(GetGreenPixelComponent(p));
2289 q=PopCharPixel(pixel,q);
2290 pixel=ScaleQuantumToChar(GetBluePixelComponent(p));
2291 q=PopCharPixel(pixel,q);
2292 pixel=ScaleQuantumToChar(indexes[x]);
2293 q=PopCharPixel(pixel,q);
2294 pixel=ScaleQuantumToChar((Quantum) (QuantumRange-
2295 GetOpacityPixelComponent(p)));
2296 q=PopCharPixel(pixel,q);
2298 q+=quantum_info->pad;
2304 register unsigned short
2307 if (quantum_info->format == FloatingPointQuantumFormat)
2309 for (x=0; x < (long) number_pixels; x++)
2311 pixel=SinglePrecisionToHalf(QuantumScale*
2312 GetRedPixelComponent(p));
2313 q=PopShortPixel(endian,pixel,q);
2314 pixel=SinglePrecisionToHalf(QuantumScale*
2315 GetGreenPixelComponent(p));
2316 q=PopShortPixel(endian,pixel,q);
2317 pixel=SinglePrecisionToHalf(QuantumScale*
2318 GetBluePixelComponent(p));
2319 q=PopShortPixel(endian,pixel,q);
2320 pixel=SinglePrecisionToHalf(QuantumScale*indexes[x]);
2321 q=PopShortPixel(endian,pixel,q);
2322 pixel=SinglePrecisionToHalf(QuantumScale*
2323 GetAlphaPixelComponent(p));
2324 q=PopShortPixel(endian,pixel,q);
2326 q+=quantum_info->pad;
2330 for (x=0; x < (long) number_pixels; x++)
2332 pixel=ScaleQuantumToShort(GetRedPixelComponent(p));
2333 q=PopShortPixel(endian,pixel,q);
2334 pixel=ScaleQuantumToShort(GetGreenPixelComponent(p));
2335 q=PopShortPixel(endian,pixel,q);
2336 pixel=ScaleQuantumToShort(GetBluePixelComponent(p));
2337 q=PopShortPixel(endian,pixel,q);
2338 pixel=ScaleQuantumToShort(indexes[x]);
2339 q=PopShortPixel(endian,pixel,q);
2340 pixel=ScaleQuantumToShort((Quantum) (QuantumRange-
2341 GetOpacityPixelComponent(p)));
2342 q=PopShortPixel(endian,pixel,q);
2344 q+=quantum_info->pad;
2350 register unsigned long
2353 if (quantum_info->format == FloatingPointQuantumFormat)
2355 for (x=0; x < (long) number_pixels; x++)
2360 q=PopFloatPixel(&quantum_state,(float) p->red,q);
2361 q=PopFloatPixel(&quantum_state,(float) p->green,q);
2362 q=PopFloatPixel(&quantum_state,(float) p->blue,q);
2363 q=PopFloatPixel(&quantum_state,(float) indexes[x],q);
2364 pixel=(float) (GetAlphaPixelComponent(p));
2365 q=PopFloatPixel(&quantum_state,pixel,q);
2367 q+=quantum_info->pad;
2371 for (x=0; x < (long) number_pixels; x++)
2373 pixel=ScaleQuantumToLong(GetRedPixelComponent(p));
2374 q=PopLongPixel(endian,pixel,q);
2375 pixel=ScaleQuantumToLong(GetGreenPixelComponent(p));
2376 q=PopLongPixel(endian,pixel,q);
2377 pixel=ScaleQuantumToLong(GetBluePixelComponent(p));
2378 q=PopLongPixel(endian,pixel,q);
2379 pixel=ScaleQuantumToLong(indexes[x]);
2380 q=PopLongPixel(endian,pixel,q);
2381 pixel=ScaleQuantumToLong((Quantum) (QuantumRange-
2382 GetOpacityPixelComponent(p)));
2383 q=PopLongPixel(endian,pixel,q);
2385 q+=quantum_info->pad;
2391 if (quantum_info->format == FloatingPointQuantumFormat)
2396 for (x=0; x < (long) number_pixels; x++)
2398 q=PopDoublePixel(&quantum_state,(double) p->red,q);
2399 q=PopDoublePixel(&quantum_state,(double) p->green,q);
2400 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
2401 q=PopDoublePixel(&quantum_state,(double) indexes[x],q);
2402 pixel=(double) (GetAlphaPixelComponent(p));
2403 q=PopDoublePixel(&quantum_state,pixel,q);
2405 q+=quantum_info->pad;
2412 range=GetQuantumRange(image->depth);
2413 for (x=0; x < (long) number_pixels; x++)
2415 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2417 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2419 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2421 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2422 indexes[x],range),q);
2423 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2424 p->opacity,range),q);
2426 q+=quantum_info->pad;
2444 register unsigned long
2452 range=GetQuantumRange(image->depth);
2453 switch (quantum_info->depth)
2457 if (quantum_info->pack == MagickFalse)
2459 for (x=0; x < (long) number_pixels; x+=2)
2461 for (i=0; i < 4; i++)
2467 quantum=GetRedPixelComponent(p);
2472 quantum=GetGreenPixelComponent(p);
2477 quantum=GetBluePixelComponent(p);
2481 cbcr[i]=(Quantum) quantum;
2484 pixel=(unsigned long) ((unsigned long) (cbcr[1]) << 22 |
2485 (unsigned long) (cbcr[0]) << 12 |
2486 (unsigned long) (cbcr[2]) << 2);
2487 q=PopLongPixel(endian,pixel,q);
2489 pixel=(unsigned long) ((unsigned long) (cbcr[3]) << 22 |
2490 (unsigned long) (cbcr[0]) << 12 |
2491 (unsigned long) (cbcr[2]) << 2);
2492 q=PopLongPixel(endian,pixel,q);
2494 q+=quantum_info->pad;
2502 for (x=0; x < (long) number_pixels; x+=2)
2504 for (i=0; i < 4; i++)
2510 quantum=GetRedPixelComponent(p);
2515 quantum=GetGreenPixelComponent(p);
2520 quantum=GetBluePixelComponent(p);
2524 cbcr[i]=(Quantum) quantum;
2527 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2529 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2531 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2534 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2536 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2538 q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
2541 q+=quantum_info->pad;
2551 if ((quantum_type == CbYCrQuantum) || (quantum_type == CbYCrAQuantum))
2556 register PixelPacket
2559 q=GetAuthenticPixelQueue(image);
2560 if (image_view != (CacheView *) NULL)
2561 q=(PixelPacket *) GetCacheViewVirtualPixelQueue(image_view);
2562 for (x=0; x < (long) number_pixels; x++)
2570 if ((quantum_type == RGBOQuantum) || (quantum_type == CMYKOQuantum))
2572 register PixelPacket
2575 q=GetAuthenticPixelQueue(image);
2576 if (image_view != (CacheView *) NULL)
2577 q=(PixelPacket *) GetCacheViewVirtualPixelQueue(image_view);
2578 for (x=0; x < (long) number_pixels; x++)
2580 q->opacity=(Quantum) GetAlphaPixelComponent(q);