2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6 % QQQ U U AAA N N TTTTT U U M M %
7 % Q Q U U A A NN N T U U MM MM %
8 % Q Q U U AAAAA N N N T U U M M M %
9 % Q QQ U U A A N NN T U U M M %
10 % QQQQ UUU A A N N T UUU M M %
12 % EEEEE X X PPPP OOO RRRR TTTTT %
13 % E X X P P O O R R T %
14 % EEE X PPPP O O RRRR T %
16 % EEEEE X X P OOO R R T %
18 % MagickCore Methods to Export Quantum Pixels %
25 % Copyright 1999-2008 ImageMagick Studio LLC, a non-profit organization %
26 % dedicated to making software imaging solutions freely available. %
28 % You may not use this file except in compliance with the License. You may %
29 % obtain a copy of the License at %
31 % http://www.imagemagick.org/script/license.php %
33 % Unless required by applicable law or agreed to in writing, software %
34 % distributed under the License is distributed on an "AS IS" BASIS, %
35 % WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. %
36 % See the License for the specific language governing permissions and %
37 % limitations under the License. %
39 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
47 #include "magick/studio.h"
48 #include "magick/property.h"
49 #include "magick/blob.h"
50 #include "magick/blob-private.h"
51 #include "magick/color-private.h"
52 #include "magick/exception.h"
53 #include "magick/exception-private.h"
54 #include "magick/cache.h"
55 #include "magick/constitute.h"
56 #include "magick/delegate.h"
57 #include "magick/geometry.h"
58 #include "magick/list.h"
59 #include "magick/magick.h"
60 #include "magick/memory_.h"
61 #include "magick/monitor.h"
62 #include "magick/option.h"
63 #include "magick/pixel.h"
64 #include "magick/pixel-private.h"
65 #include "magick/quantum.h"
66 #include "magick/quantum-private.h"
67 #include "magick/resource_.h"
68 #include "magick/semaphore.h"
69 #include "magick/statistic.h"
70 #include "magick/stream.h"
71 #include "magick/string_.h"
72 #include "magick/utility.h"
75 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
79 + E x p o r t Q u a n t u m P i x e l s %
83 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
85 % ExportQuantumPixels() transfers one or more pixel components from the image
86 % pixel cache to a user supplied buffer. The pixels are returned in network
87 % byte order. MagickTrue is returned if the pixels are successfully
88 % transferred, otherwise MagickFalse.
90 % The format of the ExportQuantumPixels method is:
92 % size_t ExportQuantumPixels(const Image *image,
93 % const CacheView *image_view,const QuantumInfo *quantum_info,
94 % const QuantumType quantum_type,unsigned char *pixels,
95 % ExceptionInfo *exception)
97 % A description of each parameter follows:
101 % o image_view: the image cache view.
103 % o quantum_info: the quantum info.
105 % o quantum_type: Declare which pixel components to transfer (RGB, RGBA,
108 % o pixels: The components are transferred to this buffer.
110 % o exception: return any errors or warnings in this structure.
114 static inline unsigned char *PopDoublePixel(const QuantumState *quantum_state,
115 const double pixel,unsigned char *pixels)
123 p=(double *) quantum;
124 *p=(double) (pixel*quantum_state->inverse_scale+quantum_state->minimum);
125 if (quantum_state->endian != LSBEndian)
127 *pixels++=quantum[7];
128 *pixels++=quantum[6];
129 *pixels++=quantum[5];
130 *pixels++=quantum[4];
131 *pixels++=quantum[3];
132 *pixels++=quantum[2];
133 *pixels++=quantum[1];
134 *pixels++=quantum[0];
137 *pixels++=quantum[0];
138 *pixels++=quantum[1];
139 *pixels++=quantum[2];
140 *pixels++=quantum[3];
141 *pixels++=quantum[4];
142 *pixels++=quantum[5];
143 *pixels++=quantum[6];
144 *pixels++=quantum[7];
148 static inline unsigned char *PopFloatPixel(const QuantumState *quantum_state,
149 const float pixel,unsigned char *pixels)
158 *p=(float) ((double) pixel*quantum_state->inverse_scale+
159 quantum_state->minimum);
160 if (quantum_state->endian != LSBEndian)
162 *pixels++=quantum[3];
163 *pixels++=quantum[2];
164 *pixels++=quantum[1];
165 *pixels++=quantum[0];
168 *pixels++=quantum[0];
169 *pixels++=quantum[1];
170 *pixels++=quantum[2];
171 *pixels++=quantum[3];
175 static inline unsigned char *PopQuantumPixel(QuantumState *quantum_state,
176 const size_t depth,const QuantumAny pixel,unsigned char *pixels)
184 if (quantum_state->bits == 0UL)
185 quantum_state->bits=8U;
186 for (i=(ssize_t) depth; i > 0L; )
188 quantum_bits=(size_t) i;
189 if (quantum_bits > quantum_state->bits)
190 quantum_bits=quantum_state->bits;
191 i-=(ssize_t) quantum_bits;
192 if (quantum_state->bits == 8UL)
194 quantum_state->bits-=quantum_bits;
195 *pixels|=(((pixel >> i) &~ ((~0UL) << quantum_bits)) <<
196 quantum_state->bits);
197 if (quantum_state->bits == 0UL)
200 quantum_state->bits=8UL;
206 static inline unsigned char *PopQuantumLongPixel(QuantumState *quantum_state,
207 const size_t depth,const size_t pixel,unsigned char *pixels)
215 if (quantum_state->bits == 0U)
216 quantum_state->bits=32UL;
217 for (i=(ssize_t) depth; i > 0; )
219 quantum_bits=(size_t) i;
220 if (quantum_bits > quantum_state->bits)
221 quantum_bits=quantum_state->bits;
222 quantum_state->pixel|=(((pixel >> (depth-i)) &
223 quantum_state->mask[quantum_bits]) << (32U-quantum_state->bits));
224 i-=(ssize_t) quantum_bits;
225 quantum_state->bits-=quantum_bits;
226 if (quantum_state->bits == 0U)
228 pixels=PopLongPixel(quantum_state->endian,quantum_state->pixel,pixels);
229 quantum_state->pixel=0U;
230 quantum_state->bits=32U;
236 MagickExport size_t ExportQuantumPixels(const Image *image,
237 const CacheView *image_view,const QuantumInfo *quantum_info,
238 const QuantumType quantum_type,unsigned char *pixels,ExceptionInfo *exception)
255 register const IndexPacket
258 register const PixelPacket
264 register unsigned char
273 assert(image != (Image *) NULL);
274 assert(image->signature == MagickSignature);
275 if (image->debug != MagickFalse)
276 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
277 assert(quantum_info != (QuantumInfo *) NULL);
278 assert(quantum_info->signature == MagickSignature);
279 if (pixels == (unsigned char *) NULL)
280 pixels=GetQuantumPixels(quantum_info);
281 if (image_view == (CacheView *) NULL)
283 number_pixels=GetImageExtent(image);
284 p=GetVirtualPixelQueue(image);
285 indexes=GetVirtualIndexQueue(image);
289 number_pixels=GetCacheViewExtent(image_view);
290 p=GetCacheViewVirtualPixelQueue(image_view);
291 indexes=GetCacheViewVirtualIndexQueue(image_view);
293 if (quantum_info->alpha_type == AssociatedQuantumAlpha)
301 q=GetAuthenticPixelQueue(image);
302 if (image_view != (CacheView *) NULL)
303 q=(PixelPacket *) GetCacheViewVirtualPixelQueue(image_view);
304 for (x=0; x < (ssize_t) image->columns; x++)
306 alpha=QuantumScale*((double) QuantumRange-q->opacity);
307 q->red=ClampToQuantum(alpha*q->red);
308 q->green=ClampToQuantum(alpha*q->green);
309 q->blue=ClampToQuantum(alpha*q->blue);
313 if ((quantum_type == RGBOQuantum) || (quantum_type == CMYKOQuantum) ||
314 (quantum_type == BGROQuantum))
319 q=GetAuthenticPixelQueue(image);
320 if (image_view != (CacheView *) NULL)
321 q=(PixelPacket *) GetCacheViewVirtualPixelQueue(image_view);
322 for (x=0; x < (ssize_t) number_pixels; x++)
324 q->opacity=(Quantum) GetAlphaPixelComponent(q);
328 if ((quantum_type == CbYCrQuantum) || (quantum_type == CbYCrAQuantum))
336 q=GetAuthenticPixelQueue(image);
337 if (image_view != (CacheView *) NULL)
338 q=GetAuthenticPixelQueue(image);
339 for (x=0; x < (ssize_t) number_pixels; x++)
349 InitializeQuantumState(quantum_info,image->endian,&quantum_state);
350 extent=GetQuantumExtent(image,quantum_info,quantum_type);
351 endian=quantum_state.endian;
352 switch (quantum_type)
356 if (image->storage_class != PseudoClass)
358 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
359 "ColormappedImageRequired","`%s'",image->filename);
362 switch (quantum_info->depth)
366 register unsigned char
369 for (x=((ssize_t) number_pixels-7); x > 0; x-=8)
371 pixel=(unsigned char) *indexes++;
372 *q=((pixel & 0x01) << 7);
373 pixel=(unsigned char) *indexes++;
374 *q|=((pixel & 0x01) << 6);
375 pixel=(unsigned char) *indexes++;
376 *q|=((pixel & 0x01) << 5);
377 pixel=(unsigned char) *indexes++;
378 *q|=((pixel & 0x01) << 4);
379 pixel=(unsigned char) *indexes++;
380 *q|=((pixel & 0x01) << 3);
381 pixel=(unsigned char) *indexes++;
382 *q|=((pixel & 0x01) << 2);
383 pixel=(unsigned char) *indexes++;
384 *q|=((pixel & 0x01) << 1);
385 pixel=(unsigned char) *indexes++;
386 *q|=((pixel & 0x01) << 0);
389 if ((number_pixels % 8) != 0)
392 for (bit=7; bit >= (ssize_t) (8-(number_pixels % 8)); bit--)
394 pixel=(unsigned char) *indexes++;
395 *q|=((pixel & 0x01) << (unsigned char) bit);
403 register unsigned char
406 for (x=0; x < (ssize_t) (number_pixels-1) ; x+=2)
408 pixel=(unsigned char) *indexes++;
409 *q=((pixel & 0xf) << 4);
410 pixel=(unsigned char) *indexes++;
411 *q|=((pixel & 0xf) << 0);
414 if ((number_pixels % 2) != 0)
416 pixel=(unsigned char) *indexes++;
417 *q=((pixel & 0xf) << 4);
424 for (x=0; x < (ssize_t) number_pixels; x++)
426 q=PopCharPixel((unsigned char) indexes[x],q);
427 q+=quantum_info->pad;
433 if (quantum_info->format == FloatingPointQuantumFormat)
435 for (x=0; x < (ssize_t) number_pixels; x++)
437 q=PopShortPixel(endian,SinglePrecisionToHalf(QuantumScale*
439 q+=quantum_info->pad;
443 for (x=0; x < (ssize_t) number_pixels; x++)
445 q=PopShortPixel(endian,(unsigned short) indexes[x],q);
446 q+=quantum_info->pad;
452 if (quantum_info->format == FloatingPointQuantumFormat)
454 for (x=0; x < (ssize_t) number_pixels; x++)
456 q=PopFloatPixel(&quantum_state,(float) indexes[x],q);
458 q+=quantum_info->pad;
462 for (x=0; x < (ssize_t) number_pixels; x++)
464 q=PopLongPixel(endian,(unsigned int) indexes[x],q);
465 q+=quantum_info->pad;
471 if (quantum_info->format == FloatingPointQuantumFormat)
473 for (x=0; x < (ssize_t) number_pixels; x++)
475 q=PopDoublePixel(&quantum_state,(double) indexes[x],q);
477 q+=quantum_info->pad;
484 for (x=0; x < (ssize_t) number_pixels; x++)
486 q=PopQuantumPixel(&quantum_state,quantum_info->depth,indexes[x],q);
488 q+=quantum_info->pad;
495 case IndexAlphaQuantum:
497 if (image->storage_class != PseudoClass)
499 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
500 "ColormappedImageRequired","`%s'",image->filename);
503 switch (quantum_info->depth)
507 register unsigned char
510 for (x=((ssize_t) number_pixels-3); x > 0; x-=4)
512 pixel=(unsigned char) *indexes++;
513 *q=((pixel & 0x01) << 7);
514 pixel=(unsigned char) (p->opacity == (Quantum) TransparentOpacity ?
516 *q|=((pixel & 0x01) << 6);
518 pixel=(unsigned char) *indexes++;
519 *q|=((pixel & 0x01) << 5);
520 pixel=(unsigned char) (p->opacity == (Quantum) TransparentOpacity ?
522 *q|=((pixel & 0x01) << 4);
524 pixel=(unsigned char) *indexes++;
525 *q|=((pixel & 0x01) << 3);
526 pixel=(unsigned char) (p->opacity == (Quantum) TransparentOpacity ?
528 *q|=((pixel & 0x01) << 2);
530 pixel=(unsigned char) *indexes++;
531 *q|=((pixel & 0x01) << 1);
532 pixel=(unsigned char) (p->opacity == (Quantum) TransparentOpacity ?
534 *q|=((pixel & 0x01) << 0);
538 if ((number_pixels % 4) != 0)
541 for (bit=3; bit >= (ssize_t) (4-(number_pixels % 4)); bit-=2)
543 pixel=(unsigned char) *indexes++;
544 *q|=((pixel & 0x01) << (unsigned char) (bit+4));
545 pixel=(unsigned char) (p->opacity == (Quantum)
546 TransparentOpacity ? 1 : 0);
547 *q|=((pixel & 0x01) << (unsigned char) (bit+4-1));
556 register unsigned char
559 for (x=0; x < (ssize_t) number_pixels ; x++)
561 pixel=(unsigned char) *indexes++;
562 *q=((pixel & 0xf) << 4);
563 pixel=(unsigned char) (16*QuantumScale*((Quantum) (QuantumRange-
564 GetOpacityPixelComponent(p)))+0.5);
565 *q|=((pixel & 0xf) << 0);
573 register unsigned char
576 for (x=0; x < (ssize_t) number_pixels; x++)
578 q=PopCharPixel((unsigned char) indexes[x],q);
579 pixel=ScaleQuantumToChar((Quantum) (QuantumRange-
580 GetOpacityPixelComponent(p)));
581 q=PopCharPixel(pixel,q);
583 q+=quantum_info->pad;
589 register unsigned short
592 if (quantum_info->format == FloatingPointQuantumFormat)
594 for (x=0; x < (ssize_t) number_pixels; x++)
596 q=PopShortPixel(endian,(unsigned short) indexes[x],q);
597 pixel=SinglePrecisionToHalf(QuantumScale*
598 GetAlphaPixelComponent(p));
599 q=PopShortPixel(endian,pixel,q);
601 q+=quantum_info->pad;
605 for (x=0; x < (ssize_t) number_pixels; x++)
607 q=PopShortPixel(endian,(unsigned short) indexes[x],q);
608 pixel=ScaleQuantumToShort((Quantum) (QuantumRange-
609 GetOpacityPixelComponent(p)));
610 q=PopShortPixel(endian,pixel,q);
612 q+=quantum_info->pad;
618 register unsigned int
621 if (quantum_info->format == FloatingPointQuantumFormat)
623 for (x=0; x < (ssize_t) number_pixels; x++)
628 q=PopFloatPixel(&quantum_state,(float) indexes[x],q);
629 pixel=(float) (GetAlphaPixelComponent(p));
630 q=PopFloatPixel(&quantum_state,pixel,q);
632 q+=quantum_info->pad;
636 for (x=0; x < (ssize_t) number_pixels; x++)
638 q=PopLongPixel(endian,(unsigned int) indexes[x],q);
639 pixel=ScaleQuantumToLong((Quantum) (QuantumRange-
640 GetOpacityPixelComponent(p)));
641 q=PopLongPixel(endian,pixel,q);
643 q+=quantum_info->pad;
649 if (quantum_info->format == FloatingPointQuantumFormat)
651 for (x=0; x < (ssize_t) number_pixels; x++)
656 q=PopDoublePixel(&quantum_state,(double) indexes[x],q);
657 pixel=(double) (GetAlphaPixelComponent(p));
658 q=PopDoublePixel(&quantum_state,pixel,q);
660 q+=quantum_info->pad;
667 range=GetQuantumRange(quantum_info->depth);
668 for (x=0; x < (ssize_t) number_pixels; x++)
670 q=PopQuantumPixel(&quantum_state,quantum_info->depth,indexes[x],q);
671 q=PopQuantumPixel(&quantum_state,quantum_info->depth,
672 ScaleQuantumToAny((Quantum) (GetAlphaPixelComponent(p)),range),q);
674 q+=quantum_info->pad;
683 switch (quantum_info->depth)
687 for (x=0; x < (ssize_t) number_pixels; x++)
689 q=PopCharPixel(ScaleQuantumToChar(GetBluePixelComponent(p)),q);
690 q=PopCharPixel(ScaleQuantumToChar(GetGreenPixelComponent(p)),q);
691 q=PopCharPixel(ScaleQuantumToChar(GetRedPixelComponent(p)),q);
693 q+=quantum_info->pad;
699 register unsigned int
702 range=GetQuantumRange(quantum_info->depth);
703 if (quantum_info->pack == MagickFalse)
705 for (x=0; x < (ssize_t) number_pixels; x++)
707 pixel=(unsigned int) (ScaleQuantumToAny(GetRedPixelComponent(p),range) << 22 |
708 ScaleQuantumToAny(GetGreenPixelComponent(p),range) << 12 |
709 ScaleQuantumToAny(GetBluePixelComponent(p),range) << 2);
710 q=PopLongPixel(endian,pixel,q);
712 q+=quantum_info->pad;
716 if (quantum_info->quantum == 32UL)
718 for (x=0; x < (ssize_t) number_pixels; x++)
720 pixel=(unsigned int) ScaleQuantumToAny(GetRedPixelComponent(p),range);
721 q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,
723 pixel=(unsigned int) ScaleQuantumToAny(GetGreenPixelComponent(p),range);
724 q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,
726 pixel=(unsigned int) ScaleQuantumToAny(GetBluePixelComponent(p),range);
727 q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,
730 q+=quantum_info->pad;
734 for (x=0; x < (ssize_t) number_pixels; x++)
736 pixel=(unsigned int) ScaleQuantumToAny(GetRedPixelComponent(p),range);
737 q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
738 pixel=(unsigned int) ScaleQuantumToAny(GetGreenPixelComponent(p),range);
739 q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
740 pixel=(unsigned int) ScaleQuantumToAny(GetBluePixelComponent(p),range);
741 q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
743 q+=quantum_info->pad;
749 register unsigned int
752 range=GetQuantumRange(quantum_info->depth);
753 if (quantum_info->pack == MagickFalse)
755 for (x=0; x < (ssize_t) (3*number_pixels-1); x+=2)
762 pixel=(unsigned int) ScaleQuantumToAny(GetRedPixelComponent(p),range);
767 pixel=(unsigned int) ScaleQuantumToAny(GetGreenPixelComponent(p),range);
772 pixel=(unsigned int) ScaleQuantumToAny(GetBluePixelComponent(p),range);
777 q=PopShortPixel(endian,(unsigned short) (pixel << 4),q);
783 pixel=(unsigned int) ScaleQuantumToAny(GetRedPixelComponent(p),range);
788 pixel=(unsigned int) ScaleQuantumToAny(GetGreenPixelComponent(p),range);
793 pixel=(unsigned int) ScaleQuantumToAny(GetBluePixelComponent(p),range);
798 q=PopShortPixel(endian,(unsigned short) (pixel << 4),q);
799 q+=quantum_info->pad;
801 for (bit=0; bit < (ssize_t) (3*number_pixels % 2); bit++)
808 pixel=(unsigned int) ScaleQuantumToAny(GetRedPixelComponent(p),range);
813 pixel=(unsigned int) ScaleQuantumToAny(GetGreenPixelComponent(p),range);
818 pixel=(unsigned int) ScaleQuantumToAny(GetBluePixelComponent(p),range);
823 q=PopShortPixel(endian,(unsigned short) (pixel << 4),q);
824 q+=quantum_info->pad;
830 if (quantum_info->quantum == 32UL)
832 for (x=0; x < (ssize_t) number_pixels; x++)
834 pixel=(unsigned int) ScaleQuantumToAny(GetRedPixelComponent(p),range);
835 q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,
837 pixel=(unsigned int) ScaleQuantumToAny(GetGreenPixelComponent(p),range);
838 q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,
840 pixel=(unsigned int) ScaleQuantumToAny(GetBluePixelComponent(p),range);
841 q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,
844 q+=quantum_info->pad;
848 for (x=0; x < (ssize_t) number_pixels; x++)
850 pixel=(unsigned int) ScaleQuantumToAny(GetRedPixelComponent(p),range);
851 q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
852 pixel=(unsigned int) ScaleQuantumToAny(GetGreenPixelComponent(p),range);
853 q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
854 pixel=(unsigned int) ScaleQuantumToAny(GetBluePixelComponent(p),range);
855 q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
857 q+=quantum_info->pad;
863 register unsigned short
866 if (quantum_info->format == FloatingPointQuantumFormat)
868 for (x=0; x < (ssize_t) number_pixels; x++)
870 pixel=SinglePrecisionToHalf(QuantumScale*
871 GetBluePixelComponent(p));
872 q=PopShortPixel(endian,pixel,q);
873 pixel=SinglePrecisionToHalf(QuantumScale*
874 GetGreenPixelComponent(p));
875 q=PopShortPixel(endian,pixel,q);
876 pixel=SinglePrecisionToHalf(QuantumScale*
877 GetRedPixelComponent(p));
878 q=PopShortPixel(endian,pixel,q);
880 q+=quantum_info->pad;
884 for (x=0; x < (ssize_t) number_pixels; x++)
886 pixel=ScaleQuantumToShort(GetBluePixelComponent(p));
887 q=PopShortPixel(endian,pixel,q);
888 pixel=ScaleQuantumToShort(GetGreenPixelComponent(p));
889 q=PopShortPixel(endian,pixel,q);
890 pixel=ScaleQuantumToShort(GetRedPixelComponent(p));
891 q=PopShortPixel(endian,pixel,q);
893 q+=quantum_info->pad;
899 register unsigned int
902 if (quantum_info->format == FloatingPointQuantumFormat)
904 for (x=0; x < (ssize_t) number_pixels; x++)
906 q=PopFloatPixel(&quantum_state,(float) p->red,q);
907 q=PopFloatPixel(&quantum_state,(float) p->green,q);
908 q=PopFloatPixel(&quantum_state,(float) p->blue,q);
910 q+=quantum_info->pad;
914 for (x=0; x < (ssize_t) number_pixels; x++)
916 pixel=ScaleQuantumToLong(GetBluePixelComponent(p));
917 q=PopLongPixel(endian,pixel,q);
918 pixel=ScaleQuantumToLong(GetGreenPixelComponent(p));
919 q=PopLongPixel(endian,pixel,q);
920 pixel=ScaleQuantumToLong(GetRedPixelComponent(p));
921 q=PopLongPixel(endian,pixel,q);
923 q+=quantum_info->pad;
929 if (quantum_info->format == FloatingPointQuantumFormat)
931 for (x=0; x < (ssize_t) number_pixels; x++)
933 q=PopDoublePixel(&quantum_state,(double) p->red,q);
934 q=PopDoublePixel(&quantum_state,(double) p->green,q);
935 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
937 q+=quantum_info->pad;
944 range=GetQuantumRange(quantum_info->depth);
945 for (x=0; x < (ssize_t) number_pixels; x++)
947 q=PopQuantumPixel(&quantum_state,quantum_info->depth,
948 ScaleQuantumToAny(GetRedPixelComponent(p),range),q);
949 q=PopQuantumPixel(&quantum_state,quantum_info->depth,
950 ScaleQuantumToAny(GetGreenPixelComponent(p),range),q);
951 q=PopQuantumPixel(&quantum_state,quantum_info->depth,
952 ScaleQuantumToAny(GetBluePixelComponent(p),range),q);
954 q+=quantum_info->pad;
964 switch (quantum_info->depth)
968 register unsigned char
971 for (x=0; x < (ssize_t) number_pixels; x++)
973 pixel=ScaleQuantumToChar(GetBluePixelComponent(p));
974 q=PopCharPixel(pixel,q);
975 pixel=ScaleQuantumToChar(GetGreenPixelComponent(p));
976 q=PopCharPixel(pixel,q);
977 pixel=ScaleQuantumToChar(GetRedPixelComponent(p));
978 q=PopCharPixel(pixel,q);
979 pixel=ScaleQuantumToChar((Quantum) GetAlphaPixelComponent(p));
980 q=PopCharPixel(pixel,q);
982 q+=quantum_info->pad;
988 register unsigned int
991 range=GetQuantumRange(quantum_info->depth);
992 if (quantum_info->pack == MagickFalse)
1006 for (x=0; x < (ssize_t) number_pixels; x++)
1008 for (i=0; i < 4; i++)
1012 case 0: quantum=p->red; break;
1013 case 1: quantum=p->green; break;
1014 case 2: quantum=p->blue; break;
1015 case 3: quantum=(Quantum) (QuantumRange-p->opacity); break;
1021 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
1027 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
1033 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
1035 q=PopLongPixel(endian,pixel,q);
1043 q+=quantum_info->pad;
1047 if (quantum_info->quantum == 32UL)
1049 for (x=0; x < (ssize_t) number_pixels; x++)
1051 pixel=(unsigned int) ScaleQuantumToAny(GetRedPixelComponent(p),range);
1052 q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,
1054 pixel=(unsigned int) ScaleQuantumToAny(GetGreenPixelComponent(p),range);
1055 q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,
1057 pixel=(unsigned int) ScaleQuantumToAny(GetBluePixelComponent(p),range);
1058 q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,
1060 pixel=(unsigned int) ScaleQuantumToAny((Quantum) (QuantumRange-
1062 q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,
1065 q+=quantum_info->pad;
1069 for (x=0; x < (ssize_t) number_pixels; x++)
1071 pixel=(unsigned int) ScaleQuantumToAny(GetRedPixelComponent(p),range);
1072 q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
1073 pixel=(unsigned int) ScaleQuantumToAny(GetGreenPixelComponent(p),range);
1074 q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
1075 pixel=(unsigned int) ScaleQuantumToAny(GetBluePixelComponent(p),range);
1076 q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
1077 pixel=(unsigned int) ScaleQuantumToAny((Quantum) (QuantumRange-
1079 q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
1081 q+=quantum_info->pad;
1087 register unsigned short
1090 if (quantum_info->format == FloatingPointQuantumFormat)
1092 for (x=0; x < (ssize_t) number_pixels; x++)
1094 pixel=SinglePrecisionToHalf(QuantumScale*
1095 GetBluePixelComponent(p));
1096 q=PopShortPixel(endian,pixel,q);
1097 pixel=SinglePrecisionToHalf(QuantumScale*
1098 GetGreenPixelComponent(p));
1099 q=PopShortPixel(endian,pixel,q);
1100 pixel=SinglePrecisionToHalf(QuantumScale*
1101 GetRedPixelComponent(p));
1102 q=PopShortPixel(endian,pixel,q);
1103 pixel=SinglePrecisionToHalf(QuantumScale*
1104 GetAlphaPixelComponent(p));
1105 q=PopShortPixel(endian,pixel,q);
1107 q+=quantum_info->pad;
1111 for (x=0; x < (ssize_t) number_pixels; x++)
1113 pixel=ScaleQuantumToShort(GetBluePixelComponent(p));
1114 q=PopShortPixel(endian,pixel,q);
1115 pixel=ScaleQuantumToShort(GetGreenPixelComponent(p));
1116 q=PopShortPixel(endian,pixel,q);
1117 pixel=ScaleQuantumToShort(GetRedPixelComponent(p));
1118 q=PopShortPixel(endian,pixel,q);
1119 pixel=ScaleQuantumToShort((Quantum) GetAlphaPixelComponent(p));
1120 q=PopShortPixel(endian,pixel,q);
1122 q+=quantum_info->pad;
1128 register unsigned int
1131 if (quantum_info->format == FloatingPointQuantumFormat)
1133 for (x=0; x < (ssize_t) number_pixels; x++)
1138 q=PopFloatPixel(&quantum_state,(float) p->red,q);
1139 q=PopFloatPixel(&quantum_state,(float) p->green,q);
1140 q=PopFloatPixel(&quantum_state,(float) p->blue,q);
1141 pixel=(float) GetAlphaPixelComponent(p);
1142 q=PopFloatPixel(&quantum_state,pixel,q);
1144 q+=quantum_info->pad;
1148 for (x=0; x < (ssize_t) number_pixels; x++)
1150 pixel=ScaleQuantumToLong(GetBluePixelComponent(p));
1151 q=PopLongPixel(endian,pixel,q);
1152 pixel=ScaleQuantumToLong(GetGreenPixelComponent(p));
1153 q=PopLongPixel(endian,pixel,q);
1154 pixel=ScaleQuantumToLong(GetRedPixelComponent(p));
1155 q=PopLongPixel(endian,pixel,q);
1156 pixel=ScaleQuantumToLong((Quantum) GetAlphaPixelComponent(p));
1157 q=PopLongPixel(endian,pixel,q);
1159 q+=quantum_info->pad;
1165 if (quantum_info->format == FloatingPointQuantumFormat)
1170 for (x=0; x < (ssize_t) number_pixels; x++)
1172 q=PopDoublePixel(&quantum_state,(double) p->red,q);
1173 q=PopDoublePixel(&quantum_state,(double) p->green,q);
1174 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
1175 pixel=(double) GetAlphaPixelComponent(p);
1176 q=PopDoublePixel(&quantum_state,pixel,q);
1178 q+=quantum_info->pad;
1185 range=GetQuantumRange(quantum_info->depth);
1186 for (x=0; x < (ssize_t) number_pixels; x++)
1188 q=PopQuantumPixel(&quantum_state,quantum_info->depth,
1189 ScaleQuantumToAny(GetBluePixelComponent(p),range),q);
1190 q=PopQuantumPixel(&quantum_state,quantum_info->depth,
1191 ScaleQuantumToAny(GetGreenPixelComponent(p),range),q);
1192 q=PopQuantumPixel(&quantum_state,quantum_info->depth,
1193 ScaleQuantumToAny(GetRedPixelComponent(p),range),q);
1194 q=PopQuantumPixel(&quantum_state,quantum_info->depth,
1195 ScaleQuantumToAny((Quantum) GetAlphaPixelComponent(p),range),q);
1197 q+=quantum_info->pad;
1206 switch (quantum_info->depth)
1213 register unsigned char
1219 if (quantum_info->min_is_white != MagickFalse)
1224 threshold=(Quantum) (QuantumRange/2);
1225 for (x=((ssize_t) number_pixels-7); x > 0; x-=8)
1228 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 7;
1230 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 6;
1232 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 5;
1234 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 4;
1236 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 3;
1238 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 2;
1240 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 1;
1242 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 0;
1246 if ((number_pixels % 8) != 0)
1249 for (bit=7; bit >= (ssize_t) (8-(number_pixels % 8)); bit--)
1251 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) <<
1261 register unsigned char
1264 for (x=0; x < (ssize_t) (number_pixels-1) ; x+=2)
1266 pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
1267 *q=(((pixel >> 4) & 0xf) << 4);
1269 pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
1274 if ((number_pixels % 2) != 0)
1276 pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
1277 *q=(((pixel >> 4) & 0xf) << 4);
1285 register unsigned char
1288 for (x=0; x < (ssize_t) number_pixels; x++)
1290 pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
1291 q=PopCharPixel(pixel,q);
1293 q+=quantum_info->pad;
1299 range=GetQuantumRange(quantum_info->depth);
1300 if (quantum_info->pack == MagickFalse)
1302 register unsigned int
1305 for (x=0; x < (ssize_t) (number_pixels-2); x+=3)
1307 pixel=(unsigned int) (
1308 ScaleQuantumToAny(PixelIntensityToQuantum(p+2),range) << 22 |
1309 ScaleQuantumToAny(PixelIntensityToQuantum(p+1),range) << 12 |
1310 ScaleQuantumToAny(PixelIntensityToQuantum(p+0),range) << 2);
1311 q=PopLongPixel(endian,pixel,q);
1313 q+=quantum_info->pad;
1316 if (x++ < (ssize_t) (number_pixels-1))
1317 pixel|=ScaleQuantumToAny(PixelIntensityToQuantum(p+1),
1319 if (x++ < (ssize_t) number_pixels)
1320 pixel|=ScaleQuantumToAny(PixelIntensityToQuantum(p+0),
1322 q=PopLongPixel(endian,pixel,q);
1325 for (x=0; x < (ssize_t) number_pixels; x++)
1327 q=PopQuantumPixel(&quantum_state,quantum_info->depth,
1328 ScaleQuantumToAny(PixelIntensityToQuantum(p),range),q);
1330 q+=quantum_info->pad;
1336 register unsigned short
1339 range=GetQuantumRange(quantum_info->depth);
1340 if (quantum_info->pack == MagickFalse)
1342 for (x=0; x < (ssize_t) number_pixels; x++)
1344 pixel=ScaleQuantumToShort(PixelIntensityToQuantum(p));
1345 q=PopShortPixel(endian,(unsigned short) (pixel >> 4),q);
1347 q+=quantum_info->pad;
1351 for (x=0; x < (ssize_t) number_pixels; x++)
1353 q=PopQuantumPixel(&quantum_state,quantum_info->depth,
1354 ScaleQuantumToAny(PixelIntensityToQuantum(p),range),q);
1356 q+=quantum_info->pad;
1362 register unsigned short
1365 if (quantum_info->format == FloatingPointQuantumFormat)
1367 for (x=0; x < (ssize_t) number_pixels; x++)
1369 pixel=SinglePrecisionToHalf(QuantumScale*
1370 PixelIntensityToQuantum(p));
1371 q=PopShortPixel(endian,pixel,q);
1373 q+=quantum_info->pad;
1377 for (x=0; x < (ssize_t) number_pixels; x++)
1379 pixel=ScaleQuantumToShort(PixelIntensityToQuantum(p));
1380 q=PopShortPixel(endian,pixel,q);
1382 q+=quantum_info->pad;
1388 register unsigned int
1391 if (quantum_info->format == FloatingPointQuantumFormat)
1393 for (x=0; x < (ssize_t) number_pixels; x++)
1398 pixel=(float) PixelIntensityToQuantum(p);
1399 q=PopFloatPixel(&quantum_state,pixel,q);
1401 q+=quantum_info->pad;
1405 for (x=0; x < (ssize_t) number_pixels; x++)
1407 pixel=ScaleQuantumToLong(PixelIntensityToQuantum(p));
1408 q=PopLongPixel(endian,pixel,q);
1410 q+=quantum_info->pad;
1416 if (quantum_info->format == FloatingPointQuantumFormat)
1418 for (x=0; x < (ssize_t) number_pixels; x++)
1423 pixel=(double) PixelIntensityToQuantum(p);
1424 q=PopDoublePixel(&quantum_state,pixel,q);
1426 q+=quantum_info->pad;
1433 range=GetQuantumRange(quantum_info->depth);
1434 for (x=0; x < (ssize_t) number_pixels; x++)
1436 q=PopQuantumPixel(&quantum_state,quantum_info->depth,
1437 ScaleQuantumToAny(PixelIntensityToQuantum(p),range),q);
1439 q+=quantum_info->pad;
1446 case GrayAlphaQuantum:
1448 switch (quantum_info->depth)
1455 register unsigned char
1462 if (quantum_info->min_is_white == MagickFalse)
1467 threshold=(Quantum) (QuantumRange/2);
1468 for (x=((ssize_t) number_pixels-3); x > 0; x-=4)
1471 *q|=(PixelIntensityToQuantum(p) > threshold ? black : white) << 7;
1472 pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 : 0x01);
1473 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 6);
1475 *q|=(PixelIntensityToQuantum(p) > threshold ? black : white) << 5;
1476 pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 : 0x01);
1477 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 4);
1479 *q|=(PixelIntensityToQuantum(p) > threshold ? black : white) << 3;
1480 pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 : 0x01);
1481 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 2);
1483 *q|=(PixelIntensityToQuantum(p) > threshold ? black : white) << 1;
1484 pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 : 0x01);
1485 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 0);
1489 if ((number_pixels % 4) != 0)
1492 for (bit=0; bit <= (ssize_t) (number_pixels % 4); bit+=2)
1494 *q|=(PixelIntensityToQuantum(p) > threshold ? black : white) <<
1496 pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 :
1498 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << (unsigned char)
1508 register unsigned char
1511 for (x=0; x < (ssize_t) number_pixels ; x++)
1513 pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
1514 *q=(((pixel >> 4) & 0xf) << 4);
1515 pixel=(unsigned char) (16*QuantumScale*((Quantum) (QuantumRange-
1516 GetOpacityPixelComponent(p)))+0.5);
1525 register unsigned char
1528 for (x=0; x < (ssize_t) number_pixels; x++)
1530 pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
1531 q=PopCharPixel(pixel,q);
1532 pixel=ScaleQuantumToChar((Quantum) (QuantumRange-
1533 GetOpacityPixelComponent(p)));
1534 q=PopCharPixel(pixel,q);
1536 q+=quantum_info->pad;
1542 register unsigned short
1545 if (quantum_info->format == FloatingPointQuantumFormat)
1547 for (x=0; x < (ssize_t) number_pixels; x++)
1549 pixel=SinglePrecisionToHalf(QuantumScale*
1550 PixelIntensityToQuantum(p));
1551 q=PopShortPixel(endian,pixel,q);
1552 pixel=SinglePrecisionToHalf(QuantumScale*
1553 GetAlphaPixelComponent(p));
1554 q=PopShortPixel(endian,pixel,q);
1556 q+=quantum_info->pad;
1560 for (x=0; x < (ssize_t) number_pixels; x++)
1562 pixel=ScaleQuantumToShort(PixelIntensityToQuantum(p));
1563 q=PopShortPixel(endian,pixel,q);
1564 pixel=ScaleQuantumToShort((Quantum) (QuantumRange-
1565 GetOpacityPixelComponent(p)));
1566 q=PopShortPixel(endian,pixel,q);
1568 q+=quantum_info->pad;
1574 register unsigned int
1577 if (quantum_info->format == FloatingPointQuantumFormat)
1579 for (x=0; x < (ssize_t) number_pixels; x++)
1584 pixel=(float) PixelIntensityToQuantum(p);
1585 q=PopFloatPixel(&quantum_state,pixel,q);
1586 pixel=(float) (GetAlphaPixelComponent(p));
1587 q=PopFloatPixel(&quantum_state,pixel,q);
1589 q+=quantum_info->pad;
1593 for (x=0; x < (ssize_t) number_pixels; x++)
1595 pixel=ScaleQuantumToLong(PixelIntensityToQuantum(p));
1596 q=PopLongPixel(endian,pixel,q);
1597 pixel=ScaleQuantumToLong((Quantum) (QuantumRange-
1598 GetOpacityPixelComponent(p)));
1599 q=PopLongPixel(endian,pixel,q);
1601 q+=quantum_info->pad;
1607 if (quantum_info->format == FloatingPointQuantumFormat)
1609 for (x=0; x < (ssize_t) number_pixels; x++)
1614 pixel=(double) PixelIntensityToQuantum(p);
1615 q=PopDoublePixel(&quantum_state,pixel,q);
1616 pixel=(double) (GetAlphaPixelComponent(p));
1617 q=PopDoublePixel(&quantum_state,pixel,q);
1619 q+=quantum_info->pad;
1626 range=GetQuantumRange(quantum_info->depth);
1627 for (x=0; x < (ssize_t) number_pixels; x++)
1629 q=PopQuantumPixel(&quantum_state,quantum_info->depth,
1630 ScaleQuantumToAny(PixelIntensityToQuantum(p),range),q);
1631 q=PopQuantumPixel(&quantum_state,quantum_info->depth,
1632 ScaleQuantumToAny((Quantum) (GetAlphaPixelComponent(p)),range),q);
1634 q+=quantum_info->pad;
1644 switch (quantum_info->depth)
1648 register unsigned char
1651 for (x=0; x < (ssize_t) number_pixels; x++)
1653 pixel=ScaleQuantumToChar(GetRedPixelComponent(p));
1654 q=PopCharPixel(pixel,q);
1656 q+=quantum_info->pad;
1662 register unsigned short
1665 if (quantum_info->format == FloatingPointQuantumFormat)
1667 for (x=0; x < (ssize_t) number_pixels; x++)
1669 pixel=SinglePrecisionToHalf(QuantumScale*
1670 GetRedPixelComponent(p));
1671 q=PopShortPixel(endian,pixel,q);
1673 q+=quantum_info->pad;
1677 for (x=0; x < (ssize_t) number_pixels; x++)
1679 pixel=ScaleQuantumToShort(GetRedPixelComponent(p));
1680 q=PopShortPixel(endian,pixel,q);
1682 q+=quantum_info->pad;
1688 register unsigned int
1691 if (quantum_info->format == FloatingPointQuantumFormat)
1693 for (x=0; x < (ssize_t) number_pixels; x++)
1695 q=PopFloatPixel(&quantum_state,(float) p->red,q);
1697 q+=quantum_info->pad;
1701 for (x=0; x < (ssize_t) number_pixels; x++)
1703 pixel=ScaleQuantumToLong(GetRedPixelComponent(p));
1704 q=PopLongPixel(endian,pixel,q);
1706 q+=quantum_info->pad;
1712 if (quantum_info->format == FloatingPointQuantumFormat)
1714 for (x=0; x < (ssize_t) number_pixels; x++)
1716 q=PopDoublePixel(&quantum_state,(double) p->red,q);
1718 q+=quantum_info->pad;
1725 range=GetQuantumRange(quantum_info->depth);
1726 for (x=0; x < (ssize_t) number_pixels; x++)
1728 q=PopQuantumPixel(&quantum_state,quantum_info->depth,
1729 ScaleQuantumToAny(GetRedPixelComponent(p),range),q);
1731 q+=quantum_info->pad;
1739 case MagentaQuantum:
1741 switch (quantum_info->depth)
1745 register unsigned char
1748 for (x=0; x < (ssize_t) number_pixels; x++)
1750 pixel=ScaleQuantumToChar(GetGreenPixelComponent(p));
1751 q=PopCharPixel(pixel,q);
1753 q+=quantum_info->pad;
1759 register unsigned short
1762 if (quantum_info->format == FloatingPointQuantumFormat)
1764 for (x=0; x < (ssize_t) number_pixels; x++)
1766 pixel=SinglePrecisionToHalf(QuantumScale*
1767 GetGreenPixelComponent(p));
1768 q=PopShortPixel(endian,pixel,q);
1770 q+=quantum_info->pad;
1774 for (x=0; x < (ssize_t) number_pixels; x++)
1776 pixel=ScaleQuantumToShort(GetGreenPixelComponent(p));
1777 q=PopShortPixel(endian,pixel,q);
1779 q+=quantum_info->pad;
1785 register unsigned int
1788 if (quantum_info->format == FloatingPointQuantumFormat)
1790 for (x=0; x < (ssize_t) number_pixels; x++)
1792 q=PopFloatPixel(&quantum_state,(float) p->green,q);
1794 q+=quantum_info->pad;
1798 for (x=0; x < (ssize_t) number_pixels; x++)
1800 pixel=ScaleQuantumToLong(GetGreenPixelComponent(p));
1801 q=PopLongPixel(endian,pixel,q);
1803 q+=quantum_info->pad;
1809 if (quantum_info->format == FloatingPointQuantumFormat)
1811 for (x=0; x < (ssize_t) number_pixels; x++)
1813 q=PopDoublePixel(&quantum_state,(double) p->green,q);
1815 q+=quantum_info->pad;
1822 range=GetQuantumRange(quantum_info->depth);
1823 for (x=0; x < (ssize_t) number_pixels; x++)
1825 q=PopQuantumPixel(&quantum_state,quantum_info->depth,
1826 ScaleQuantumToAny(GetGreenPixelComponent(p),range),q);
1828 q+=quantum_info->pad;
1838 switch (quantum_info->depth)
1842 register unsigned char
1845 for (x=0; x < (ssize_t) number_pixels; x++)
1847 pixel=ScaleQuantumToChar(GetBluePixelComponent(p));
1848 q=PopCharPixel(pixel,q);
1850 q+=quantum_info->pad;
1856 register unsigned short
1859 if (quantum_info->format == FloatingPointQuantumFormat)
1861 for (x=0; x < (ssize_t) number_pixels; x++)
1863 pixel=SinglePrecisionToHalf(QuantumScale*
1864 GetBluePixelComponent(p));
1865 q=PopShortPixel(endian,pixel,q);
1867 q+=quantum_info->pad;
1871 for (x=0; x < (ssize_t) number_pixels; x++)
1873 pixel=ScaleQuantumToShort(GetBluePixelComponent(p));
1874 q=PopShortPixel(endian,pixel,q);
1876 q+=quantum_info->pad;
1882 register unsigned int
1885 if (quantum_info->format == FloatingPointQuantumFormat)
1887 for (x=0; x < (ssize_t) number_pixels; x++)
1889 q=PopFloatPixel(&quantum_state,(float) p->blue,q);
1891 q+=quantum_info->pad;
1895 for (x=0; x < (ssize_t) number_pixels; x++)
1897 pixel=ScaleQuantumToLong(GetBluePixelComponent(p));
1898 q=PopLongPixel(endian,pixel,q);
1900 q+=quantum_info->pad;
1906 if (quantum_info->format == FloatingPointQuantumFormat)
1908 for (x=0; x < (ssize_t) number_pixels; x++)
1910 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
1912 q+=quantum_info->pad;
1919 range=GetQuantumRange(quantum_info->depth);
1920 for (x=0; x < (ssize_t) number_pixels; x++)
1922 q=PopQuantumPixel(&quantum_state,quantum_info->depth,
1923 ScaleQuantumToAny(GetBluePixelComponent(p),range),q);
1925 q+=quantum_info->pad;
1934 switch (quantum_info->depth)
1938 register unsigned char
1941 for (x=0; x < (ssize_t) number_pixels; x++)
1943 pixel=ScaleQuantumToChar((Quantum) (QuantumRange-
1944 GetOpacityPixelComponent(p)));
1945 q=PopCharPixel(pixel,q);
1947 q+=quantum_info->pad;
1953 register unsigned short
1956 if (quantum_info->format == FloatingPointQuantumFormat)
1958 for (x=0; x < (ssize_t) number_pixels; x++)
1960 pixel=SinglePrecisionToHalf(QuantumScale*
1961 GetAlphaPixelComponent(p));
1962 q=PopShortPixel(endian,pixel,q);
1964 q+=quantum_info->pad;
1968 for (x=0; x < (ssize_t) number_pixels; x++)
1970 pixel=ScaleQuantumToShort((Quantum) (QuantumRange-
1971 GetOpacityPixelComponent(p)));
1972 q=PopShortPixel(endian,pixel,q);
1974 q+=quantum_info->pad;
1980 register unsigned int
1983 if (quantum_info->format == FloatingPointQuantumFormat)
1985 for (x=0; x < (ssize_t) number_pixels; x++)
1990 pixel=(float) (GetAlphaPixelComponent(p));
1991 q=PopFloatPixel(&quantum_state,pixel,q);
1993 q+=quantum_info->pad;
1997 for (x=0; x < (ssize_t) number_pixels; x++)
1999 pixel=ScaleQuantumToLong((Quantum) (QuantumRange-
2000 GetOpacityPixelComponent(p)));
2001 q=PopLongPixel(endian,pixel,q);
2003 q+=quantum_info->pad;
2009 if (quantum_info->format == FloatingPointQuantumFormat)
2011 for (x=0; x < (ssize_t) number_pixels; x++)
2016 pixel=(double) (GetAlphaPixelComponent(p));
2017 q=PopDoublePixel(&quantum_state,pixel,q);
2019 q+=quantum_info->pad;
2026 range=GetQuantumRange(quantum_info->depth);
2027 for (x=0; x < (ssize_t) number_pixels; x++)
2029 q=PopQuantumPixel(&quantum_state,quantum_info->depth,
2030 ScaleQuantumToAny((Quantum) (GetAlphaPixelComponent(p)),range),q);
2032 q+=quantum_info->pad;
2039 case OpacityQuantum:
2041 switch (quantum_info->depth)
2045 register unsigned char
2048 for (x=0; x < (ssize_t) number_pixels; x++)
2050 pixel=ScaleQuantumToChar(GetOpacityPixelComponent(p));
2051 q=PopCharPixel(pixel,q);
2053 q+=quantum_info->pad;
2059 register unsigned short
2062 if (quantum_info->format == FloatingPointQuantumFormat)
2064 for (x=0; x < (ssize_t) number_pixels; x++)
2066 pixel=SinglePrecisionToHalf(QuantumScale*
2067 GetOpacityPixelComponent(p));
2068 q=PopShortPixel(endian,pixel,q);
2070 q+=quantum_info->pad;
2074 for (x=0; x < (ssize_t) number_pixels; x++)
2076 pixel=ScaleQuantumToShort(GetOpacityPixelComponent(p));
2077 q=PopShortPixel(endian,pixel,q);
2079 q+=quantum_info->pad;
2085 register unsigned int
2088 if (quantum_info->format == FloatingPointQuantumFormat)
2090 for (x=0; x < (ssize_t) number_pixels; x++)
2092 q=PopFloatPixel(&quantum_state,(float) p->opacity,q);
2094 q+=quantum_info->pad;
2098 for (x=0; x < (ssize_t) number_pixels; x++)
2100 pixel=ScaleQuantumToLong(GetOpacityPixelComponent(p));
2101 q=PopLongPixel(endian,pixel,q);
2103 q+=quantum_info->pad;
2109 if (quantum_info->format == FloatingPointQuantumFormat)
2111 for (x=0; x < (ssize_t) number_pixels; x++)
2113 q=PopDoublePixel(&quantum_state,(double) p->opacity,q);
2115 q+=quantum_info->pad;
2122 range=GetQuantumRange(quantum_info->depth);
2123 for (x=0; x < (ssize_t) number_pixels; x++)
2125 q=PopQuantumPixel(&quantum_state,quantum_info->depth,
2126 ScaleQuantumToAny(GetOpacityPixelComponent(p),range),q);
2128 q+=quantum_info->pad;
2137 if (image->colorspace != CMYKColorspace)
2139 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2140 "ColorSeparatedImageRequired","`%s'",image->filename);
2143 switch (quantum_info->depth)
2147 register unsigned char
2150 for (x=0; x < (ssize_t) number_pixels; x++)
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 < (ssize_t) number_pixels; x++)
2168 pixel=SinglePrecisionToHalf(QuantumScale*indexes[x]);
2169 q=PopShortPixel(endian,pixel,q);
2171 q+=quantum_info->pad;
2175 for (x=0; x < (ssize_t) number_pixels; x++)
2177 pixel=ScaleQuantumToShort(indexes[x]);
2178 q=PopShortPixel(endian,pixel,q);
2180 q+=quantum_info->pad;
2186 register unsigned int
2189 if (quantum_info->format == FloatingPointQuantumFormat)
2191 for (x=0; x < (ssize_t) number_pixels; x++)
2193 q=PopFloatPixel(&quantum_state,(float) indexes[x],q);
2195 q+=quantum_info->pad;
2199 for (x=0; x < (ssize_t) number_pixels; x++)
2201 pixel=ScaleQuantumToLong(indexes[x]);
2202 q=PopLongPixel(endian,pixel,q);
2204 q+=quantum_info->pad;
2210 if (quantum_info->format == FloatingPointQuantumFormat)
2212 for (x=0; x < (ssize_t) number_pixels; x++)
2214 q=PopDoublePixel(&quantum_state,(double) indexes[x],q);
2216 q+=quantum_info->pad;
2223 range=GetQuantumRange(quantum_info->depth);
2224 for (x=0; x < (ssize_t) number_pixels; x++)
2226 q=PopQuantumPixel(&quantum_state,quantum_info->depth,
2227 ScaleQuantumToAny((Quantum) indexes[x],range),q);
2229 q+=quantum_info->pad;
2239 switch (quantum_info->depth)
2243 for (x=0; x < (ssize_t) number_pixels; x++)
2245 q=PopCharPixel(ScaleQuantumToChar(GetRedPixelComponent(p)),q);
2246 q=PopCharPixel(ScaleQuantumToChar(GetGreenPixelComponent(p)),q);
2247 q=PopCharPixel(ScaleQuantumToChar(GetBluePixelComponent(p)),q);
2249 q+=quantum_info->pad;
2255 register unsigned int
2258 range=GetQuantumRange(quantum_info->depth);
2259 if (quantum_info->pack == MagickFalse)
2261 for (x=0; x < (ssize_t) number_pixels; x++)
2263 pixel=(unsigned int) (ScaleQuantumToAny(GetRedPixelComponent(p),range) << 22 |
2264 ScaleQuantumToAny(GetGreenPixelComponent(p),range) << 12 |
2265 ScaleQuantumToAny(GetBluePixelComponent(p),range) << 2);
2266 q=PopLongPixel(endian,pixel,q);
2268 q+=quantum_info->pad;
2272 if (quantum_info->quantum == 32UL)
2274 for (x=0; x < (ssize_t) number_pixels; x++)
2276 pixel=(unsigned int) ScaleQuantumToAny(GetRedPixelComponent(p),range);
2277 q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,
2279 pixel=(unsigned int) ScaleQuantumToAny(GetGreenPixelComponent(p),range);
2280 q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,
2282 pixel=(unsigned int) ScaleQuantumToAny(GetBluePixelComponent(p),range);
2283 q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,
2286 q+=quantum_info->pad;
2290 for (x=0; x < (ssize_t) number_pixels; x++)
2292 pixel=(unsigned int) ScaleQuantumToAny(GetRedPixelComponent(p),range);
2293 q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
2294 pixel=(unsigned int) ScaleQuantumToAny(GetGreenPixelComponent(p),range);
2295 q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
2296 pixel=(unsigned int) ScaleQuantumToAny(GetBluePixelComponent(p),range);
2297 q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
2299 q+=quantum_info->pad;
2305 register unsigned int
2308 range=GetQuantumRange(quantum_info->depth);
2309 if (quantum_info->pack == MagickFalse)
2311 for (x=0; x < (ssize_t) (3*number_pixels-1); x+=2)
2318 pixel=(unsigned int) ScaleQuantumToAny(GetRedPixelComponent(p),range);
2323 pixel=(unsigned int) ScaleQuantumToAny(GetGreenPixelComponent(p),range);
2328 pixel=(unsigned int) ScaleQuantumToAny(GetBluePixelComponent(p),range);
2333 q=PopShortPixel(endian,(unsigned short) (pixel << 4),q);
2339 pixel=(unsigned int) ScaleQuantumToAny(GetRedPixelComponent(p),range);
2344 pixel=(unsigned int) ScaleQuantumToAny(GetGreenPixelComponent(p),range);
2349 pixel=(unsigned int) ScaleQuantumToAny(GetBluePixelComponent(p),range);
2354 q=PopShortPixel(endian,(unsigned short) (pixel << 4),q);
2355 q+=quantum_info->pad;
2357 for (bit=0; bit < (ssize_t) (3*number_pixels % 2); bit++)
2359 switch ((x+bit) % 3)
2364 pixel=(unsigned int) ScaleQuantumToAny(GetRedPixelComponent(p),range);
2369 pixel=(unsigned int) ScaleQuantumToAny(GetGreenPixelComponent(p),range);
2374 pixel=(unsigned int) ScaleQuantumToAny(GetBluePixelComponent(p),range);
2379 q=PopShortPixel(endian,(unsigned short) (pixel << 4),q);
2380 q+=quantum_info->pad;
2386 if (quantum_info->quantum == 32UL)
2388 for (x=0; x < (ssize_t) number_pixels; x++)
2390 pixel=(unsigned int) ScaleQuantumToAny(GetRedPixelComponent(p),range);
2391 q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,
2393 pixel=(unsigned int) ScaleQuantumToAny(GetGreenPixelComponent(p),range);
2394 q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,
2396 pixel=(unsigned int) ScaleQuantumToAny(GetBluePixelComponent(p),range);
2397 q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,
2400 q+=quantum_info->pad;
2404 for (x=0; x < (ssize_t) number_pixels; x++)
2406 pixel=(unsigned int) ScaleQuantumToAny(GetRedPixelComponent(p),range);
2407 q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
2408 pixel=(unsigned int) ScaleQuantumToAny(GetGreenPixelComponent(p),range);
2409 q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
2410 pixel=(unsigned int) ScaleQuantumToAny(GetBluePixelComponent(p),range);
2411 q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
2413 q+=quantum_info->pad;
2419 register unsigned short
2422 if (quantum_info->format == FloatingPointQuantumFormat)
2424 for (x=0; x < (ssize_t) number_pixels; x++)
2426 pixel=SinglePrecisionToHalf(QuantumScale*
2427 GetRedPixelComponent(p));
2428 q=PopShortPixel(endian,pixel,q);
2429 pixel=SinglePrecisionToHalf(QuantumScale*
2430 GetGreenPixelComponent(p));
2431 q=PopShortPixel(endian,pixel,q);
2432 pixel=SinglePrecisionToHalf(QuantumScale*
2433 GetBluePixelComponent(p));
2434 q=PopShortPixel(endian,pixel,q);
2436 q+=quantum_info->pad;
2440 for (x=0; x < (ssize_t) number_pixels; x++)
2442 pixel=ScaleQuantumToShort(GetRedPixelComponent(p));
2443 q=PopShortPixel(endian,pixel,q);
2444 pixel=ScaleQuantumToShort(GetGreenPixelComponent(p));
2445 q=PopShortPixel(endian,pixel,q);
2446 pixel=ScaleQuantumToShort(GetBluePixelComponent(p));
2447 q=PopShortPixel(endian,pixel,q);
2449 q+=quantum_info->pad;
2455 register unsigned int
2458 if (quantum_info->format == FloatingPointQuantumFormat)
2460 for (x=0; x < (ssize_t) number_pixels; x++)
2462 q=PopFloatPixel(&quantum_state,(float) p->red,q);
2463 q=PopFloatPixel(&quantum_state,(float) p->green,q);
2464 q=PopFloatPixel(&quantum_state,(float) p->blue,q);
2466 q+=quantum_info->pad;
2470 for (x=0; x < (ssize_t) number_pixels; x++)
2472 pixel=ScaleQuantumToLong(GetRedPixelComponent(p));
2473 q=PopLongPixel(endian,pixel,q);
2474 pixel=ScaleQuantumToLong(GetGreenPixelComponent(p));
2475 q=PopLongPixel(endian,pixel,q);
2476 pixel=ScaleQuantumToLong(GetBluePixelComponent(p));
2477 q=PopLongPixel(endian,pixel,q);
2479 q+=quantum_info->pad;
2485 if (quantum_info->format == FloatingPointQuantumFormat)
2487 for (x=0; x < (ssize_t) number_pixels; x++)
2489 q=PopDoublePixel(&quantum_state,(double) p->red,q);
2490 q=PopDoublePixel(&quantum_state,(double) p->green,q);
2491 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
2493 q+=quantum_info->pad;
2500 range=GetQuantumRange(quantum_info->depth);
2501 for (x=0; x < (ssize_t) number_pixels; x++)
2503 q=PopQuantumPixel(&quantum_state,quantum_info->depth,
2504 ScaleQuantumToAny(GetRedPixelComponent(p),range),q);
2505 q=PopQuantumPixel(&quantum_state,quantum_info->depth,
2506 ScaleQuantumToAny(GetGreenPixelComponent(p),range),q);
2507 q=PopQuantumPixel(&quantum_state,quantum_info->depth,
2508 ScaleQuantumToAny(GetBluePixelComponent(p),range),q);
2510 q+=quantum_info->pad;
2521 switch (quantum_info->depth)
2525 register unsigned char
2528 for (x=0; x < (ssize_t) number_pixels; x++)
2530 pixel=ScaleQuantumToChar(GetRedPixelComponent(p));
2531 q=PopCharPixel(pixel,q);
2532 pixel=ScaleQuantumToChar(GetGreenPixelComponent(p));
2533 q=PopCharPixel(pixel,q);
2534 pixel=ScaleQuantumToChar(GetBluePixelComponent(p));
2535 q=PopCharPixel(pixel,q);
2536 pixel=ScaleQuantumToChar((Quantum) GetAlphaPixelComponent(p));
2537 q=PopCharPixel(pixel,q);
2539 q+=quantum_info->pad;
2545 register unsigned int
2548 range=GetQuantumRange(quantum_info->depth);
2549 if (quantum_info->pack == MagickFalse)
2563 for (x=0; x < (ssize_t) number_pixels; x++)
2565 for (i=0; i < 4; i++)
2569 case 0: quantum=p->red; break;
2570 case 1: quantum=p->green; break;
2571 case 2: quantum=p->blue; break;
2572 case 3: quantum=(Quantum) (QuantumRange-p->opacity); break;
2578 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
2584 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
2590 pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
2592 q=PopLongPixel(endian,pixel,q);
2600 q+=quantum_info->pad;
2604 if (quantum_info->quantum == 32UL)
2606 for (x=0; x < (ssize_t) number_pixels; x++)
2608 pixel=(unsigned int) ScaleQuantumToAny(GetRedPixelComponent(p),range);
2609 q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,
2611 pixel=(unsigned int) ScaleQuantumToAny(GetGreenPixelComponent(p),range);
2612 q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,
2614 pixel=(unsigned int) ScaleQuantumToAny(GetBluePixelComponent(p),range);
2615 q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,
2617 pixel=(unsigned int) ScaleQuantumToAny((Quantum) (QuantumRange-
2619 q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,
2622 q+=quantum_info->pad;
2626 for (x=0; x < (ssize_t) number_pixels; x++)
2628 pixel=(unsigned int) ScaleQuantumToAny(GetRedPixelComponent(p),range);
2629 q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
2630 pixel=(unsigned int) ScaleQuantumToAny(GetGreenPixelComponent(p),range);
2631 q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
2632 pixel=(unsigned int) ScaleQuantumToAny(GetBluePixelComponent(p),range);
2633 q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
2634 pixel=(unsigned int) ScaleQuantumToAny((Quantum) (QuantumRange-
2636 q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
2638 q+=quantum_info->pad;
2644 register unsigned short
2647 if (quantum_info->format == FloatingPointQuantumFormat)
2649 for (x=0; x < (ssize_t) number_pixels; x++)
2651 pixel=SinglePrecisionToHalf(QuantumScale*
2652 GetRedPixelComponent(p));
2653 q=PopShortPixel(endian,pixel,q);
2654 pixel=SinglePrecisionToHalf(QuantumScale*
2655 GetGreenPixelComponent(p));
2656 q=PopShortPixel(endian,pixel,q);
2657 pixel=SinglePrecisionToHalf(QuantumScale*
2658 GetBluePixelComponent(p));
2659 q=PopShortPixel(endian,pixel,q);
2660 pixel=SinglePrecisionToHalf(QuantumScale*
2661 GetAlphaPixelComponent(p));
2662 q=PopShortPixel(endian,pixel,q);
2664 q+=quantum_info->pad;
2668 for (x=0; x < (ssize_t) number_pixels; x++)
2670 pixel=ScaleQuantumToShort(GetRedPixelComponent(p));
2671 q=PopShortPixel(endian,pixel,q);
2672 pixel=ScaleQuantumToShort(GetGreenPixelComponent(p));
2673 q=PopShortPixel(endian,pixel,q);
2674 pixel=ScaleQuantumToShort(GetBluePixelComponent(p));
2675 q=PopShortPixel(endian,pixel,q);
2676 pixel=ScaleQuantumToShort((Quantum) GetAlphaPixelComponent(p));
2677 q=PopShortPixel(endian,pixel,q);
2679 q+=quantum_info->pad;
2685 register unsigned int
2688 if (quantum_info->format == FloatingPointQuantumFormat)
2690 for (x=0; x < (ssize_t) number_pixels; x++)
2695 q=PopFloatPixel(&quantum_state,(float) p->red,q);
2696 q=PopFloatPixel(&quantum_state,(float) p->green,q);
2697 q=PopFloatPixel(&quantum_state,(float) p->blue,q);
2698 pixel=(float) GetAlphaPixelComponent(p);
2699 q=PopFloatPixel(&quantum_state,pixel,q);
2701 q+=quantum_info->pad;
2705 for (x=0; x < (ssize_t) number_pixels; x++)
2707 pixel=ScaleQuantumToLong(GetRedPixelComponent(p));
2708 q=PopLongPixel(endian,pixel,q);
2709 pixel=ScaleQuantumToLong(GetGreenPixelComponent(p));
2710 q=PopLongPixel(endian,pixel,q);
2711 pixel=ScaleQuantumToLong(GetBluePixelComponent(p));
2712 q=PopLongPixel(endian,pixel,q);
2713 pixel=ScaleQuantumToLong((Quantum) GetAlphaPixelComponent(p));
2714 q=PopLongPixel(endian,pixel,q);
2716 q+=quantum_info->pad;
2722 if (quantum_info->format == FloatingPointQuantumFormat)
2727 for (x=0; x < (ssize_t) number_pixels; x++)
2729 q=PopDoublePixel(&quantum_state,(double) p->red,q);
2730 q=PopDoublePixel(&quantum_state,(double) p->green,q);
2731 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
2732 pixel=(double) GetAlphaPixelComponent(p);
2733 q=PopDoublePixel(&quantum_state,pixel,q);
2735 q+=quantum_info->pad;
2742 range=GetQuantumRange(quantum_info->depth);
2743 for (x=0; x < (ssize_t) number_pixels; x++)
2745 q=PopQuantumPixel(&quantum_state,quantum_info->depth,
2746 ScaleQuantumToAny(GetRedPixelComponent(p),range),q);
2747 q=PopQuantumPixel(&quantum_state,quantum_info->depth,
2748 ScaleQuantumToAny(GetGreenPixelComponent(p),range),q);
2749 q=PopQuantumPixel(&quantum_state,quantum_info->depth,
2750 ScaleQuantumToAny(GetBluePixelComponent(p),range),q);
2751 q=PopQuantumPixel(&quantum_state,quantum_info->depth,
2752 ScaleQuantumToAny((Quantum) GetAlphaPixelComponent(p),range),q);
2754 q+=quantum_info->pad;
2763 if (image->colorspace != CMYKColorspace)
2765 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2766 "ColorSeparatedImageRequired","`%s'",image->filename);
2769 switch (quantum_info->depth)
2773 register unsigned char
2776 for (x=0; x < (ssize_t) number_pixels; x++)
2778 pixel=ScaleQuantumToChar(GetRedPixelComponent(p));
2779 q=PopCharPixel(pixel,q);
2780 pixel=ScaleQuantumToChar(GetGreenPixelComponent(p));
2781 q=PopCharPixel(pixel,q);
2782 pixel=ScaleQuantumToChar(GetBluePixelComponent(p));
2783 q=PopCharPixel(pixel,q);
2784 pixel=ScaleQuantumToChar(indexes[x]);
2785 q=PopCharPixel(pixel,q);
2787 q+=quantum_info->pad;
2793 register unsigned short
2796 if (quantum_info->format == FloatingPointQuantumFormat)
2798 for (x=0; x < (ssize_t) number_pixels; x++)
2800 pixel=SinglePrecisionToHalf(QuantumScale*
2801 GetRedPixelComponent(p));
2802 q=PopShortPixel(endian,pixel,q);
2803 pixel=SinglePrecisionToHalf(QuantumScale*
2804 GetGreenPixelComponent(p));
2805 q=PopShortPixel(endian,pixel,q);
2806 pixel=SinglePrecisionToHalf(QuantumScale*
2807 GetBluePixelComponent(p));
2808 q=PopShortPixel(endian,pixel,q);
2809 pixel=SinglePrecisionToHalf(QuantumScale*indexes[x]);
2810 q=PopShortPixel(endian,pixel,q);
2812 q+=quantum_info->pad;
2816 for (x=0; x < (ssize_t) number_pixels; x++)
2818 pixel=ScaleQuantumToShort(GetRedPixelComponent(p));
2819 q=PopShortPixel(endian,pixel,q);
2820 pixel=ScaleQuantumToShort(GetGreenPixelComponent(p));
2821 q=PopShortPixel(endian,pixel,q);
2822 pixel=ScaleQuantumToShort(GetBluePixelComponent(p));
2823 q=PopShortPixel(endian,pixel,q);
2824 pixel=ScaleQuantumToShort(indexes[x]);
2825 q=PopShortPixel(endian,pixel,q);
2827 q+=quantum_info->pad;
2833 register unsigned int
2836 if (quantum_info->format == FloatingPointQuantumFormat)
2838 for (x=0; x < (ssize_t) number_pixels; x++)
2840 q=PopFloatPixel(&quantum_state,(float) p->red,q);
2841 q=PopFloatPixel(&quantum_state,(float) p->green,q);
2842 q=PopFloatPixel(&quantum_state,(float) p->blue,q);
2843 q=PopFloatPixel(&quantum_state,(float) indexes[x],q);
2845 q+=quantum_info->pad;
2849 for (x=0; x < (ssize_t) number_pixels; x++)
2851 pixel=ScaleQuantumToLong(GetRedPixelComponent(p));
2852 q=PopLongPixel(endian,pixel,q);
2853 pixel=ScaleQuantumToLong(GetGreenPixelComponent(p));
2854 q=PopLongPixel(endian,pixel,q);
2855 pixel=ScaleQuantumToLong(GetBluePixelComponent(p));
2856 q=PopLongPixel(endian,pixel,q);
2857 pixel=ScaleQuantumToLong(indexes[x]);
2858 q=PopLongPixel(endian,pixel,q);
2860 q+=quantum_info->pad;
2866 if (quantum_info->format == FloatingPointQuantumFormat)
2868 for (x=0; x < (ssize_t) number_pixels; x++)
2870 q=PopDoublePixel(&quantum_state,(double) p->red,q);
2871 q=PopDoublePixel(&quantum_state,(double) p->green,q);
2872 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
2873 q=PopDoublePixel(&quantum_state,(double) indexes[x],q);
2875 q+=quantum_info->pad;
2882 range=GetQuantumRange(quantum_info->depth);
2883 for (x=0; x < (ssize_t) number_pixels; x++)
2885 q=PopQuantumPixel(&quantum_state,quantum_info->depth,
2886 ScaleQuantumToAny(GetRedPixelComponent(p),range),q);
2887 q=PopQuantumPixel(&quantum_state,quantum_info->depth,
2888 ScaleQuantumToAny(GetGreenPixelComponent(p),range),q);
2889 q=PopQuantumPixel(&quantum_state,quantum_info->depth,
2890 ScaleQuantumToAny(GetBluePixelComponent(p),range),q);
2891 q=PopQuantumPixel(&quantum_state,quantum_info->depth,
2892 ScaleQuantumToAny(GetIndexPixelComponent(indexes+x),range),q);
2894 q+=quantum_info->pad;
2904 if (image->colorspace != CMYKColorspace)
2906 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2907 "ColorSeparatedImageRequired","`%s'",image->filename);
2910 switch (quantum_info->depth)
2914 register unsigned char
2917 for (x=0; x < (ssize_t) number_pixels; x++)
2919 pixel=ScaleQuantumToChar(GetRedPixelComponent(p));
2920 q=PopCharPixel(pixel,q);
2921 pixel=ScaleQuantumToChar(GetGreenPixelComponent(p));
2922 q=PopCharPixel(pixel,q);
2923 pixel=ScaleQuantumToChar(GetBluePixelComponent(p));
2924 q=PopCharPixel(pixel,q);
2925 pixel=ScaleQuantumToChar(indexes[x]);
2926 q=PopCharPixel(pixel,q);
2927 pixel=ScaleQuantumToChar((Quantum) (QuantumRange-
2928 GetOpacityPixelComponent(p)));
2929 q=PopCharPixel(pixel,q);
2931 q+=quantum_info->pad;
2937 register unsigned short
2940 if (quantum_info->format == FloatingPointQuantumFormat)
2942 for (x=0; x < (ssize_t) number_pixels; x++)
2944 pixel=SinglePrecisionToHalf(QuantumScale*
2945 GetRedPixelComponent(p));
2946 q=PopShortPixel(endian,pixel,q);
2947 pixel=SinglePrecisionToHalf(QuantumScale*
2948 GetGreenPixelComponent(p));
2949 q=PopShortPixel(endian,pixel,q);
2950 pixel=SinglePrecisionToHalf(QuantumScale*
2951 GetBluePixelComponent(p));
2952 q=PopShortPixel(endian,pixel,q);
2953 pixel=SinglePrecisionToHalf(QuantumScale*indexes[x]);
2954 q=PopShortPixel(endian,pixel,q);
2955 pixel=SinglePrecisionToHalf(QuantumScale*
2956 GetAlphaPixelComponent(p));
2957 q=PopShortPixel(endian,pixel,q);
2959 q+=quantum_info->pad;
2963 for (x=0; x < (ssize_t) number_pixels; x++)
2965 pixel=ScaleQuantumToShort(GetRedPixelComponent(p));
2966 q=PopShortPixel(endian,pixel,q);
2967 pixel=ScaleQuantumToShort(GetGreenPixelComponent(p));
2968 q=PopShortPixel(endian,pixel,q);
2969 pixel=ScaleQuantumToShort(GetBluePixelComponent(p));
2970 q=PopShortPixel(endian,pixel,q);
2971 pixel=ScaleQuantumToShort(indexes[x]);
2972 q=PopShortPixel(endian,pixel,q);
2973 pixel=ScaleQuantumToShort((Quantum) (QuantumRange-
2974 GetOpacityPixelComponent(p)));
2975 q=PopShortPixel(endian,pixel,q);
2977 q+=quantum_info->pad;
2983 register unsigned int
2986 if (quantum_info->format == FloatingPointQuantumFormat)
2988 for (x=0; x < (ssize_t) number_pixels; x++)
2993 q=PopFloatPixel(&quantum_state,(float) p->red,q);
2994 q=PopFloatPixel(&quantum_state,(float) p->green,q);
2995 q=PopFloatPixel(&quantum_state,(float) p->blue,q);
2996 q=PopFloatPixel(&quantum_state,(float) indexes[x],q);
2997 pixel=(float) (GetAlphaPixelComponent(p));
2998 q=PopFloatPixel(&quantum_state,pixel,q);
3000 q+=quantum_info->pad;
3004 for (x=0; x < (ssize_t) number_pixels; x++)
3006 pixel=ScaleQuantumToLong(GetRedPixelComponent(p));
3007 q=PopLongPixel(endian,pixel,q);
3008 pixel=ScaleQuantumToLong(GetGreenPixelComponent(p));
3009 q=PopLongPixel(endian,pixel,q);
3010 pixel=ScaleQuantumToLong(GetBluePixelComponent(p));
3011 q=PopLongPixel(endian,pixel,q);
3012 pixel=ScaleQuantumToLong(indexes[x]);
3013 q=PopLongPixel(endian,pixel,q);
3014 pixel=ScaleQuantumToLong((Quantum) (QuantumRange-
3015 GetOpacityPixelComponent(p)));
3016 q=PopLongPixel(endian,pixel,q);
3018 q+=quantum_info->pad;
3024 if (quantum_info->format == FloatingPointQuantumFormat)
3029 for (x=0; x < (ssize_t) number_pixels; x++)
3031 q=PopDoublePixel(&quantum_state,(double) p->red,q);
3032 q=PopDoublePixel(&quantum_state,(double) p->green,q);
3033 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
3034 q=PopDoublePixel(&quantum_state,(double) indexes[x],q);
3035 pixel=(double) (GetAlphaPixelComponent(p));
3036 q=PopDoublePixel(&quantum_state,pixel,q);
3038 q+=quantum_info->pad;
3045 range=GetQuantumRange(quantum_info->depth);
3046 for (x=0; x < (ssize_t) number_pixels; x++)
3048 q=PopQuantumPixel(&quantum_state,quantum_info->depth,
3049 ScaleQuantumToAny(GetRedPixelComponent(p),range),q);
3050 q=PopQuantumPixel(&quantum_state,quantum_info->depth,
3051 ScaleQuantumToAny(GetGreenPixelComponent(p),range),q);
3052 q=PopQuantumPixel(&quantum_state,quantum_info->depth,
3053 ScaleQuantumToAny(GetBluePixelComponent(p),range),q);
3054 q=PopQuantumPixel(&quantum_state,quantum_info->depth,
3055 ScaleQuantumToAny(GetIndexPixelComponent(indexes+x),range),q);
3056 q=PopQuantumPixel(&quantum_state,quantum_info->depth,
3057 ScaleQuantumToAny(GetOpacityPixelComponent(p),range),q);
3059 q+=quantum_info->pad;
3074 register unsigned int
3085 range=GetQuantumRange(quantum_info->depth);
3086 switch (quantum_info->depth)
3090 if (quantum_info->pack == MagickFalse)
3092 for (x=0; x < (ssize_t) number_pixels; x+=2)
3094 for (i=0; i < 4; i++)
3100 quantum=GetRedPixelComponent(p);
3105 quantum=GetGreenPixelComponent(p);
3110 quantum=GetBluePixelComponent(p);
3114 cbcr[i]=(Quantum) quantum;
3117 pixel=(unsigned int) ((size_t) (cbcr[1]) << 22 |
3118 (size_t) (cbcr[0]) << 12 |
3119 (size_t) (cbcr[2]) << 2);
3120 q=PopLongPixel(endian,pixel,q);
3122 pixel=(unsigned int) ((size_t) (cbcr[3]) << 22 |
3123 (size_t) (cbcr[0]) << 12 |
3124 (size_t) (cbcr[2]) << 2);
3125 q=PopLongPixel(endian,pixel,q);
3127 q+=quantum_info->pad;
3135 for (x=0; x < (ssize_t) number_pixels; x+=2)
3137 for (i=0; i < 4; i++)
3143 quantum=GetRedPixelComponent(p);
3148 quantum=GetGreenPixelComponent(p);
3153 quantum=GetBluePixelComponent(p);
3157 cbcr[i]=(Quantum) quantum;
3160 q=PopQuantumPixel(&quantum_state,quantum_info->depth,
3161 ScaleQuantumToAny(cbcr[1],range),q);
3162 q=PopQuantumPixel(&quantum_state,quantum_info->depth,
3163 ScaleQuantumToAny(cbcr[0],range),q);
3164 q=PopQuantumPixel(&quantum_state,quantum_info->depth,
3165 ScaleQuantumToAny(cbcr[2],range),q);
3167 q=PopQuantumPixel(&quantum_state,quantum_info->depth,
3168 ScaleQuantumToAny(cbcr[3],range),q);
3169 q=PopQuantumPixel(&quantum_state,quantum_info->depth,
3170 ScaleQuantumToAny(cbcr[0],range),q);
3171 q=PopQuantumPixel(&quantum_state,quantum_info->depth,
3172 ScaleQuantumToAny(cbcr[2],range),q);
3174 q+=quantum_info->pad;
3184 if ((quantum_type == CbYCrQuantum) || (quantum_type == CbYCrAQuantum))
3189 register PixelPacket
3192 q=GetAuthenticPixelQueue(image);
3193 if (image_view != (CacheView *) NULL)
3194 q=(PixelPacket *) GetCacheViewVirtualPixelQueue(image_view);
3195 for (x=0; x < (ssize_t) number_pixels; x++)
3203 if ((quantum_type == RGBOQuantum) || (quantum_type == CMYKOQuantum) ||
3204 (quantum_type == BGROQuantum))
3206 register PixelPacket
3209 q=GetAuthenticPixelQueue(image);
3210 if (image_view != (CacheView *) NULL)
3211 q=(PixelPacket *) GetCacheViewVirtualPixelQueue(image_view);
3212 for (x=0; x < (ssize_t) number_pixels; x++)
3214 q->opacity=(Quantum) GetAlphaPixelComponent(q);