2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6 % PPPP IIIII X X EEEEE L %
10 % P IIIII X X EEEEE LLLLL %
12 % MagickCore Methods to Import/Export Pixels %
19 % Copyright 1999-2011 ImageMagick Studio LLC, a non-profit organization %
20 % dedicated to making software imaging solutions freely available. %
22 % You may not use this file except in compliance with the License. You may %
23 % obtain a copy of the License at %
25 % http://www.imagemagick.org/script/license.php %
27 % Unless required by applicable law or agreed to in writing, software %
28 % distributed under the License is distributed on an "AS IS" BASIS, %
29 % WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. %
30 % See the License for the specific language governing permissions and %
31 % limitations under the License. %
33 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
41 #include "MagickCore/studio.h"
42 #include "MagickCore/property.h"
43 #include "MagickCore/blob.h"
44 #include "MagickCore/blob-private.h"
45 #include "MagickCore/color-private.h"
46 #include "MagickCore/draw.h"
47 #include "MagickCore/exception.h"
48 #include "MagickCore/exception-private.h"
49 #include "MagickCore/cache.h"
50 #include "MagickCore/constitute.h"
51 #include "MagickCore/delegate.h"
52 #include "MagickCore/geometry.h"
53 #include "MagickCore/image-private.h"
54 #include "MagickCore/list.h"
55 #include "MagickCore/magick.h"
56 #include "MagickCore/memory_.h"
57 #include "MagickCore/monitor.h"
58 #include "MagickCore/option.h"
59 #include "MagickCore/pixel.h"
60 #include "MagickCore/pixel-accessor.h"
61 #include "MagickCore/quantum.h"
62 #include "MagickCore/quantum-private.h"
63 #include "MagickCore/resource_.h"
64 #include "MagickCore/semaphore.h"
65 #include "MagickCore/statistic.h"
66 #include "MagickCore/stream.h"
67 #include "MagickCore/string_.h"
68 #include "MagickCore/transform.h"
69 #include "MagickCore/utility.h"
72 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
76 + A c q u i r e P i x e l C h a n n e l M a p %
80 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
82 % AcquirePixelChannelMap() acquires a pixel component map.
84 % The format of the AcquirePixelChannelMap() method is:
86 % PixelChannelMap **AcquirePixelChannelMap(void)
89 MagickExport PixelChannelMap **AcquirePixelChannelMap(void)
97 channel_map=(PixelChannelMap **) AcquireAlignedMemory(MaxPixelChannelMaps,
98 sizeof(**channel_map));
99 if (channel_map == (PixelChannelMap **) NULL)
100 ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed");
101 for (i=0; i < MaxPixelChannelMaps; i++)
106 channel_map[i]=(PixelChannelMap *) AcquireQuantumMemory(MaxPixelChannels,
107 sizeof(*channel_map[i]));
108 if (channel_map[i] == (PixelChannelMap *) NULL)
109 ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed");
110 (void) ResetMagickMemory(channel_map[i],0,MaxPixelChannels*
111 sizeof(*channel_map[i]));
112 for (j=0; j < MaxPixelChannels; j++)
113 channel_map[i][j].channel=(PixelChannel) j;
119 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
123 + C l o n e P i x e l C h a n n e l M a p %
127 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
129 % ClonePixelChannelMap() clones a pixel component map.
131 % The format of the ClonePixelChannelMap() method is:
133 % PixelChannelMap **ClonePixelChannelMap(
134 % PixelChannelMap **channel_map)
136 % A description of each parameter follows:
138 % o channel_map: the pixel component map.
141 MagickExport PixelChannelMap **ClonePixelChannelMap(
142 PixelChannelMap **channel_map)
150 assert(channel_map != (PixelChannelMap **) NULL);
151 clone_map=AcquirePixelChannelMap();
152 if (clone_map == (PixelChannelMap **) NULL)
153 return((PixelChannelMap **) NULL);
154 for (i=0; i < MaxPixelChannelMaps; i++)
155 (void) CopyMagickMemory(clone_map[i],channel_map[i],MaxPixelChannels*
156 sizeof(*channel_map[i]));
161 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
165 + C l o n e P i x e l I n f o %
169 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
171 % ClonePixelInfo() makes a duplicate of the given pixel info structure, or if
172 % pixel info is NULL, a new one.
174 % The format of the ClonePixelInfo method is:
176 % PixelInfo *ClonePixelInfo(const PixelInfo *pixel_info)
178 % A description of each parameter follows:
180 % o pixel_info: the pixel info.
183 MagickExport PixelInfo *ClonePixelInfo(const PixelInfo *pixel)
188 pixel_info=(PixelInfo *) AcquireAlignedMemory(1,sizeof(*pixel_info));
189 if (pixel_info == (PixelInfo *) NULL)
190 ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed");
191 *pixel_info=(*pixel);
196 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
200 + D e s t r o y P i x e l C h a n n e l M a p %
204 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
206 % DestroyPixelChannelMap() deallocates memory associated with the pixel
209 % The format of the DestroyPixelChannelMap() method is:
211 % PixelChannelMap **DestroyPixelChannelMap(PixelChannelMap **channel_map)
213 % A description of each parameter follows:
215 % o channel_map: the pixel component map.
218 MagickExport PixelChannelMap **DestroyPixelChannelMap(
219 PixelChannelMap **channel_map)
224 assert(channel_map != (PixelChannelMap **) NULL);
225 for (i=0; i < MaxPixelChannelMaps; i++)
226 channel_map[i]=(PixelChannelMap *) RelinquishMagickMemory(channel_map[i]);
227 return((PixelChannelMap **) RelinquishMagickMemory(channel_map));
231 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
235 % E x p o r t I m a g e P i x e l s %
239 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
241 % ExportImagePixels() extracts pixel data from an image and returns it to you.
242 % The method returns MagickTrue on success otherwise MagickFalse if an error is
243 % encountered. The data is returned as char, short int, int, ssize_t, float,
244 % or double in the order specified by map.
246 % Suppose you want to extract the first scanline of a 640x480 image as
247 % character data in red-green-blue order:
249 % ExportImagePixels(image,0,0,640,1,"RGB",CharPixel,pixels,exception);
251 % The format of the ExportImagePixels method is:
253 % MagickBooleanType ExportImagePixels(const Image *image,
254 % const ssize_t x_offset,const ssize_t y_offset,const size_t columns,
255 % const size_t rows,const char *map,const StorageType type,
256 % void *pixels,ExceptionInfo *exception)
258 % A description of each parameter follows:
260 % o image: the image.
262 % o x_offset,y_offset,columns,rows: These values define the perimeter
263 % of a region of pixels you want to extract.
265 % o map: This string reflects the expected ordering of the pixel array.
266 % It can be any combination or order of R = red, G = green, B = blue,
267 % A = alpha (0 is transparent), O = opacity (0 is opaque), C = cyan,
268 % Y = yellow, M = magenta, K = black, I = intensity (for grayscale),
271 % o type: Define the data type of the pixels. Float and double types are
272 % normalized to [0..1] otherwise [0..QuantumRange]. Choose from these
273 % types: CharPixel, DoublePixel, FloatPixel, IntegerPixel, LongPixel,
274 % QuantumPixel, or ShortPixel.
276 % o pixels: This array of values contain the pixel components as defined by
277 % map and type. You must preallocate this array where the expected
278 % length varies depending on the values of width, height, map, and type.
280 % o exception: return any errors or warnings in this structure.
283 MagickExport MagickBooleanType ExportImagePixels(const Image *image,
284 const ssize_t x_offset,const ssize_t y_offset,const size_t columns,
285 const size_t rows,const char *map,const StorageType type,void *pixels,
286 ExceptionInfo *exception)
295 register const Quantum
304 assert(image != (Image *) NULL);
305 assert(image->signature == MagickSignature);
306 if (image->debug != MagickFalse)
307 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
309 quantum_map=(QuantumType *) AcquireQuantumMemory(length,sizeof(*quantum_map));
310 if (quantum_map == (QuantumType *) NULL)
312 (void) ThrowMagickException(exception,GetMagickModule(),
313 ResourceLimitError,"MemoryAllocationFailed","`%s'",image->filename);
316 for (i=0; i < (ssize_t) length; i++)
323 quantum_map[i]=AlphaQuantum;
329 quantum_map[i]=BlueQuantum;
335 quantum_map[i]=CyanQuantum;
336 if (image->colorspace == CMYKColorspace)
338 quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
339 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
340 "ColorSeparatedImageRequired","`%s'",map);
346 quantum_map[i]=GreenQuantum;
352 quantum_map[i]=IndexQuantum;
358 quantum_map[i]=BlackQuantum;
359 if (image->colorspace == CMYKColorspace)
361 quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
362 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
363 "ColorSeparatedImageRequired","`%s'",map);
369 quantum_map[i]=MagentaQuantum;
370 if (image->colorspace == CMYKColorspace)
372 quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
373 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
374 "ColorSeparatedImageRequired","`%s'",map);
380 quantum_map[i]=OpacityQuantum;
386 quantum_map[i]=UndefinedQuantum;
392 quantum_map[i]=RedQuantum;
398 quantum_map[i]=YellowQuantum;
399 if (image->colorspace == CMYKColorspace)
401 quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
402 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
403 "ColorSeparatedImageRequired","`%s'",map);
408 quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
409 (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
410 "UnrecognizedPixelMap","`%s'",map);
419 register unsigned char
422 q=(unsigned char *) pixels;
423 if (LocaleCompare(map,"BGR") == 0)
425 for (y=0; y < (ssize_t) rows; y++)
427 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
428 if (p == (const Quantum *) NULL)
430 for (x=0; x < (ssize_t) columns; x++)
432 *q++=ScaleQuantumToChar(GetPixelBlue(image,p));
433 *q++=ScaleQuantumToChar(GetPixelGreen(image,p));
434 *q++=ScaleQuantumToChar(GetPixelRed(image,p));
435 p+=GetPixelChannels(image);
440 if (LocaleCompare(map,"BGRA") == 0)
442 for (y=0; y < (ssize_t) rows; y++)
444 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
445 if (p == (const Quantum *) NULL)
447 for (x=0; x < (ssize_t) columns; x++)
449 *q++=ScaleQuantumToChar(GetPixelBlue(image,p));
450 *q++=ScaleQuantumToChar(GetPixelGreen(image,p));
451 *q++=ScaleQuantumToChar(GetPixelRed(image,p));
452 *q++=ScaleQuantumToChar(GetPixelAlpha(image,p));
453 p+=GetPixelChannels(image);
458 if (LocaleCompare(map,"BGRP") == 0)
460 for (y=0; y < (ssize_t) rows; y++)
462 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
463 if (p == (const Quantum *) NULL)
465 for (x=0; x < (ssize_t) columns; x++)
467 *q++=ScaleQuantumToChar(GetPixelBlue(image,p));
468 *q++=ScaleQuantumToChar(GetPixelGreen(image,p));
469 *q++=ScaleQuantumToChar(GetPixelRed(image,p));
470 *q++=ScaleQuantumToChar((Quantum) 0);
471 p+=GetPixelChannels(image);
476 if (LocaleCompare(map,"I") == 0)
478 for (y=0; y < (ssize_t) rows; y++)
480 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
481 if (p == (const Quantum *) NULL)
483 for (x=0; x < (ssize_t) columns; x++)
485 *q++=ScaleQuantumToChar(GetPixelIntensity(image,p));
486 p+=GetPixelChannels(image);
491 if (LocaleCompare(map,"RGB") == 0)
493 for (y=0; y < (ssize_t) rows; y++)
495 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
496 if (p == (const Quantum *) NULL)
498 for (x=0; x < (ssize_t) columns; x++)
500 *q++=ScaleQuantumToChar(GetPixelRed(image,p));
501 *q++=ScaleQuantumToChar(GetPixelGreen(image,p));
502 *q++=ScaleQuantumToChar(GetPixelBlue(image,p));
503 p+=GetPixelChannels(image);
508 if (LocaleCompare(map,"RGBA") == 0)
510 for (y=0; y < (ssize_t) rows; y++)
512 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
513 if (p == (const Quantum *) NULL)
515 for (x=0; x < (ssize_t) columns; x++)
517 *q++=ScaleQuantumToChar(GetPixelRed(image,p));
518 *q++=ScaleQuantumToChar(GetPixelGreen(image,p));
519 *q++=ScaleQuantumToChar(GetPixelBlue(image,p));
520 *q++=ScaleQuantumToChar(GetPixelAlpha(image,p));
521 p+=GetPixelChannels(image);
526 if (LocaleCompare(map,"RGBP") == 0)
528 for (y=0; y < (ssize_t) rows; y++)
530 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
531 if (p == (const Quantum *) NULL)
533 for (x=0; x < (ssize_t) columns; x++)
535 *q++=ScaleQuantumToChar(GetPixelRed(image,p));
536 *q++=ScaleQuantumToChar(GetPixelGreen(image,p));
537 *q++=ScaleQuantumToChar(GetPixelBlue(image,p));
538 *q++=ScaleQuantumToChar((Quantum) 0);
539 p+=GetPixelChannels(image);
544 for (y=0; y < (ssize_t) rows; y++)
546 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
547 if (p == (const Quantum *) NULL)
549 for (x=0; x < (ssize_t) columns; x++)
551 for (i=0; i < (ssize_t) length; i++)
554 switch (quantum_map[i])
559 *q=ScaleQuantumToChar(GetPixelRed(image,p));
565 *q=ScaleQuantumToChar(GetPixelGreen(image,p));
571 *q=ScaleQuantumToChar(GetPixelBlue(image,p));
576 *q=ScaleQuantumToChar(GetPixelAlpha(image,p));
581 *q=ScaleQuantumToChar(GetPixelAlpha(image,p));
586 if (image->colorspace == CMYKColorspace)
587 *q=ScaleQuantumToChar(GetPixelBlack(image,p));
592 *q=ScaleQuantumToChar(GetPixelIntensity(image,p));
600 p+=GetPixelChannels(image);
611 if (LocaleCompare(map,"BGR") == 0)
613 for (y=0; y < (ssize_t) rows; y++)
615 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
616 if (p == (const Quantum *) NULL)
618 for (x=0; x < (ssize_t) columns; x++)
620 *q++=(double) (QuantumScale*GetPixelBlue(image,p));
621 *q++=(double) (QuantumScale*GetPixelGreen(image,p));
622 *q++=(double) (QuantumScale*GetPixelRed(image,p));
623 p+=GetPixelChannels(image);
628 if (LocaleCompare(map,"BGRA") == 0)
630 for (y=0; y < (ssize_t) rows; y++)
632 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
633 if (p == (const Quantum *) NULL)
635 for (x=0; x < (ssize_t) columns; x++)
637 *q++=(double) (QuantumScale*GetPixelBlue(image,p));
638 *q++=(double) (QuantumScale*GetPixelGreen(image,p));
639 *q++=(double) (QuantumScale*GetPixelRed(image,p));
640 *q++=(double) (QuantumScale*GetPixelAlpha(image,p));
641 p+=GetPixelChannels(image);
646 if (LocaleCompare(map,"BGRP") == 0)
648 for (y=0; y < (ssize_t) rows; y++)
650 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
651 if (p == (const Quantum *) NULL)
653 for (x=0; x < (ssize_t) columns; x++)
655 *q++=(double) (QuantumScale*GetPixelBlue(image,p));
656 *q++=(double) (QuantumScale*GetPixelGreen(image,p));
657 *q++=(double) (QuantumScale*GetPixelRed(image,p));
659 p+=GetPixelChannels(image);
664 if (LocaleCompare(map,"I") == 0)
666 for (y=0; y < (ssize_t) rows; y++)
668 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
669 if (p == (const Quantum *) NULL)
671 for (x=0; x < (ssize_t) columns; x++)
673 *q++=(double) (QuantumScale*GetPixelIntensity(image,p));
674 p+=GetPixelChannels(image);
679 if (LocaleCompare(map,"RGB") == 0)
681 for (y=0; y < (ssize_t) rows; y++)
683 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
684 if (p == (const Quantum *) NULL)
686 for (x=0; x < (ssize_t) columns; x++)
688 *q++=(double) (QuantumScale*GetPixelRed(image,p));
689 *q++=(double) (QuantumScale*GetPixelGreen(image,p));
690 *q++=(double) (QuantumScale*GetPixelBlue(image,p));
691 p+=GetPixelChannels(image);
696 if (LocaleCompare(map,"RGBA") == 0)
698 for (y=0; y < (ssize_t) rows; y++)
700 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
701 if (p == (const Quantum *) NULL)
703 for (x=0; x < (ssize_t) columns; x++)
705 *q++=(double) (QuantumScale*GetPixelRed(image,p));
706 *q++=(double) (QuantumScale*GetPixelGreen(image,p));
707 *q++=(double) (QuantumScale*GetPixelBlue(image,p));
708 *q++=(double) (QuantumScale*GetPixelAlpha(image,p));
709 p+=GetPixelChannels(image);
714 if (LocaleCompare(map,"RGBP") == 0)
716 for (y=0; y < (ssize_t) rows; y++)
718 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
719 if (p == (const Quantum *) NULL)
721 for (x=0; x < (ssize_t) columns; x++)
723 *q++=(double) (QuantumScale*GetPixelRed(image,p));
724 *q++=(double) (QuantumScale*GetPixelGreen(image,p));
725 *q++=(double) (QuantumScale*GetPixelBlue(image,p));
727 p+=GetPixelChannels(image);
732 for (y=0; y < (ssize_t) rows; y++)
734 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
735 if (p == (const Quantum *) NULL)
737 for (x=0; x < (ssize_t) columns; x++)
739 for (i=0; i < (ssize_t) length; i++)
742 switch (quantum_map[i])
747 *q=(double) (QuantumScale*GetPixelRed(image,p));
753 *q=(double) (QuantumScale*GetPixelGreen(image,p));
759 *q=(double) (QuantumScale*GetPixelBlue(image,p));
764 *q=(double) (QuantumScale*GetPixelAlpha(image,p));
769 *q=(double) (QuantumScale*GetPixelAlpha(image,p));
774 if (image->colorspace == CMYKColorspace)
775 *q=(double) (QuantumScale*
776 GetPixelBlack(image,p));
781 *q=(double) (QuantumScale*GetPixelIntensity(image,p));
789 p+=GetPixelChannels(image);
800 if (LocaleCompare(map,"BGR") == 0)
802 for (y=0; y < (ssize_t) rows; y++)
804 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
805 if (p == (const Quantum *) NULL)
807 for (x=0; x < (ssize_t) columns; x++)
809 *q++=(float) (QuantumScale*GetPixelBlue(image,p));
810 *q++=(float) (QuantumScale*GetPixelGreen(image,p));
811 *q++=(float) (QuantumScale*GetPixelRed(image,p));
812 p+=GetPixelChannels(image);
817 if (LocaleCompare(map,"BGRA") == 0)
819 for (y=0; y < (ssize_t) rows; y++)
821 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
822 if (p == (const Quantum *) NULL)
824 for (x=0; x < (ssize_t) columns; x++)
826 *q++=(float) (QuantumScale*GetPixelBlue(image,p));
827 *q++=(float) (QuantumScale*GetPixelGreen(image,p));
828 *q++=(float) (QuantumScale*GetPixelRed(image,p));
829 *q++=(float) (QuantumScale*GetPixelAlpha(image,p));
830 p+=GetPixelChannels(image);
835 if (LocaleCompare(map,"BGRP") == 0)
837 for (y=0; y < (ssize_t) rows; y++)
839 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
840 if (p == (const Quantum *) NULL)
842 for (x=0; x < (ssize_t) columns; x++)
844 *q++=(float) (QuantumScale*GetPixelBlue(image,p));
845 *q++=(float) (QuantumScale*GetPixelGreen(image,p));
846 *q++=(float) (QuantumScale*GetPixelRed(image,p));
848 p+=GetPixelChannels(image);
853 if (LocaleCompare(map,"I") == 0)
855 for (y=0; y < (ssize_t) rows; y++)
857 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
858 if (p == (const Quantum *) NULL)
860 for (x=0; x < (ssize_t) columns; x++)
862 *q++=(float) (QuantumScale*GetPixelIntensity(image,p));
863 p+=GetPixelChannels(image);
868 if (LocaleCompare(map,"RGB") == 0)
870 for (y=0; y < (ssize_t) rows; y++)
872 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
873 if (p == (const Quantum *) NULL)
875 for (x=0; x < (ssize_t) columns; x++)
877 *q++=(float) (QuantumScale*GetPixelRed(image,p));
878 *q++=(float) (QuantumScale*GetPixelGreen(image,p));
879 *q++=(float) (QuantumScale*GetPixelBlue(image,p));
880 p+=GetPixelChannels(image);
885 if (LocaleCompare(map,"RGBA") == 0)
887 for (y=0; y < (ssize_t) rows; y++)
889 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
890 if (p == (const Quantum *) NULL)
892 for (x=0; x < (ssize_t) columns; x++)
894 *q++=(float) (QuantumScale*GetPixelRed(image,p));
895 *q++=(float) (QuantumScale*GetPixelGreen(image,p));
896 *q++=(float) (QuantumScale*GetPixelBlue(image,p));
897 *q++=(float) (QuantumScale*GetPixelAlpha(image,p));
898 p+=GetPixelChannels(image);
903 if (LocaleCompare(map,"RGBP") == 0)
905 for (y=0; y < (ssize_t) rows; y++)
907 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
908 if (p == (const Quantum *) NULL)
910 for (x=0; x < (ssize_t) columns; x++)
912 *q++=(float) (QuantumScale*GetPixelRed(image,p));
913 *q++=(float) (QuantumScale*GetPixelGreen(image,p));
914 *q++=(float) (QuantumScale*GetPixelBlue(image,p));
916 p+=GetPixelChannels(image);
921 for (y=0; y < (ssize_t) rows; y++)
923 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
924 if (p == (const Quantum *) NULL)
926 for (x=0; x < (ssize_t) columns; x++)
928 for (i=0; i < (ssize_t) length; i++)
931 switch (quantum_map[i])
936 *q=(float) (QuantumScale*GetPixelRed(image,p));
942 *q=(float) (QuantumScale*GetPixelGreen(image,p));
948 *q=(float) (QuantumScale*GetPixelBlue(image,p));
953 *q=(float) (QuantumScale*((Quantum) (GetPixelAlpha(image,p))));
958 *q=(float) (QuantumScale*GetPixelAlpha(image,p));
963 if (image->colorspace == CMYKColorspace)
964 *q=(float) (QuantumScale* GetPixelBlack(image,p));
969 *q=(float) (QuantumScale*GetPixelIntensity(image,p));
977 p+=GetPixelChannels(image);
984 register unsigned int
987 q=(unsigned int *) pixels;
988 if (LocaleCompare(map,"BGR") == 0)
990 for (y=0; y < (ssize_t) rows; y++)
992 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
993 if (p == (const Quantum *) NULL)
995 for (x=0; x < (ssize_t) columns; x++)
997 *q++=(unsigned int) ScaleQuantumToLong(GetPixelBlue(image,p));
998 *q++=(unsigned int) ScaleQuantumToLong(GetPixelGreen(image,p));
999 *q++=(unsigned int) ScaleQuantumToLong(GetPixelRed(image,p));
1000 p+=GetPixelChannels(image);
1005 if (LocaleCompare(map,"BGRA") == 0)
1007 for (y=0; y < (ssize_t) rows; y++)
1009 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1010 if (p == (const Quantum *) NULL)
1012 for (x=0; x < (ssize_t) columns; x++)
1014 *q++=(unsigned int) ScaleQuantumToLong(GetPixelBlue(image,p));
1015 *q++=(unsigned int) ScaleQuantumToLong(GetPixelGreen(image,p));
1016 *q++=(unsigned int) ScaleQuantumToLong(GetPixelRed(image,p));
1017 *q++=(unsigned int) ScaleQuantumToLong(GetPixelAlpha(image,p));
1018 p+=GetPixelChannels(image);
1023 if (LocaleCompare(map,"BGRP") == 0)
1025 for (y=0; y < (ssize_t) rows; y++)
1027 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1028 if (p == (const Quantum *) NULL)
1030 for (x=0; x < (ssize_t) columns; x++)
1032 *q++=(unsigned int) ScaleQuantumToLong(GetPixelBlue(image,p));
1033 *q++=(unsigned int) ScaleQuantumToLong(GetPixelGreen(image,p));
1034 *q++=(unsigned int) ScaleQuantumToLong(GetPixelRed(image,p));
1036 p+=GetPixelChannels(image);
1041 if (LocaleCompare(map,"I") == 0)
1043 for (y=0; y < (ssize_t) rows; y++)
1045 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1046 if (p == (const Quantum *) NULL)
1048 for (x=0; x < (ssize_t) columns; x++)
1050 *q++=(unsigned int) ScaleQuantumToLong(
1051 GetPixelIntensity(image,p));
1052 p+=GetPixelChannels(image);
1057 if (LocaleCompare(map,"RGB") == 0)
1059 for (y=0; y < (ssize_t) rows; y++)
1061 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1062 if (p == (const Quantum *) NULL)
1064 for (x=0; x < (ssize_t) columns; x++)
1066 *q++=(unsigned int) ScaleQuantumToLong(GetPixelRed(image,p));
1067 *q++=(unsigned int) ScaleQuantumToLong(GetPixelGreen(image,p));
1068 *q++=(unsigned int) ScaleQuantumToLong(GetPixelBlue(image,p));
1069 p+=GetPixelChannels(image);
1074 if (LocaleCompare(map,"RGBA") == 0)
1076 for (y=0; y < (ssize_t) rows; y++)
1078 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1079 if (p == (const Quantum *) NULL)
1081 for (x=0; x < (ssize_t) columns; x++)
1083 *q++=(unsigned int) ScaleQuantumToLong(GetPixelRed(image,p));
1084 *q++=(unsigned int) ScaleQuantumToLong(GetPixelGreen(image,p));
1085 *q++=(unsigned int) ScaleQuantumToLong(GetPixelBlue(image,p));
1086 *q++=(unsigned int) ScaleQuantumToLong(GetPixelAlpha(image,p));
1087 p+=GetPixelChannels(image);
1092 if (LocaleCompare(map,"RGBP") == 0)
1094 for (y=0; y < (ssize_t) rows; y++)
1096 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1097 if (p == (const Quantum *) NULL)
1099 for (x=0; x < (ssize_t) columns; x++)
1101 *q++=(unsigned int) ScaleQuantumToLong(GetPixelRed(image,p));
1102 *q++=(unsigned int) ScaleQuantumToLong(GetPixelGreen(image,p));
1103 *q++=(unsigned int) ScaleQuantumToLong(GetPixelBlue(image,p));
1105 p+=GetPixelChannels(image);
1110 for (y=0; y < (ssize_t) rows; y++)
1112 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1113 if (p == (const Quantum *) NULL)
1115 for (x=0; x < (ssize_t) columns; x++)
1117 for (i=0; i < (ssize_t) length; i++)
1120 switch (quantum_map[i])
1125 *q=(unsigned int) ScaleQuantumToLong(GetPixelRed(image,p));
1129 case MagentaQuantum:
1131 *q=(unsigned int) ScaleQuantumToLong(GetPixelGreen(image,p));
1137 *q=(unsigned int) ScaleQuantumToLong(GetPixelBlue(image,p));
1142 *q=(unsigned int) ScaleQuantumToLong(GetPixelAlpha(image,p));
1145 case OpacityQuantum:
1147 *q=(unsigned int) ScaleQuantumToLong(GetPixelAlpha(image,p));
1152 if (image->colorspace == CMYKColorspace)
1153 *q=(unsigned int) ScaleQuantumToLong(GetPixelBlack(image,p));
1158 *q=(unsigned int) ScaleQuantumToLong(
1159 GetPixelIntensity(image,p));
1167 p+=GetPixelChannels(image);
1177 q=(size_t *) pixels;
1178 if (LocaleCompare(map,"BGR") == 0)
1180 for (y=0; y < (ssize_t) rows; y++)
1182 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1183 if (p == (const Quantum *) NULL)
1185 for (x=0; x < (ssize_t) columns; x++)
1187 *q++=ScaleQuantumToLong(GetPixelBlue(image,p));
1188 *q++=ScaleQuantumToLong(GetPixelGreen(image,p));
1189 *q++=ScaleQuantumToLong(GetPixelRed(image,p));
1190 p+=GetPixelChannels(image);
1195 if (LocaleCompare(map,"BGRA") == 0)
1197 for (y=0; y < (ssize_t) rows; y++)
1199 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1200 if (p == (const Quantum *) NULL)
1202 for (x=0; x < (ssize_t) columns; x++)
1204 *q++=ScaleQuantumToLong(GetPixelBlue(image,p));
1205 *q++=ScaleQuantumToLong(GetPixelGreen(image,p));
1206 *q++=ScaleQuantumToLong(GetPixelRed(image,p));
1207 *q++=ScaleQuantumToLong(GetPixelAlpha(image,p));
1208 p+=GetPixelChannels(image);
1213 if (LocaleCompare(map,"BGRP") == 0)
1215 for (y=0; y < (ssize_t) rows; y++)
1217 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1218 if (p == (const Quantum *) NULL)
1220 for (x=0; x < (ssize_t) columns; x++)
1222 *q++=ScaleQuantumToLong(GetPixelBlue(image,p));
1223 *q++=ScaleQuantumToLong(GetPixelGreen(image,p));
1224 *q++=ScaleQuantumToLong(GetPixelRed(image,p));
1226 p+=GetPixelChannels(image);
1231 if (LocaleCompare(map,"I") == 0)
1233 for (y=0; y < (ssize_t) rows; y++)
1235 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1236 if (p == (const Quantum *) NULL)
1238 for (x=0; x < (ssize_t) columns; x++)
1240 *q++=ScaleQuantumToLong(GetPixelIntensity(image,p));
1241 p+=GetPixelChannels(image);
1246 if (LocaleCompare(map,"RGB") == 0)
1248 for (y=0; y < (ssize_t) rows; y++)
1250 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1251 if (p == (const Quantum *) NULL)
1253 for (x=0; x < (ssize_t) columns; x++)
1255 *q++=ScaleQuantumToLong(GetPixelRed(image,p));
1256 *q++=ScaleQuantumToLong(GetPixelGreen(image,p));
1257 *q++=ScaleQuantumToLong(GetPixelBlue(image,p));
1258 p+=GetPixelChannels(image);
1263 if (LocaleCompare(map,"RGBA") == 0)
1265 for (y=0; y < (ssize_t) rows; y++)
1267 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1268 if (p == (const Quantum *) NULL)
1270 for (x=0; x < (ssize_t) columns; x++)
1272 *q++=ScaleQuantumToLong(GetPixelRed(image,p));
1273 *q++=ScaleQuantumToLong(GetPixelGreen(image,p));
1274 *q++=ScaleQuantumToLong(GetPixelBlue(image,p));
1275 *q++=ScaleQuantumToLong(GetPixelAlpha(image,p));
1276 p+=GetPixelChannels(image);
1281 if (LocaleCompare(map,"RGBP") == 0)
1283 for (y=0; y < (ssize_t) rows; y++)
1285 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1286 if (p == (const Quantum *) NULL)
1288 for (x=0; x < (ssize_t) columns; x++)
1290 *q++=ScaleQuantumToLong(GetPixelRed(image,p));
1291 *q++=ScaleQuantumToLong(GetPixelGreen(image,p));
1292 *q++=ScaleQuantumToLong(GetPixelBlue(image,p));
1294 p+=GetPixelChannels(image);
1299 for (y=0; y < (ssize_t) rows; y++)
1301 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1302 if (p == (const Quantum *) NULL)
1304 for (x=0; x < (ssize_t) columns; x++)
1306 for (i=0; i < (ssize_t) length; i++)
1309 switch (quantum_map[i])
1314 *q=ScaleQuantumToLong(GetPixelRed(image,p));
1318 case MagentaQuantum:
1320 *q=ScaleQuantumToLong(GetPixelGreen(image,p));
1326 *q=ScaleQuantumToLong(GetPixelBlue(image,p));
1331 *q=ScaleQuantumToLong(GetPixelAlpha(image,p));
1334 case OpacityQuantum:
1336 *q=ScaleQuantumToLong(GetPixelAlpha(image,p));
1341 if (image->colorspace == CMYKColorspace)
1342 *q=ScaleQuantumToLong(GetPixelBlack(image,p));
1347 *q=ScaleQuantumToLong(GetPixelIntensity(image,p));
1355 p+=GetPixelChannels(image);
1365 q=(Quantum *) pixels;
1366 if (LocaleCompare(map,"BGR") == 0)
1368 for (y=0; y < (ssize_t) rows; y++)
1370 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1371 if (p == (const Quantum *) NULL)
1373 for (x=0; x < (ssize_t) columns; x++)
1375 *q++=GetPixelBlue(image,p);
1376 *q++=GetPixelGreen(image,p);
1377 *q++=GetPixelRed(image,p);
1378 p+=GetPixelChannels(image);
1383 if (LocaleCompare(map,"BGRA") == 0)
1385 for (y=0; y < (ssize_t) rows; y++)
1387 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1388 if (p == (const Quantum *) NULL)
1390 for (x=0; x < (ssize_t) columns; x++)
1392 *q++=GetPixelBlue(image,p);
1393 *q++=GetPixelGreen(image,p);
1394 *q++=GetPixelRed(image,p);
1395 *q++=(Quantum) (GetPixelAlpha(image,p));
1396 p+=GetPixelChannels(image);
1401 if (LocaleCompare(map,"BGRP") == 0)
1403 for (y=0; y < (ssize_t) rows; y++)
1405 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1406 if (p == (const Quantum *) NULL)
1408 for (x=0; x < (ssize_t) columns; x++)
1410 *q++=GetPixelBlue(image,p);
1411 *q++=GetPixelGreen(image,p);
1412 *q++=GetPixelRed(image,p);
1414 p+=GetPixelChannels(image);
1419 if (LocaleCompare(map,"I") == 0)
1421 for (y=0; y < (ssize_t) rows; y++)
1423 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1424 if (p == (const Quantum *) NULL)
1426 for (x=0; x < (ssize_t) columns; x++)
1428 *q++=GetPixelIntensity(image,p);
1429 p+=GetPixelChannels(image);
1434 if (LocaleCompare(map,"RGB") == 0)
1436 for (y=0; y < (ssize_t) rows; y++)
1438 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1439 if (p == (const Quantum *) NULL)
1441 for (x=0; x < (ssize_t) columns; x++)
1443 *q++=GetPixelRed(image,p);
1444 *q++=GetPixelGreen(image,p);
1445 *q++=GetPixelBlue(image,p);
1446 p+=GetPixelChannels(image);
1451 if (LocaleCompare(map,"RGBA") == 0)
1453 for (y=0; y < (ssize_t) rows; y++)
1455 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1456 if (p == (const Quantum *) NULL)
1458 for (x=0; x < (ssize_t) columns; x++)
1460 *q++=GetPixelRed(image,p);
1461 *q++=GetPixelGreen(image,p);
1462 *q++=GetPixelBlue(image,p);
1463 *q++=(Quantum) (GetPixelAlpha(image,p));
1464 p+=GetPixelChannels(image);
1469 if (LocaleCompare(map,"RGBP") == 0)
1471 for (y=0; y < (ssize_t) rows; y++)
1473 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1474 if (p == (const Quantum *) NULL)
1476 for (x=0; x < (ssize_t) columns; x++)
1478 *q++=GetPixelRed(image,p);
1479 *q++=GetPixelGreen(image,p);
1480 *q++=GetPixelBlue(image,p);
1482 p+=GetPixelChannels(image);
1487 for (y=0; y < (ssize_t) rows; y++)
1489 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1490 if (p == (const Quantum *) NULL)
1492 for (x=0; x < (ssize_t) columns; x++)
1494 for (i=0; i < (ssize_t) length; i++)
1497 switch (quantum_map[i])
1502 *q=GetPixelRed(image,p);
1506 case MagentaQuantum:
1508 *q=GetPixelGreen(image,p);
1514 *q=GetPixelBlue(image,p);
1519 *q=(Quantum) (GetPixelAlpha(image,p));
1522 case OpacityQuantum:
1524 *q=GetPixelAlpha(image,p);
1529 if (image->colorspace == CMYKColorspace)
1530 *q=GetPixelBlack(image,p);
1535 *q=(GetPixelIntensity(image,p));
1543 p+=GetPixelChannels(image);
1550 register unsigned short
1553 q=(unsigned short *) pixels;
1554 if (LocaleCompare(map,"BGR") == 0)
1556 for (y=0; y < (ssize_t) rows; y++)
1558 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1559 if (p == (const Quantum *) NULL)
1561 for (x=0; x < (ssize_t) columns; x++)
1563 *q++=ScaleQuantumToShort(GetPixelBlue(image,p));
1564 *q++=ScaleQuantumToShort(GetPixelGreen(image,p));
1565 *q++=ScaleQuantumToShort(GetPixelRed(image,p));
1566 p+=GetPixelChannels(image);
1571 if (LocaleCompare(map,"BGRA") == 0)
1573 for (y=0; y < (ssize_t) rows; y++)
1575 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1576 if (p == (const Quantum *) NULL)
1578 for (x=0; x < (ssize_t) columns; x++)
1580 *q++=ScaleQuantumToShort(GetPixelBlue(image,p));
1581 *q++=ScaleQuantumToShort(GetPixelGreen(image,p));
1582 *q++=ScaleQuantumToShort(GetPixelRed(image,p));
1583 *q++=ScaleQuantumToShort(GetPixelAlpha(image,p));
1584 p+=GetPixelChannels(image);
1589 if (LocaleCompare(map,"BGRP") == 0)
1591 for (y=0; y < (ssize_t) rows; y++)
1593 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1594 if (p == (const Quantum *) NULL)
1596 for (x=0; x < (ssize_t) columns; x++)
1598 *q++=ScaleQuantumToShort(GetPixelBlue(image,p));
1599 *q++=ScaleQuantumToShort(GetPixelGreen(image,p));
1600 *q++=ScaleQuantumToShort(GetPixelRed(image,p));
1602 p+=GetPixelChannels(image);
1607 if (LocaleCompare(map,"I") == 0)
1609 for (y=0; y < (ssize_t) rows; y++)
1611 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1612 if (p == (const Quantum *) NULL)
1614 for (x=0; x < (ssize_t) columns; x++)
1616 *q++=ScaleQuantumToShort(GetPixelIntensity(image,p));
1617 p+=GetPixelChannels(image);
1622 if (LocaleCompare(map,"RGB") == 0)
1624 for (y=0; y < (ssize_t) rows; y++)
1626 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1627 if (p == (const Quantum *) NULL)
1629 for (x=0; x < (ssize_t) columns; x++)
1631 *q++=ScaleQuantumToShort(GetPixelRed(image,p));
1632 *q++=ScaleQuantumToShort(GetPixelGreen(image,p));
1633 *q++=ScaleQuantumToShort(GetPixelBlue(image,p));
1634 p+=GetPixelChannels(image);
1639 if (LocaleCompare(map,"RGBA") == 0)
1641 for (y=0; y < (ssize_t) rows; y++)
1643 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1644 if (p == (const Quantum *) NULL)
1646 for (x=0; x < (ssize_t) columns; x++)
1648 *q++=ScaleQuantumToShort(GetPixelRed(image,p));
1649 *q++=ScaleQuantumToShort(GetPixelGreen(image,p));
1650 *q++=ScaleQuantumToShort(GetPixelBlue(image,p));
1651 *q++=ScaleQuantumToShort(GetPixelAlpha(image,p));
1652 p+=GetPixelChannels(image);
1657 if (LocaleCompare(map,"RGBP") == 0)
1659 for (y=0; y < (ssize_t) rows; y++)
1661 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1662 if (p == (const Quantum *) NULL)
1664 for (x=0; x < (ssize_t) columns; x++)
1666 *q++=ScaleQuantumToShort(GetPixelRed(image,p));
1667 *q++=ScaleQuantumToShort(GetPixelGreen(image,p));
1668 *q++=ScaleQuantumToShort(GetPixelBlue(image,p));
1670 p+=GetPixelChannels(image);
1675 for (y=0; y < (ssize_t) rows; y++)
1677 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1678 if (p == (const Quantum *) NULL)
1680 for (x=0; x < (ssize_t) columns; x++)
1682 for (i=0; i < (ssize_t) length; i++)
1685 switch (quantum_map[i])
1690 *q=ScaleQuantumToShort(GetPixelRed(image,p));
1694 case MagentaQuantum:
1696 *q=ScaleQuantumToShort(GetPixelGreen(image,p));
1702 *q=ScaleQuantumToShort(GetPixelBlue(image,p));
1707 *q=ScaleQuantumToShort(GetPixelAlpha(image,p));
1710 case OpacityQuantum:
1712 *q=ScaleQuantumToShort(GetPixelAlpha(image,p));
1717 if (image->colorspace == CMYKColorspace)
1718 *q=ScaleQuantumToShort(GetPixelBlack(image,p));
1723 *q=ScaleQuantumToShort(GetPixelIntensity(image,p));
1731 p+=GetPixelChannels(image);
1738 quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
1739 (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
1740 "UnrecognizedPixelMap","`%s'",map);
1744 quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
1749 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1753 % G e t M a g i c k P i x e l P a c k e t %
1757 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1759 % GetPixelInfo() initializes the PixelInfo structure.
1761 % The format of the GetPixelInfo method is:
1763 % GetPixelInfo(const Image *image,PixelInfo *pixel)
1765 % A description of each parameter follows:
1767 % o image: the image.
1769 % o pixel: Specifies a pointer to a PixelPacket structure.
1772 MagickExport void GetPixelInfo(const Image *image,
1775 pixel->storage_class=DirectClass;
1776 pixel->colorspace=RGBColorspace;
1777 pixel->matte=MagickFalse;
1779 pixel->depth=MAGICKCORE_QUANTUM_DEPTH;
1784 pixel->alpha=(MagickRealType) OpaqueAlpha;
1786 if (image == (const Image *) NULL)
1788 pixel->storage_class=image->storage_class;
1789 pixel->colorspace=image->colorspace;
1790 pixel->matte=image->matte;
1791 pixel->depth=image->depth;
1792 pixel->fuzz=image->fuzz;
1796 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1800 % I m p o r t I m a g e P i x e l s %
1804 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1806 % ImportImagePixels() accepts pixel data and stores in the image at the
1807 % location you specify. The method returns MagickTrue on success otherwise
1808 % MagickFalse if an error is encountered. The pixel data can be either char,
1809 % short int, int, ssize_t, float, or double in the order specified by map.
1811 % Suppose your want to upload the first scanline of a 640x480 image from
1812 % character data in red-green-blue order:
1814 % ImportImagePixels(image,0,0,640,1,"RGB",CharPixel,pixels);
1816 % The format of the ImportImagePixels method is:
1818 % MagickBooleanType ImportImagePixels(Image *image,const ssize_t x_offset,
1819 % const ssize_t y_offset,const size_t columns,
1820 % const size_t rows,const char *map,const StorageType type,
1821 % const void *pixels)
1823 % A description of each parameter follows:
1825 % o image: the image.
1827 % o x_offset,y_offset,columns,rows: These values define the perimeter
1828 % of a region of pixels you want to define.
1830 % o map: This string reflects the expected ordering of the pixel array.
1831 % It can be any combination or order of R = red, G = green, B = blue,
1832 % A = alpha (0 is transparent), O = opacity (0 is opaque), C = cyan,
1833 % Y = yellow, M = magenta, K = black, I = intensity (for grayscale),
1836 % o type: Define the data type of the pixels. Float and double types are
1837 % normalized to [0..1] otherwise [0..QuantumRange]. Choose from these
1838 % types: CharPixel, ShortPixel, IntegerPixel, LongPixel, FloatPixel, or
1841 % o pixels: This array of values contain the pixel components as defined by
1842 % map and type. You must preallocate this array where the expected
1843 % length varies depending on the values of width, height, map, and type.
1846 MagickExport MagickBooleanType ImportImagePixels(Image *image,
1847 const ssize_t x_offset,const ssize_t y_offset,const size_t columns,
1848 const size_t rows,const char *map,const StorageType type,
1871 Allocate image structure.
1873 assert(image != (Image *) NULL);
1874 assert(image->signature == MagickSignature);
1875 if (image->debug != MagickFalse)
1876 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
1878 quantum_map=(QuantumType *) AcquireQuantumMemory(length,sizeof(*quantum_map));
1879 if (quantum_map == (QuantumType *) NULL)
1880 ThrowBinaryException(ResourceLimitError,"MemoryAllocationFailed",
1882 for (i=0; i < (ssize_t) length; i++)
1889 quantum_map[i]=AlphaQuantum;
1890 image->matte=MagickTrue;
1896 quantum_map[i]=BlueQuantum;
1902 quantum_map[i]=CyanQuantum;
1903 (void) SetImageColorspace(image,CMYKColorspace);
1909 quantum_map[i]=GreenQuantum;
1915 quantum_map[i]=BlackQuantum;
1916 (void) SetImageColorspace(image,CMYKColorspace);
1922 quantum_map[i]=IndexQuantum;
1928 quantum_map[i]=MagentaQuantum;
1929 (void) SetImageColorspace(image,CMYKColorspace);
1935 quantum_map[i]=OpacityQuantum;
1936 image->matte=MagickTrue;
1942 quantum_map[i]=UndefinedQuantum;
1948 quantum_map[i]=RedQuantum;
1954 quantum_map[i]=YellowQuantum;
1955 (void) SetImageColorspace(image,CMYKColorspace);
1960 quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
1961 (void) ThrowMagickException(&image->exception,GetMagickModule(),
1962 OptionError,"UnrecognizedPixelMap","`%s'",map);
1963 return(MagickFalse);
1967 if (SetImageStorageClass(image,DirectClass) == MagickFalse)
1968 return(MagickFalse);
1970 Transfer the pixels from the pixel datarray to the image.
1972 exception=(&image->exception);
1977 register const unsigned char
1980 p=(const unsigned char *) pixels;
1981 if (LocaleCompare(map,"BGR") == 0)
1983 for (y=0; y < (ssize_t) rows; y++)
1985 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
1986 if (q == (Quantum *) NULL)
1988 for (x=0; x < (ssize_t) columns; x++)
1990 SetPixelBlue(image,ScaleCharToQuantum(*p++),q);
1991 SetPixelGreen(image,ScaleCharToQuantum(*p++),q);
1992 SetPixelRed(image,ScaleCharToQuantum(*p++),q);
1993 q+=GetPixelChannels(image);
1995 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2000 if (LocaleCompare(map,"BGRA") == 0)
2002 for (y=0; y < (ssize_t) rows; y++)
2004 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2005 if (q == (Quantum *) NULL)
2007 for (x=0; x < (ssize_t) columns; x++)
2009 SetPixelBlue(image,ScaleCharToQuantum(*p++),q);
2010 SetPixelGreen(image,ScaleCharToQuantum(*p++),q);
2011 SetPixelRed(image,ScaleCharToQuantum(*p++),q);
2012 SetPixelAlpha(image,ScaleCharToQuantum(*p++),q);
2013 q+=GetPixelChannels(image);
2015 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2020 if (LocaleCompare(map,"BGRO") == 0)
2022 for (y=0; y < (ssize_t) rows; y++)
2024 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2025 if (q == (Quantum *) NULL)
2027 for (x=0; x < (ssize_t) columns; x++)
2029 SetPixelBlue(image,ScaleCharToQuantum(*p++),q);
2030 SetPixelGreen(image,ScaleCharToQuantum(*p++),q);
2031 SetPixelRed(image,ScaleCharToQuantum(*p++),q);
2032 SetPixelAlpha(image,ScaleCharToQuantum(*p++),q);
2033 q+=GetPixelChannels(image);
2035 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2040 if (LocaleCompare(map,"BGRP") == 0)
2042 for (y=0; y < (ssize_t) rows; y++)
2044 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2045 if (q == (Quantum *) NULL)
2047 for (x=0; x < (ssize_t) columns; x++)
2049 SetPixelBlue(image,ScaleCharToQuantum(*p++),q);
2050 SetPixelGreen(image,ScaleCharToQuantum(*p++),q);
2051 SetPixelRed(image,ScaleCharToQuantum(*p++),q);
2053 q+=GetPixelChannels(image);
2055 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2060 if (LocaleCompare(map,"I") == 0)
2062 for (y=0; y < (ssize_t) rows; y++)
2064 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2065 if (q == (Quantum *) NULL)
2067 for (x=0; x < (ssize_t) columns; x++)
2069 SetPixelRed(image,ScaleCharToQuantum(*p++),q);
2070 SetPixelGreen(image,GetPixelRed(image,q),q);
2071 SetPixelBlue(image,GetPixelRed(image,q),q);
2072 q+=GetPixelChannels(image);
2074 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2079 if (LocaleCompare(map,"RGB") == 0)
2081 for (y=0; y < (ssize_t) rows; y++)
2083 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2084 if (q == (Quantum *) NULL)
2086 for (x=0; x < (ssize_t) columns; x++)
2088 SetPixelRed(image,ScaleCharToQuantum(*p++),q);
2089 SetPixelGreen(image,ScaleCharToQuantum(*p++),q);
2090 SetPixelBlue(image,ScaleCharToQuantum(*p++),q);
2091 q+=GetPixelChannels(image);
2093 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2098 if (LocaleCompare(map,"RGBA") == 0)
2100 for (y=0; y < (ssize_t) rows; y++)
2102 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2103 if (q == (Quantum *) NULL)
2105 for (x=0; x < (ssize_t) columns; x++)
2107 SetPixelRed(image,ScaleCharToQuantum(*p++),q);
2108 SetPixelGreen(image,ScaleCharToQuantum(*p++),q);
2109 SetPixelBlue(image,ScaleCharToQuantum(*p++),q);
2110 SetPixelAlpha(image,ScaleCharToQuantum(*p++),q);
2111 q+=GetPixelChannels(image);
2113 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2118 if (LocaleCompare(map,"RGBO") == 0)
2120 for (y=0; y < (ssize_t) rows; y++)
2122 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2123 if (q == (Quantum *) NULL)
2125 for (x=0; x < (ssize_t) columns; x++)
2127 SetPixelRed(image,ScaleCharToQuantum(*p++),q);
2128 SetPixelGreen(image,ScaleCharToQuantum(*p++),q);
2129 SetPixelBlue(image,ScaleCharToQuantum(*p++),q);
2130 SetPixelAlpha(image,ScaleCharToQuantum(*p++),q);
2131 q+=GetPixelChannels(image);
2133 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2138 if (LocaleCompare(map,"RGBP") == 0)
2140 for (y=0; y < (ssize_t) rows; y++)
2142 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2143 if (q == (Quantum *) NULL)
2145 for (x=0; x < (ssize_t) columns; x++)
2147 SetPixelRed(image,ScaleCharToQuantum(*p++),q);
2148 SetPixelGreen(image,ScaleCharToQuantum(*p++),q);
2149 SetPixelBlue(image,ScaleCharToQuantum(*p++),q);
2151 q+=GetPixelChannels(image);
2153 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2158 for (y=0; y < (ssize_t) rows; y++)
2160 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2161 if (q == (Quantum *) NULL)
2163 for (x=0; x < (ssize_t) columns; x++)
2165 for (i=0; i < (ssize_t) length; i++)
2167 switch (quantum_map[i])
2172 SetPixelRed(image,ScaleCharToQuantum(*p),q);
2176 case MagentaQuantum:
2178 SetPixelGreen(image,ScaleCharToQuantum(*p),q);
2184 SetPixelBlue(image,ScaleCharToQuantum(*p),q);
2189 SetPixelAlpha(image,ScaleCharToQuantum(*p),q);
2192 case OpacityQuantum:
2194 SetPixelAlpha(image,ScaleCharToQuantum(*p),q);
2199 SetPixelBlack(image,ScaleCharToQuantum(*p),q);
2204 SetPixelRed(image,ScaleCharToQuantum(*p),q);
2205 SetPixelGreen(image,GetPixelRed(image,q),q);
2206 SetPixelBlue(image,GetPixelRed(image,q),q);
2214 q+=GetPixelChannels(image);
2216 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2223 register const double
2226 p=(const double *) pixels;
2227 if (LocaleCompare(map,"BGR") == 0)
2229 for (y=0; y < (ssize_t) rows; y++)
2231 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2232 if (q == (Quantum *) NULL)
2234 for (x=0; x < (ssize_t) columns; x++)
2236 SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
2239 SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
2242 SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
2245 q+=GetPixelChannels(image);
2247 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2252 if (LocaleCompare(map,"BGRA") == 0)
2254 for (y=0; y < (ssize_t) rows; y++)
2256 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2257 if (q == (Quantum *) NULL)
2259 for (x=0; x < (ssize_t) columns; x++)
2261 SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
2264 SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
2267 SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
2270 SetPixelAlpha(image,ClampToQuantum((MagickRealType) QuantumRange*
2273 q+=GetPixelChannels(image);
2275 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2280 if (LocaleCompare(map,"BGRP") == 0)
2282 for (y=0; y < (ssize_t) rows; y++)
2284 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2285 if (q == (Quantum *) NULL)
2287 for (x=0; x < (ssize_t) columns; x++)
2289 SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
2292 SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
2295 SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
2299 q+=GetPixelChannels(image);
2301 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2306 if (LocaleCompare(map,"I") == 0)
2308 for (y=0; y < (ssize_t) rows; y++)
2310 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2311 if (q == (Quantum *) NULL)
2313 for (x=0; x < (ssize_t) columns; x++)
2315 SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
2317 SetPixelGreen(image,GetPixelRed(image,q),q);
2318 SetPixelBlue(image,GetPixelRed(image,q),q);
2320 q+=GetPixelChannels(image);
2322 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2327 if (LocaleCompare(map,"RGB") == 0)
2329 for (y=0; y < (ssize_t) rows; y++)
2331 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2332 if (q == (Quantum *) NULL)
2334 for (x=0; x < (ssize_t) columns; x++)
2336 SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
2339 SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
2342 SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
2345 q+=GetPixelChannels(image);
2347 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2352 if (LocaleCompare(map,"RGBA") == 0)
2354 for (y=0; y < (ssize_t) rows; y++)
2356 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2357 if (q == (Quantum *) NULL)
2359 for (x=0; x < (ssize_t) columns; x++)
2361 SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
2364 SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
2367 SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
2370 SetPixelAlpha(image,ClampToQuantum((MagickRealType) QuantumRange*
2373 q+=GetPixelChannels(image);
2375 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2380 if (LocaleCompare(map,"RGBP") == 0)
2382 for (y=0; y < (ssize_t) rows; y++)
2384 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2385 if (q == (Quantum *) NULL)
2387 for (x=0; x < (ssize_t) columns; x++)
2389 SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
2392 SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
2395 SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
2398 q+=GetPixelChannels(image);
2400 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2405 for (y=0; y < (ssize_t) rows; y++)
2407 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2408 if (q == (Quantum *) NULL)
2410 for (x=0; x < (ssize_t) columns; x++)
2412 for (i=0; i < (ssize_t) length; i++)
2414 switch (quantum_map[i])
2419 SetPixelRed(image,ClampToQuantum((MagickRealType)
2420 QuantumRange*(*p)),q);
2424 case MagentaQuantum:
2426 SetPixelGreen(image,ClampToQuantum((MagickRealType)
2427 QuantumRange*(*p)),q);
2433 SetPixelBlue(image,ClampToQuantum((MagickRealType)
2434 QuantumRange*(*p)),q);
2439 SetPixelAlpha(image,ClampToQuantum((MagickRealType)
2440 QuantumRange*(*p)),q);
2443 case OpacityQuantum:
2445 SetPixelAlpha(image,ClampToQuantum((MagickRealType)
2446 QuantumRange*(*p)),q);
2451 SetPixelBlack(image,ClampToQuantum((MagickRealType)
2452 QuantumRange*(*p)),q);
2457 SetPixelRed(image,ClampToQuantum((MagickRealType)
2458 QuantumRange*(*p)),q);
2459 SetPixelGreen(image,GetPixelRed(image,q),q);
2460 SetPixelBlue(image,GetPixelRed(image,q),q);
2468 q+=GetPixelChannels(image);
2470 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2477 register const float
2480 p=(const float *) pixels;
2481 if (LocaleCompare(map,"BGR") == 0)
2483 for (y=0; y < (ssize_t) rows; y++)
2485 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2486 if (q == (Quantum *) NULL)
2488 for (x=0; x < (ssize_t) columns; x++)
2490 SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
2493 SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
2496 SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
2499 q+=GetPixelChannels(image);
2501 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2506 if (LocaleCompare(map,"BGRA") == 0)
2508 for (y=0; y < (ssize_t) rows; y++)
2510 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2511 if (q == (Quantum *) NULL)
2513 for (x=0; x < (ssize_t) columns; x++)
2515 SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
2518 SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
2521 SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
2524 SetPixelAlpha(image,ClampToQuantum((MagickRealType) QuantumRange*
2527 q+=GetPixelChannels(image);
2529 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2534 if (LocaleCompare(map,"BGRP") == 0)
2536 for (y=0; y < (ssize_t) rows; y++)
2538 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2539 if (q == (Quantum *) NULL)
2541 for (x=0; x < (ssize_t) columns; x++)
2543 SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
2546 SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
2549 SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
2553 q+=GetPixelChannels(image);
2555 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2560 if (LocaleCompare(map,"I") == 0)
2562 for (y=0; y < (ssize_t) rows; y++)
2564 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2565 if (q == (Quantum *) NULL)
2567 for (x=0; x < (ssize_t) columns; x++)
2569 SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
2571 SetPixelGreen(image,GetPixelRed(image,q),q);
2572 SetPixelBlue(image,GetPixelRed(image,q),q);
2574 q+=GetPixelChannels(image);
2576 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2581 if (LocaleCompare(map,"RGB") == 0)
2583 for (y=0; y < (ssize_t) rows; y++)
2585 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2586 if (q == (Quantum *) NULL)
2588 for (x=0; x < (ssize_t) columns; x++)
2590 SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
2593 SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
2596 SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
2599 q+=GetPixelChannels(image);
2601 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2606 if (LocaleCompare(map,"RGBA") == 0)
2608 for (y=0; y < (ssize_t) rows; y++)
2610 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2611 if (q == (Quantum *) NULL)
2613 for (x=0; x < (ssize_t) columns; x++)
2615 SetPixelRed(image,ClampToQuantum((MagickRealType)
2616 QuantumRange*(*p)),q);
2618 SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
2621 SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
2624 SetPixelAlpha(image,ClampToQuantum((MagickRealType) QuantumRange*
2627 q+=GetPixelChannels(image);
2629 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2634 if (LocaleCompare(map,"RGBP") == 0)
2636 for (y=0; y < (ssize_t) rows; y++)
2638 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2639 if (q == (Quantum *) NULL)
2641 for (x=0; x < (ssize_t) columns; x++)
2643 SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
2646 SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
2649 SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
2652 q+=GetPixelChannels(image);
2654 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2659 for (y=0; y < (ssize_t) rows; y++)
2661 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2662 if (q == (Quantum *) NULL)
2664 for (x=0; x < (ssize_t) columns; x++)
2666 for (i=0; i < (ssize_t) length; i++)
2668 switch (quantum_map[i])
2673 SetPixelRed(image,ClampToQuantum((MagickRealType)
2674 QuantumRange*(*p)),q);
2678 case MagentaQuantum:
2680 SetPixelGreen(image,ClampToQuantum((MagickRealType)
2681 QuantumRange*(*p)),q);
2687 SetPixelBlue(image,ClampToQuantum((MagickRealType)
2688 QuantumRange*(*p)),q);
2693 SetPixelAlpha(image,ClampToQuantum((MagickRealType)
2694 QuantumRange*(*p)),q);
2697 case OpacityQuantum:
2699 SetPixelAlpha(image,ClampToQuantum((MagickRealType)
2700 QuantumRange*(*p)),q);
2705 SetPixelBlack(image,ClampToQuantum((MagickRealType)
2706 QuantumRange*(*p)),q);
2711 SetPixelRed(image,ClampToQuantum((MagickRealType)
2712 QuantumRange*(*p)),q);
2713 SetPixelGreen(image,GetPixelRed(image,q),q);
2714 SetPixelBlue(image,GetPixelRed(image,q),q);
2722 q+=GetPixelChannels(image);
2724 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2731 register const unsigned int
2734 p=(const unsigned int *) pixels;
2735 if (LocaleCompare(map,"BGR") == 0)
2737 for (y=0; y < (ssize_t) rows; y++)
2739 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2740 if (q == (Quantum *) NULL)
2742 for (x=0; x < (ssize_t) columns; x++)
2744 SetPixelBlue(image,ScaleLongToQuantum(*p++),q);
2745 SetPixelGreen(image,ScaleLongToQuantum(*p++),q);
2746 SetPixelRed(image,ScaleLongToQuantum(*p++),q);
2747 q+=GetPixelChannels(image);
2749 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2754 if (LocaleCompare(map,"BGRA") == 0)
2756 for (y=0; y < (ssize_t) rows; y++)
2758 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2759 if (q == (Quantum *) NULL)
2761 for (x=0; x < (ssize_t) columns; x++)
2763 SetPixelBlue(image,ScaleLongToQuantum(*p++),q);
2764 SetPixelGreen(image,ScaleLongToQuantum(*p++),q);
2765 SetPixelRed(image,ScaleLongToQuantum(*p++),q);
2766 SetPixelAlpha(image,ScaleLongToQuantum(*p++),q);
2767 q+=GetPixelChannels(image);
2769 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2774 if (LocaleCompare(map,"BGRP") == 0)
2776 for (y=0; y < (ssize_t) rows; y++)
2778 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2779 if (q == (Quantum *) NULL)
2781 for (x=0; x < (ssize_t) columns; x++)
2783 SetPixelBlue(image,ScaleLongToQuantum(*p++),q);
2784 SetPixelGreen(image,ScaleLongToQuantum(*p++),q);
2785 SetPixelRed(image,ScaleLongToQuantum(*p++),q);
2787 q+=GetPixelChannels(image);
2789 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2794 if (LocaleCompare(map,"I") == 0)
2796 for (y=0; y < (ssize_t) rows; y++)
2798 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2799 if (q == (Quantum *) NULL)
2801 for (x=0; x < (ssize_t) columns; x++)
2803 SetPixelRed(image,ScaleLongToQuantum(*p++),q);
2804 SetPixelGreen(image,GetPixelRed(image,q),q);
2805 SetPixelBlue(image,GetPixelRed(image,q),q);
2806 q+=GetPixelChannels(image);
2808 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2813 if (LocaleCompare(map,"RGB") == 0)
2815 for (y=0; y < (ssize_t) rows; y++)
2817 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2818 if (q == (Quantum *) NULL)
2820 for (x=0; x < (ssize_t) columns; x++)
2822 SetPixelRed(image,ScaleLongToQuantum(*p++),q);
2823 SetPixelGreen(image,ScaleLongToQuantum(*p++),q);
2824 SetPixelBlue(image,ScaleLongToQuantum(*p++),q);
2825 q+=GetPixelChannels(image);
2827 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2832 if (LocaleCompare(map,"RGBA") == 0)
2834 for (y=0; y < (ssize_t) rows; y++)
2836 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2837 if (q == (Quantum *) NULL)
2839 for (x=0; x < (ssize_t) columns; x++)
2841 SetPixelRed(image,ScaleLongToQuantum(*p++),q);
2842 SetPixelGreen(image,ScaleLongToQuantum(*p++),q);
2843 SetPixelBlue(image,ScaleLongToQuantum(*p++),q);
2844 SetPixelAlpha(image,ScaleLongToQuantum(*p++),q);
2845 q+=GetPixelChannels(image);
2847 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2852 if (LocaleCompare(map,"RGBP") == 0)
2854 for (y=0; y < (ssize_t) rows; y++)
2856 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2857 if (q == (Quantum *) NULL)
2859 for (x=0; x < (ssize_t) columns; x++)
2861 SetPixelRed(image,ScaleLongToQuantum(*p++),q);
2862 SetPixelGreen(image,ScaleLongToQuantum(*p++),q);
2863 SetPixelBlue(image,ScaleLongToQuantum(*p++),q);
2865 q+=GetPixelChannels(image);
2867 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2872 for (y=0; y < (ssize_t) rows; y++)
2874 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2875 if (q == (Quantum *) NULL)
2877 for (x=0; x < (ssize_t) columns; x++)
2879 for (i=0; i < (ssize_t) length; i++)
2881 switch (quantum_map[i])
2886 SetPixelRed(image,ScaleLongToQuantum(*p),q);
2890 case MagentaQuantum:
2892 SetPixelGreen(image,ScaleLongToQuantum(*p),q);
2898 SetPixelBlue(image,ScaleLongToQuantum(*p),q);
2903 SetPixelAlpha(image,ScaleLongToQuantum(*p),q);
2906 case OpacityQuantum:
2908 SetPixelAlpha(image,ScaleLongToQuantum(*p),q);
2913 SetPixelBlack(image,ScaleLongToQuantum(*p),q);
2918 SetPixelRed(image,ScaleLongToQuantum(*p),q);
2919 SetPixelGreen(image,GetPixelRed(image,q),q);
2920 SetPixelBlue(image,GetPixelRed(image,q),q);
2928 q+=GetPixelChannels(image);
2930 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2937 register const unsigned int
2940 p=(const unsigned int *) pixels;
2941 if (LocaleCompare(map,"BGR") == 0)
2943 for (y=0; y < (ssize_t) rows; y++)
2945 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2946 if (q == (Quantum *) NULL)
2948 for (x=0; x < (ssize_t) columns; x++)
2950 SetPixelBlue(image,ScaleLongToQuantum(*p++),q);
2951 SetPixelGreen(image,ScaleLongToQuantum(*p++),q);
2952 SetPixelRed(image,ScaleLongToQuantum(*p++),q);
2953 q+=GetPixelChannels(image);
2955 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2960 if (LocaleCompare(map,"BGRA") == 0)
2962 for (y=0; y < (ssize_t) rows; y++)
2964 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2965 if (q == (Quantum *) NULL)
2967 for (x=0; x < (ssize_t) columns; x++)
2969 SetPixelBlue(image,ScaleLongToQuantum(*p++),q);
2970 SetPixelGreen(image,ScaleLongToQuantum(*p++),q);
2971 SetPixelRed(image,ScaleLongToQuantum(*p++),q);
2972 SetPixelAlpha(image,ScaleLongToQuantum(*p++),q);
2973 q+=GetPixelChannels(image);
2975 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2980 if (LocaleCompare(map,"BGRP") == 0)
2982 for (y=0; y < (ssize_t) rows; y++)
2984 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2985 if (q == (Quantum *) NULL)
2987 for (x=0; x < (ssize_t) columns; x++)
2989 SetPixelBlue(image,ScaleLongToQuantum(*p++),q);
2990 SetPixelGreen(image,ScaleLongToQuantum(*p++),q);
2991 SetPixelRed(image,ScaleLongToQuantum(*p++),q);
2993 q+=GetPixelChannels(image);
2995 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3000 if (LocaleCompare(map,"I") == 0)
3002 for (y=0; y < (ssize_t) rows; y++)
3004 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
3005 if (q == (Quantum *) NULL)
3007 for (x=0; x < (ssize_t) columns; x++)
3009 SetPixelRed(image,ScaleLongToQuantum(*p++),q);
3010 SetPixelGreen(image,GetPixelRed(image,q),q);
3011 SetPixelBlue(image,GetPixelRed(image,q),q);
3012 q+=GetPixelChannels(image);
3014 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3019 if (LocaleCompare(map,"RGB") == 0)
3021 for (y=0; y < (ssize_t) rows; y++)
3023 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
3024 if (q == (Quantum *) NULL)
3026 for (x=0; x < (ssize_t) columns; x++)
3028 SetPixelRed(image,ScaleLongToQuantum(*p++),q);
3029 SetPixelGreen(image,ScaleLongToQuantum(*p++),q);
3030 SetPixelBlue(image,ScaleLongToQuantum(*p++),q);
3031 q+=GetPixelChannels(image);
3033 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3038 if (LocaleCompare(map,"RGBA") == 0)
3040 for (y=0; y < (ssize_t) rows; y++)
3042 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
3043 if (q == (Quantum *) NULL)
3045 for (x=0; x < (ssize_t) columns; x++)
3047 SetPixelRed(image,ScaleLongToQuantum(*p++),q);
3048 SetPixelGreen(image,ScaleLongToQuantum(*p++),q);
3049 SetPixelBlue(image,ScaleLongToQuantum(*p++),q);
3050 SetPixelAlpha(image,ScaleLongToQuantum(*p++),q);
3051 q+=GetPixelChannels(image);
3053 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3058 if (LocaleCompare(map,"RGBP") == 0)
3060 for (y=0; y < (ssize_t) rows; y++)
3062 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
3063 if (q == (Quantum *) NULL)
3065 for (x=0; x < (ssize_t) columns; x++)
3067 SetPixelRed(image,ScaleLongToQuantum(*p++),q);
3068 SetPixelGreen(image,ScaleLongToQuantum(*p++),q);
3069 SetPixelBlue(image,ScaleLongToQuantum(*p++),q);
3071 q+=GetPixelChannels(image);
3073 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3078 for (y=0; y < (ssize_t) rows; y++)
3080 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
3081 if (q == (Quantum *) NULL)
3083 for (x=0; x < (ssize_t) columns; x++)
3085 for (i=0; i < (ssize_t) length; i++)
3087 switch (quantum_map[i])
3092 SetPixelRed(image,ScaleLongToQuantum(*p),q);
3096 case MagentaQuantum:
3098 SetPixelGreen(image,ScaleLongToQuantum(*p),q);
3104 SetPixelBlue(image,ScaleLongToQuantum(*p),q);
3109 SetPixelAlpha(image,ScaleLongToQuantum(*p),q);
3112 case OpacityQuantum:
3114 SetPixelAlpha(image,ScaleLongToQuantum(*p),q);
3119 SetPixelBlack(image,ScaleLongToQuantum(*p),q);
3124 SetPixelRed(image,ScaleLongToQuantum(*p),q);
3125 SetPixelGreen(image,GetPixelRed(image,q),q);
3126 SetPixelBlue(image,GetPixelRed(image,q),q);
3134 q+=GetPixelChannels(image);
3136 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3143 register const Quantum
3146 p=(const Quantum *) pixels;
3147 if (LocaleCompare(map,"BGR") == 0)
3149 for (y=0; y < (ssize_t) rows; y++)
3151 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
3152 if (q == (Quantum *) NULL)
3154 for (x=0; x < (ssize_t) columns; x++)
3156 SetPixelBlue(image,*p++,q);
3157 SetPixelGreen(image,*p++,q);
3158 SetPixelRed(image,*p++,q);
3159 q+=GetPixelChannels(image);
3161 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3166 if (LocaleCompare(map,"BGRA") == 0)
3168 for (y=0; y < (ssize_t) rows; y++)
3170 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
3171 if (q == (Quantum *) NULL)
3173 for (x=0; x < (ssize_t) columns; x++)
3175 SetPixelBlue(image,*p++,q);
3176 SetPixelGreen(image,*p++,q);
3177 SetPixelRed(image,*p++,q);
3178 SetPixelAlpha(image,*p++,q);
3179 q+=GetPixelChannels(image);
3181 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3186 if (LocaleCompare(map,"BGRP") == 0)
3188 for (y=0; y < (ssize_t) rows; y++)
3190 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
3191 if (q == (Quantum *) NULL)
3193 for (x=0; x < (ssize_t) columns; x++)
3195 SetPixelBlue(image,*p++,q);
3196 SetPixelGreen(image,*p++,q);
3197 SetPixelRed(image,*p++,q);
3199 q+=GetPixelChannels(image);
3201 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3206 if (LocaleCompare(map,"I") == 0)
3208 for (y=0; y < (ssize_t) rows; y++)
3210 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
3211 if (q == (Quantum *) NULL)
3213 for (x=0; x < (ssize_t) columns; x++)
3215 SetPixelRed(image,*p++,q);
3216 SetPixelGreen(image,GetPixelRed(image,q),q);
3217 SetPixelBlue(image,GetPixelRed(image,q),q);
3218 q+=GetPixelChannels(image);
3220 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3225 if (LocaleCompare(map,"RGB") == 0)
3227 for (y=0; y < (ssize_t) rows; y++)
3229 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
3230 if (q == (Quantum *) NULL)
3232 for (x=0; x < (ssize_t) columns; x++)
3234 SetPixelRed(image,*p++,q);
3235 SetPixelGreen(image,*p++,q);
3236 SetPixelBlue(image,*p++,q);
3237 q+=GetPixelChannels(image);
3239 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3244 if (LocaleCompare(map,"RGBA") == 0)
3246 for (y=0; y < (ssize_t) rows; y++)
3248 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
3249 if (q == (Quantum *) NULL)
3251 for (x=0; x < (ssize_t) columns; x++)
3253 SetPixelRed(image,*p++,q);
3254 SetPixelGreen(image,*p++,q);
3255 SetPixelBlue(image,*p++,q);
3256 SetPixelAlpha(image,*p++,q);
3257 q+=GetPixelChannels(image);
3259 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3264 if (LocaleCompare(map,"RGBP") == 0)
3266 for (y=0; y < (ssize_t) rows; y++)
3268 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
3269 if (q == (Quantum *) NULL)
3271 for (x=0; x < (ssize_t) columns; x++)
3273 SetPixelRed(image,*p++,q);
3274 SetPixelGreen(image,*p++,q);
3275 SetPixelBlue(image,*p++,q);
3277 q+=GetPixelChannels(image);
3279 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3284 for (y=0; y < (ssize_t) rows; y++)
3286 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
3287 if (q == (Quantum *) NULL)
3289 for (x=0; x < (ssize_t) columns; x++)
3291 for (i=0; i < (ssize_t) length; i++)
3293 switch (quantum_map[i])
3298 SetPixelRed(image,*p,q);
3302 case MagentaQuantum:
3304 SetPixelGreen(image,*p,q);
3310 SetPixelBlue(image,*p,q);
3315 SetPixelAlpha(image,*p,q);
3318 case OpacityQuantum:
3320 SetPixelAlpha(image,*p,q);
3325 SetPixelBlack(image,*p,q);
3330 SetPixelRed(image,*p,q);
3331 SetPixelGreen(image,GetPixelRed(image,q),q);
3332 SetPixelBlue(image,GetPixelRed(image,q),q);
3340 q+=GetPixelChannels(image);
3342 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3349 register const unsigned short
3352 p=(const unsigned short *) pixels;
3353 if (LocaleCompare(map,"BGR") == 0)
3355 for (y=0; y < (ssize_t) rows; y++)
3357 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
3358 if (q == (Quantum *) NULL)
3360 for (x=0; x < (ssize_t) columns; x++)
3362 SetPixelBlue(image,ScaleShortToQuantum(*p++),q);
3363 SetPixelGreen(image,ScaleShortToQuantum(*p++),q);
3364 SetPixelRed(image,ScaleShortToQuantum(*p++),q);
3365 q+=GetPixelChannels(image);
3367 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3372 if (LocaleCompare(map,"BGRA") == 0)
3374 for (y=0; y < (ssize_t) rows; y++)
3376 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
3377 if (q == (Quantum *) NULL)
3379 for (x=0; x < (ssize_t) columns; x++)
3381 SetPixelBlue(image,ScaleShortToQuantum(*p++),q);
3382 SetPixelGreen(image,ScaleShortToQuantum(*p++),q);
3383 SetPixelRed(image,ScaleShortToQuantum(*p++),q);
3384 SetPixelAlpha(image,ScaleShortToQuantum(*p++),q);
3385 q+=GetPixelChannels(image);
3387 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3392 if (LocaleCompare(map,"BGRP") == 0)
3394 for (y=0; y < (ssize_t) rows; y++)
3396 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
3397 if (q == (Quantum *) NULL)
3399 for (x=0; x < (ssize_t) columns; x++)
3401 SetPixelBlue(image,ScaleShortToQuantum(*p++),q);
3402 SetPixelGreen(image,ScaleShortToQuantum(*p++),q);
3403 SetPixelRed(image,ScaleShortToQuantum(*p++),q);
3405 q+=GetPixelChannels(image);
3407 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3412 if (LocaleCompare(map,"I") == 0)
3414 for (y=0; y < (ssize_t) rows; y++)
3416 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
3417 if (q == (Quantum *) NULL)
3419 for (x=0; x < (ssize_t) columns; x++)
3421 SetPixelRed(image,ScaleShortToQuantum(*p++),q);
3422 SetPixelGreen(image,GetPixelRed(image,q),q);
3423 SetPixelBlue(image,GetPixelRed(image,q),q);
3424 q+=GetPixelChannels(image);
3426 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3431 if (LocaleCompare(map,"RGB") == 0)
3433 for (y=0; y < (ssize_t) rows; y++)
3435 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
3436 if (q == (Quantum *) NULL)
3438 for (x=0; x < (ssize_t) columns; x++)
3440 SetPixelRed(image,ScaleShortToQuantum(*p++),q);
3441 SetPixelGreen(image,ScaleShortToQuantum(*p++),q);
3442 SetPixelBlue(image,ScaleShortToQuantum(*p++),q);
3443 q+=GetPixelChannels(image);
3445 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3450 if (LocaleCompare(map,"RGBA") == 0)
3452 for (y=0; y < (ssize_t) rows; y++)
3454 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
3455 if (q == (Quantum *) NULL)
3457 for (x=0; x < (ssize_t) columns; x++)
3459 SetPixelRed(image,ScaleShortToQuantum(*p++),q);
3460 SetPixelGreen(image,ScaleShortToQuantum(*p++),q);
3461 SetPixelBlue(image,ScaleShortToQuantum(*p++),q);
3462 SetPixelAlpha(image,ScaleShortToQuantum(*p++),q);
3463 q+=GetPixelChannels(image);
3465 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3470 if (LocaleCompare(map,"RGBP") == 0)
3472 for (y=0; y < (ssize_t) rows; y++)
3474 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
3475 if (q == (Quantum *) NULL)
3477 for (x=0; x < (ssize_t) columns; x++)
3479 SetPixelRed(image,ScaleShortToQuantum(*p++),q);
3480 SetPixelGreen(image,ScaleShortToQuantum(*p++),q);
3481 SetPixelBlue(image,ScaleShortToQuantum(*p++),q);
3483 q+=GetPixelChannels(image);
3485 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3490 for (y=0; y < (ssize_t) rows; y++)
3492 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
3493 if (q == (Quantum *) NULL)
3495 for (x=0; x < (ssize_t) columns; x++)
3497 for (i=0; i < (ssize_t) length; i++)
3499 switch (quantum_map[i])
3504 SetPixelRed(image,ScaleShortToQuantum(*p),q);
3508 case MagentaQuantum:
3510 SetPixelGreen(image,ScaleShortToQuantum(*p),q);
3516 SetPixelBlue(image,ScaleShortToQuantum(*p),q);
3521 SetPixelAlpha(image,ScaleShortToQuantum(*p),q);
3524 case OpacityQuantum:
3526 SetPixelAlpha(image,ScaleShortToQuantum(*p),q);
3531 SetPixelBlack(image,ScaleShortToQuantum(*p),q);
3536 SetPixelRed(image,ScaleShortToQuantum(*p),q);
3537 SetPixelGreen(image,GetPixelRed(image,q),q);
3538 SetPixelBlue(image,GetPixelRed(image,q),q);
3546 q+=GetPixelChannels(image);
3548 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3555 quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
3556 (void) ThrowMagickException(&image->exception,GetMagickModule(),
3557 OptionError,"UnrecognizedPixelMap","`%s'",map);
3561 quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
3566 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3570 % I n t e r p o l a t e P i x e l C h a n n e l %
3574 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3576 % InterpolatePixelChannel() applies a pixel interpolation method between a
3577 % floating point coordinate and the pixels surrounding that coordinate. No
3578 % pixel area resampling, or scaling of the result is performed.
3580 % The format of the InterpolatePixelChannel method is:
3582 % MagickBooleanType InterpolatePixelChannel(const Image *image,
3583 % const PixelChannel channel,const CacheView *image_view,
3584 % const InterpolatePixelMethod method,const double x,const double y,
3585 % double *pixel,ExceptionInfo *exception)
3587 % A description of each parameter follows:
3589 % o image: the image.
3591 % o image_view: the image view.
3593 % o channel: the pixel channel to interpolate.
3595 % o method: the pixel color interpolation method.
3597 % o x,y: A double representing the current (x,y) position of the pixel.
3599 % o pixel: return the interpolated pixel here.
3601 % o exception: return any errors or warnings in this structure.
3605 static inline double MagickMax(const MagickRealType x,const MagickRealType y)
3612 static inline MagickRealType CubicWeightingFunction(const MagickRealType x)
3618 alpha=MagickMax(x+2.0,0.0);
3619 gamma=1.0*alpha*alpha*alpha;
3620 alpha=MagickMax(x+1.0,0.0);
3621 gamma-=4.0*alpha*alpha*alpha;
3622 alpha=MagickMax(x+0.0,0.0);
3623 gamma+=6.0*alpha*alpha*alpha;
3624 alpha=MagickMax(x-1.0,0.0);
3625 gamma-=4.0*alpha*alpha*alpha;
3629 static inline double MeshInterpolate(const PointInfo *delta,const double p,
3630 const double x,const double y)
3632 return(delta->x*x+delta->y*y+(1.0-delta->x-delta->y)*p);
3635 static inline ssize_t NearestNeighbor(const MagickRealType x)
3638 return((ssize_t) (x+0.5));
3639 return((ssize_t) (x-0.5));
3642 MagickExport MagickBooleanType InterpolatePixelChannel(const Image *image,
3643 const CacheView *image_view,const PixelChannel channel,
3644 const InterpolatePixelMethod method,const double x,const double y,
3645 double *pixel,ExceptionInfo *exception)
3658 register const Quantum
3668 assert(image != (Image *) NULL);
3669 assert(image != (Image *) NULL);
3670 assert(image->signature == MagickSignature);
3671 assert(image_view != (CacheView *) NULL);
3674 traits=GetPixelChannelMapTraits(image,channel);
3675 x_offset=(ssize_t) floor(x);
3676 y_offset=(ssize_t) floor(y);
3677 switch (method == UndefinedInterpolatePixel ? image->interpolate : method)
3679 case AverageInterpolatePixel:
3681 p=GetCacheViewVirtualPixels(image_view,x_offset-1,y_offset-1,4,4,
3683 if (p == (const Quantum *) NULL)
3688 if ((traits & BlendPixelTrait) == 0)
3689 for (i=0; i < 16; i++)
3692 pixels[i]=(MagickRealType) p[i*GetPixelChannels(image)+channel];
3695 for (i=0; i < 16; i++)
3697 alpha[i]=QuantumScale*GetPixelAlpha(image,p+i*
3698 GetPixelChannels(image));
3699 pixels[i]=alpha[i]*p[i*GetPixelChannels(image)+channel];
3701 for (i=0; i < 16; i++)
3703 gamma=1.0/(fabs((double) alpha[i]) <= MagickEpsilon ? 1.0 : alpha[i]);
3704 *pixel+=gamma*0.0625*pixels[i];
3708 case BicubicInterpolatePixel:
3717 p=GetCacheViewVirtualPixels(image_view,x_offset-1,y_offset-1,4,4,
3719 if (p == (const Quantum *) NULL)
3724 if ((traits & BlendPixelTrait) == 0)
3725 for (i=0; i < 16; i++)
3728 pixels[i]=(MagickRealType) p[i*GetPixelChannels(image)+channel];
3731 for (i=0; i < 16; i++)
3733 alpha[i]=QuantumScale*GetPixelAlpha(image,p+i*
3734 GetPixelChannels(image));
3735 pixels[i]=alpha[i]*p[i*GetPixelChannels(image)+channel];
3739 for (i=0; i < 4; i++)
3741 u[0]=(pixels[4*i+3]-pixels[4*i+2])-(pixels[4*i+0]-pixels[4*i+1]);
3742 u[1]=(pixels[4*i+0]-pixels[4*i+1])-u[0];
3743 u[2]=pixels[4*i+2]-pixels[4*i+0];
3745 v[i]=(delta.x*delta.x*delta.x*u[0])+(delta.x*delta.x*u[1])+(delta.x*
3748 u[0]=(v[3]-v[2])-(v[0]-v[1]);
3749 u[1]=(v[0]-v[1])-u[0];
3752 *pixel=(delta.y*delta.y*delta.y*u[0])+(delta.y*delta.y*u[1])+(delta.y*
3756 case BilinearInterpolatePixel:
3763 p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,2,2,exception);
3764 if (p == (const Quantum *) NULL)
3769 if ((traits & BlendPixelTrait) == 0)
3770 for (i=0; i < 4; i++)
3773 pixels[i]=(MagickRealType) p[i*GetPixelChannels(image)+channel];
3776 for (i=0; i < 4; i++)
3778 alpha[i]=QuantumScale*GetPixelAlpha(image,p+i*
3779 GetPixelChannels(image));
3780 pixels[i]=alpha[i]*p[i*GetPixelChannels(image)+channel];
3784 epsilon.x=1.0-delta.x;
3785 epsilon.y=1.0-delta.y;
3786 gamma=((epsilon.y*(epsilon.x*alpha[0]+delta.x*alpha[1])+delta.y*
3787 (epsilon.x*alpha[2]+delta.x*alpha[3])));
3788 gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
3789 *pixel=gamma*(epsilon.y*(epsilon.x*pixels[0]+delta.x*pixels[1])+delta.y*
3790 (epsilon.x*pixels[2]+delta.x*pixels[3]));
3793 case FilterInterpolatePixel:
3807 geometry.x=x_offset-1;
3808 geometry.y=y_offset-1;
3809 excerpt_image=ExcerptImage(image,&geometry,exception);
3810 if (excerpt_image == (Image *) NULL)
3815 filter_image=ResizeImage(excerpt_image,1,1,image->filter,image->blur,
3817 excerpt_image=DestroyImage(excerpt_image);
3818 if (filter_image == (Image *) NULL)
3820 filter_view=AcquireCacheView(filter_image);
3821 p=GetCacheViewVirtualPixels(filter_view,0,0,1,1,exception);
3822 if (p == (const Quantum *) NULL)
3825 *pixel=(double) p[channel];
3826 filter_view=DestroyCacheView(filter_view);
3827 filter_image=DestroyImage(filter_image);
3830 case IntegerInterpolatePixel:
3832 p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,1,1,exception);
3833 if (p == (const Quantum *) NULL)
3838 *pixel=(double) p[channel];
3841 case NearestNeighborInterpolatePixel:
3843 p=GetCacheViewVirtualPixels(image_view,NearestNeighbor(x),
3844 NearestNeighbor(y),1,1,exception);
3845 if (p == (const Quantum *) NULL)
3850 *pixel=(double) p[channel];
3853 case MeshInterpolatePixel:
3859 p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,2,2,exception);
3860 if (p == (const Quantum *) NULL)
3865 if ((traits & BlendPixelTrait) == 0)
3866 for (i=0; i < 4; i++)
3869 pixels[i]=(MagickRealType) p[i*GetPixelChannels(image)+channel];
3872 for (i=0; i < 4; i++)
3874 alpha[i]=QuantumScale*GetPixelAlpha(image,p+i*
3875 GetPixelChannels(image));
3876 pixels[i]=alpha[i]*p[i*GetPixelChannels(image)+channel];
3880 luminance.x=GetPixelLuminance(image,p)-(double)
3881 GetPixelLuminance(image,p+3*GetPixelChannels(image));
3882 luminance.y=GetPixelLuminance(image,p+1*GetPixelChannels(image))-(double)
3883 GetPixelLuminance(image,p+2*GetPixelChannels(image));
3884 if (fabs(luminance.x) < fabs(luminance.y))
3889 if (delta.x <= delta.y)
3892 Bottom-left triangle (pixel: 2, diagonal: 0-3).
3894 delta.y=1.0-delta.y;
3895 gamma=MeshInterpolate(&delta,alpha[2],alpha[3],alpha[0]);
3896 gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
3897 *pixel=gamma*MeshInterpolate(&delta,pixels[2],pixels[3],
3903 Top-right triangle (pixel: 1, diagonal: 0-3).
3905 delta.x=1.0-delta.x;
3906 gamma=MeshInterpolate(&delta,alpha[1],alpha[0],alpha[3]);
3907 gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
3908 *pixel=gamma*MeshInterpolate(&delta,pixels[1],pixels[0],
3917 if (delta.x <= (1.0-delta.y))
3920 Top-left triangle (pixel: 0, diagonal: 1-2).
3922 gamma=MeshInterpolate(&delta,alpha[0],alpha[1],alpha[2]);
3923 gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
3924 *pixel=gamma*MeshInterpolate(&delta,pixels[0],pixels[1],
3930 Bottom-right triangle (pixel: 3, diagonal: 1-2).
3932 delta.x=1.0-delta.x;
3933 delta.y=1.0-delta.y;
3934 gamma=MeshInterpolate(&delta,alpha[3],alpha[2],alpha[1]);
3935 gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
3936 *pixel=gamma*MeshInterpolate(&delta,pixels[3],pixels[2],
3942 case SplineInterpolatePixel:
3955 p=GetCacheViewVirtualPixels(image_view,x_offset-1,y_offset-1,4,4,
3957 if (p == (const Quantum *) NULL)
3962 if ((traits & BlendPixelTrait) == 0)
3963 for (i=0; i < 16; i++)
3966 pixels[i]=(MagickRealType) p[i*GetPixelChannels(image)+channel];
3969 for (i=0; i < 16; i++)
3971 alpha[i]=QuantumScale*GetPixelAlpha(image,p+i*
3972 GetPixelChannels(image));
3973 pixels[i]=alpha[i]*p[i*GetPixelChannels(image)+channel];
3978 for (i=(-1); i < 3L; i++)
3980 dy=CubicWeightingFunction((MagickRealType) i-delta.y);
3981 for (j=(-1); j < 3L; j++)
3983 dx=CubicWeightingFunction(delta.x-(MagickRealType) j);
3984 gamma=1.0/(fabs((double) alpha[n]) <= MagickEpsilon ? 1.0 : alpha[n]);
3985 *pixel+=gamma*dx*dy*pixels[n];
3996 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4000 % I n t e r p o l a t e P i x e l I n f o %
4004 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4006 % InterpolatePixelInfo() applies a pixel interpolation method between a
4007 % floating point coordinate and the pixels surrounding that coordinate. No
4008 % pixel area resampling, or scaling of the result is performed.
4010 % The format of the InterpolatePixelInfo method is:
4012 % MagickBooleanType InterpolatePixelInfo(const Image *image,
4013 % const CacheView *image_view,const InterpolatePixelMethod method,
4014 % const double x,const double y,PixelInfo *pixel,
4015 % ExceptionInfo *exception)
4017 % A description of each parameter follows:
4019 % o image: the image.
4021 % o image_view: the image view.
4023 % o method: the pixel color interpolation method.
4025 % o x,y: A double representing the current (x,y) position of the pixel.
4027 % o pixel: return the interpolated pixel here.
4029 % o exception: return any errors or warnings in this structure.
4033 static inline void AlphaBlendPixelInfo(const Image *image,
4034 const Quantum *pixel,PixelInfo *pixel_info,MagickRealType *alpha)
4036 if (image->matte == MagickFalse)
4039 pixel_info->red=(MagickRealType) GetPixelRed(image,pixel);
4040 pixel_info->green=(MagickRealType) GetPixelGreen(image,pixel);
4041 pixel_info->blue=(MagickRealType) GetPixelBlue(image,pixel);
4042 pixel_info->black=0.0;
4043 if (image->colorspace == CMYKColorspace)
4044 pixel_info->black=(MagickRealType) GetPixelBlack(image,pixel);
4045 pixel_info->alpha=(MagickRealType) GetPixelAlpha(image,pixel);
4048 *alpha=QuantumScale*GetPixelAlpha(image,pixel);
4049 pixel_info->red=(*alpha*GetPixelRed(image,pixel));
4050 pixel_info->green=(*alpha*GetPixelGreen(image,pixel));
4051 pixel_info->blue=(*alpha*GetPixelBlue(image,pixel));
4052 pixel_info->black=0.0;
4053 if (image->colorspace == CMYKColorspace)
4054 pixel_info->black=(*alpha*GetPixelBlack(image,pixel));
4055 pixel_info->alpha=(MagickRealType) GetPixelAlpha(image,pixel);
4058 static void BicubicInterpolate(const PixelInfo *pixels,const double dx,
4069 p=(pixels[3].red-pixels[2].red)-(pixels[0].red-pixels[1].red);
4070 q=(pixels[0].red-pixels[1].red)-p;
4071 r=pixels[2].red-pixels[0].red;
4073 pixel->red=(dx*dx2*p)+(dx2*q)+(dx*r)+s;
4074 p=(pixels[3].green-pixels[2].green)-(pixels[0].green-pixels[1].green);
4075 q=(pixels[0].green-pixels[1].green)-p;
4076 r=pixels[2].green-pixels[0].green;
4078 pixel->green=(dx*dx2*p)+(dx2*q)+(dx*r)+s;
4079 p=(pixels[3].blue-pixels[2].blue)-(pixels[0].blue-pixels[1].blue);
4080 q=(pixels[0].blue-pixels[1].blue)-p;
4081 r=pixels[2].blue-pixels[0].blue;
4083 pixel->blue=(dx*dx2*p)+(dx2*q)+(dx*r)+s;
4084 p=(pixels[3].alpha-pixels[2].alpha)-(pixels[0].alpha-pixels[1].alpha);
4085 q=(pixels[0].alpha-pixels[1].alpha)-p;
4086 r=pixels[2].alpha-pixels[0].alpha;
4088 pixel->alpha=(dx*dx2*p)+(dx2*q)+(dx*r)+s;
4089 if (pixel->colorspace == CMYKColorspace)
4091 p=(pixels[3].black-pixels[2].black)-(pixels[0].black-pixels[1].black);
4092 q=(pixels[0].black-pixels[1].black)-p;
4093 r=pixels[2].black-pixels[0].black;
4095 pixel->black=(dx*dx2*p)+(dx2*q)+(dx*r)+s;
4099 MagickExport MagickBooleanType InterpolatePixelInfo(const Image *image,
4100 const CacheView *image_view,const InterpolatePixelMethod method,
4101 const double x,const double y,PixelInfo *pixel,ExceptionInfo *exception)
4113 register const Quantum
4123 assert(image != (Image *) NULL);
4124 assert(image->signature == MagickSignature);
4125 assert(image_view != (CacheView *) NULL);
4127 x_offset=(ssize_t) floor(x);
4128 y_offset=(ssize_t) floor(y);
4129 switch (method == UndefinedInterpolatePixel ? image->interpolate : method)
4131 case AverageInterpolatePixel:
4133 p=GetCacheViewVirtualPixels(image_view,x_offset-1,y_offset-1,4,4,
4135 if (p == (const Quantum *) NULL)
4140 AlphaBlendPixelInfo(image,p,pixels+0,alpha+0);
4141 AlphaBlendPixelInfo(image,p+1*GetPixelChannels(image),pixels+1,alpha+1);
4142 AlphaBlendPixelInfo(image,p+2*GetPixelChannels(image),pixels+2,alpha+2);
4143 AlphaBlendPixelInfo(image,p+3*GetPixelChannels(image),pixels+3,alpha+3);
4144 AlphaBlendPixelInfo(image,p+4*GetPixelChannels(image),pixels+4,alpha+4);
4145 AlphaBlendPixelInfo(image,p+5*GetPixelChannels(image),pixels+5,alpha+5);
4146 AlphaBlendPixelInfo(image,p+6*GetPixelChannels(image),pixels+6,alpha+6);
4147 AlphaBlendPixelInfo(image,p+7*GetPixelChannels(image),pixels+7,alpha+7);
4148 AlphaBlendPixelInfo(image,p+8*GetPixelChannels(image),pixels+8,alpha+8);
4149 AlphaBlendPixelInfo(image,p+9*GetPixelChannels(image),pixels+9,alpha+9);
4150 AlphaBlendPixelInfo(image,p+10*GetPixelChannels(image),pixels+10,alpha+
4152 AlphaBlendPixelInfo(image,p+11*GetPixelChannels(image),pixels+11,alpha+
4154 AlphaBlendPixelInfo(image,p+12*GetPixelChannels(image),pixels+12,alpha+
4156 AlphaBlendPixelInfo(image,p+13*GetPixelChannels(image),pixels+13,alpha+
4158 AlphaBlendPixelInfo(image,p+14*GetPixelChannels(image),pixels+14,alpha+
4160 AlphaBlendPixelInfo(image,p+15*GetPixelChannels(image),pixels+15,alpha+
4167 for (i=0; i < 16L; i++)
4169 gamma=1.0/(fabs((double) alpha[i]) <= MagickEpsilon ? 1.0 : alpha[i]);
4170 pixel->red+=gamma*0.0625*pixels[i].red;
4171 pixel->green+=gamma*0.0625*pixels[i].green;
4172 pixel->blue+=gamma*0.0625*pixels[i].blue;
4173 if (image->colorspace == CMYKColorspace)
4174 pixel->black+=gamma*0.0625*pixels[i].black;
4175 pixel->alpha+=0.0625*pixels[i].alpha;
4179 case BicubicInterpolatePixel:
4187 p=GetCacheViewVirtualPixels(image_view,x_offset-1,y_offset-1,4,4,
4189 if (p == (const Quantum *) NULL)
4194 AlphaBlendPixelInfo(image,p,pixels+0,alpha+0);
4195 AlphaBlendPixelInfo(image,p+1*GetPixelChannels(image),pixels+1,alpha+1);
4196 AlphaBlendPixelInfo(image,p+2*GetPixelChannels(image),pixels+2,alpha+2);
4197 AlphaBlendPixelInfo(image,p+3*GetPixelChannels(image),pixels+3,alpha+3);
4198 AlphaBlendPixelInfo(image,p+4*GetPixelChannels(image),pixels+4,alpha+4);
4199 AlphaBlendPixelInfo(image,p+5*GetPixelChannels(image),pixels+5,alpha+5);
4200 AlphaBlendPixelInfo(image,p+6*GetPixelChannels(image),pixels+6,alpha+6);
4201 AlphaBlendPixelInfo(image,p+7*GetPixelChannels(image),pixels+7,alpha+7);
4202 AlphaBlendPixelInfo(image,p+8*GetPixelChannels(image),pixels+8,alpha+8);
4203 AlphaBlendPixelInfo(image,p+9*GetPixelChannels(image),pixels+9,alpha+9);
4204 AlphaBlendPixelInfo(image,p+10*GetPixelChannels(image),pixels+10,alpha+
4206 AlphaBlendPixelInfo(image,p+11*GetPixelChannels(image),pixels+11,alpha+
4208 AlphaBlendPixelInfo(image,p+12*GetPixelChannels(image),pixels+12,alpha+
4210 AlphaBlendPixelInfo(image,p+13*GetPixelChannels(image),pixels+13,alpha+
4212 AlphaBlendPixelInfo(image,p+14*GetPixelChannels(image),pixels+14,alpha+
4214 AlphaBlendPixelInfo(image,p+15*GetPixelChannels(image),pixels+15,alpha+
4218 for (i=0; i < 4L; i++)
4219 BicubicInterpolate(pixels+4*i,delta.x,u+i);
4220 BicubicInterpolate(u,delta.y,pixel);
4223 case BilinearInterpolatePixel:
4230 p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,2,2,exception);
4231 if (p == (const Quantum *) NULL)
4236 AlphaBlendPixelInfo(image,p,pixels+0,alpha+0);
4237 AlphaBlendPixelInfo(image,p+1*GetPixelChannels(image),pixels+1,alpha+1);
4238 AlphaBlendPixelInfo(image,p+2*GetPixelChannels(image),pixels+2,alpha+2);
4239 AlphaBlendPixelInfo(image,p+3*GetPixelChannels(image),pixels+3,alpha+3);
4242 epsilon.x=1.0-delta.x;
4243 epsilon.y=1.0-delta.y;
4244 gamma=((epsilon.y*(epsilon.x*alpha[0]+delta.x*alpha[1])+delta.y*
4245 (epsilon.x*alpha[2]+delta.x*alpha[3])));
4246 gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
4247 pixel->red=gamma*(epsilon.y*(epsilon.x*pixels[0].red+delta.x*
4248 pixels[1].red)+delta.y*(epsilon.x*pixels[2].red+delta.x*pixels[3].red));
4249 pixel->green=gamma*(epsilon.y*(epsilon.x*pixels[0].green+delta.x*
4250 pixels[1].green)+delta.y*(epsilon.x*pixels[2].green+delta.x*
4252 pixel->blue=gamma*(epsilon.y*(epsilon.x*pixels[0].blue+delta.x*
4253 pixels[1].blue)+delta.y*(epsilon.x*pixels[2].blue+delta.x*
4255 if (image->colorspace == CMYKColorspace)
4256 pixel->black=gamma*(epsilon.y*(epsilon.x*pixels[0].black+delta.x*
4257 pixels[1].black)+delta.y*(epsilon.x*pixels[2].black+delta.x*
4259 gamma=((epsilon.y*(epsilon.x+delta.x)+delta.y*(epsilon.x+delta.x)));
4260 gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
4261 pixel->alpha=(epsilon.y*(epsilon.x*pixels[0].alpha+delta.x*
4262 pixels[1].alpha)+delta.y*(epsilon.x*pixels[2].alpha+delta.x*
4266 case FilterInterpolatePixel:
4280 geometry.x=x_offset-1;
4281 geometry.y=y_offset-1;
4282 excerpt_image=ExcerptImage(image,&geometry,exception);
4283 if (excerpt_image == (Image *) NULL)
4288 filter_image=ResizeImage(excerpt_image,1,1,image->filter,image->blur,
4290 excerpt_image=DestroyImage(excerpt_image);
4291 if (filter_image == (Image *) NULL)
4293 filter_view=AcquireCacheView(filter_image);
4294 p=GetCacheViewVirtualPixels(filter_view,0,0,1,1,exception);
4295 if (p != (const Quantum *) NULL)
4296 SetPixelInfo(image,p,pixel);
4297 filter_view=DestroyCacheView(filter_view);
4298 filter_image=DestroyImage(filter_image);
4301 case IntegerInterpolatePixel:
4303 p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,1,1,exception);
4304 if (p == (const Quantum *) NULL)
4309 SetPixelInfo(image,p,pixel);
4312 case MeshInterpolatePixel:
4318 p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,2,2,exception);
4319 if (p == (const Quantum *) NULL)
4326 luminance.x=GetPixelLuminance(image,p)-(double)
4327 GetPixelLuminance(image,p+3*GetPixelChannels(image));
4328 luminance.y=GetPixelLuminance(image,p+1*GetPixelChannels(image))-(double)
4329 GetPixelLuminance(image,p+2*GetPixelChannels(image));
4330 AlphaBlendPixelInfo(image,p,pixels+0,alpha+0);
4331 AlphaBlendPixelInfo(image,p+1*GetPixelChannels(image),pixels+1,alpha+1);
4332 AlphaBlendPixelInfo(image,p+2*GetPixelChannels(image),pixels+2,alpha+2);
4333 AlphaBlendPixelInfo(image,p+3*GetPixelChannels(image),pixels+3,alpha+3);
4334 if (fabs(luminance.x) < fabs(luminance.y))
4339 if (delta.x <= delta.y)
4342 Bottom-left triangle (pixel: 2, diagonal: 0-3).
4344 delta.y=1.0-delta.y;
4345 gamma=MeshInterpolate(&delta,alpha[2],alpha[3],alpha[0]);
4346 gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
4347 pixel->red=gamma*MeshInterpolate(&delta,pixels[2].red,
4348 pixels[3].red,pixels[0].red);
4349 pixel->green=gamma*MeshInterpolate(&delta,pixels[2].green,
4350 pixels[3].green,pixels[0].green);
4351 pixel->blue=gamma*MeshInterpolate(&delta,pixels[2].blue,
4352 pixels[3].blue,pixels[0].blue);
4353 if (image->colorspace == CMYKColorspace)
4354 pixel->black=gamma*MeshInterpolate(&delta,pixels[2].black,
4355 pixels[3].black,pixels[0].black);
4356 gamma=MeshInterpolate(&delta,1.0,1.0,1.0);
4357 pixel->alpha=gamma*MeshInterpolate(&delta,pixels[2].alpha,
4358 pixels[3].alpha,pixels[0].alpha);
4363 Top-right triangle (pixel:1 , diagonal: 0-3).
4365 delta.x=1.0-delta.x;
4366 gamma=MeshInterpolate(&delta,alpha[1],alpha[0],alpha[3]);
4367 gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
4368 pixel->red=gamma*MeshInterpolate(&delta,pixels[1].red,
4369 pixels[0].red,pixels[3].red);
4370 pixel->green=gamma*MeshInterpolate(&delta,pixels[1].green,
4371 pixels[0].green,pixels[3].green);
4372 pixel->blue=gamma*MeshInterpolate(&delta,pixels[1].blue,
4373 pixels[0].blue,pixels[3].blue);
4374 if (image->colorspace == CMYKColorspace)
4375 pixel->black=gamma*MeshInterpolate(&delta,pixels[1].black,
4376 pixels[0].black,pixels[3].black);
4377 gamma=MeshInterpolate(&delta,1.0,1.0,1.0);
4378 pixel->alpha=gamma*MeshInterpolate(&delta,pixels[1].alpha,
4379 pixels[0].alpha,pixels[3].alpha);
4387 if (delta.x <= (1.0-delta.y))
4390 Top-left triangle (pixel: 0, diagonal: 1-2).
4392 gamma=MeshInterpolate(&delta,alpha[0],alpha[1],alpha[2]);
4393 gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
4394 pixel->red=gamma*MeshInterpolate(&delta,pixels[0].red,
4395 pixels[1].red,pixels[2].red);
4396 pixel->green=gamma*MeshInterpolate(&delta,pixels[0].green,
4397 pixels[1].green,pixels[2].green);
4398 pixel->blue=gamma*MeshInterpolate(&delta,pixels[0].blue,
4399 pixels[1].blue,pixels[2].blue);
4400 if (image->colorspace == CMYKColorspace)
4401 pixel->black=gamma*MeshInterpolate(&delta,pixels[0].black,
4402 pixels[1].black,pixels[2].black);
4403 gamma=MeshInterpolate(&delta,1.0,1.0,1.0);
4404 pixel->alpha=gamma*MeshInterpolate(&delta,pixels[0].alpha,
4405 pixels[1].alpha,pixels[2].alpha);
4410 Bottom-right triangle (pixel: 3, diagonal: 1-2).
4412 delta.x=1.0-delta.x;
4413 delta.y=1.0-delta.y;
4414 gamma=MeshInterpolate(&delta,alpha[3],alpha[2],alpha[1]);
4415 gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
4416 pixel->red=gamma*MeshInterpolate(&delta,pixels[3].red,
4417 pixels[2].red,pixels[1].red);
4418 pixel->green=gamma*MeshInterpolate(&delta,pixels[3].green,
4419 pixels[2].green,pixels[1].green);
4420 pixel->blue=gamma*MeshInterpolate(&delta,pixels[3].blue,
4421 pixels[2].blue,pixels[1].blue);
4422 if (image->colorspace == CMYKColorspace)
4423 pixel->black=gamma*MeshInterpolate(&delta,pixels[3].black,
4424 pixels[2].black,pixels[1].black);
4425 gamma=MeshInterpolate(&delta,1.0,1.0,1.0);
4426 pixel->alpha=gamma*MeshInterpolate(&delta,pixels[3].alpha,
4427 pixels[2].alpha,pixels[1].alpha);
4432 case NearestNeighborInterpolatePixel:
4434 p=GetCacheViewVirtualPixels(image_view,NearestNeighbor(x),
4435 NearestNeighbor(y),1,1,exception);
4436 if (p == (const Quantum *) NULL)
4441 SetPixelInfo(image,p,pixel);
4444 case SplineInterpolatePixel:
4457 p=GetCacheViewVirtualPixels(image_view,x_offset-1,y_offset-1,4,4,
4459 if (p == (const Quantum *) NULL)
4464 AlphaBlendPixelInfo(image,p,pixels+0,alpha+0);
4465 AlphaBlendPixelInfo(image,p+1*GetPixelChannels(image),pixels+1,alpha+1);
4466 AlphaBlendPixelInfo(image,p+2*GetPixelChannels(image),pixels+2,alpha+2);
4467 AlphaBlendPixelInfo(image,p+3*GetPixelChannels(image),pixels+3,alpha+3);
4468 AlphaBlendPixelInfo(image,p+4*GetPixelChannels(image),pixels+4,alpha+4);
4469 AlphaBlendPixelInfo(image,p+5*GetPixelChannels(image),pixels+5,alpha+5);
4470 AlphaBlendPixelInfo(image,p+6*GetPixelChannels(image),pixels+6,alpha+6);
4471 AlphaBlendPixelInfo(image,p+7*GetPixelChannels(image),pixels+7,alpha+7);
4472 AlphaBlendPixelInfo(image,p+8*GetPixelChannels(image),pixels+8,alpha+8);
4473 AlphaBlendPixelInfo(image,p+9*GetPixelChannels(image),pixels+9,alpha+9);
4474 AlphaBlendPixelInfo(image,p+10*GetPixelChannels(image),pixels+10,alpha+
4476 AlphaBlendPixelInfo(image,p+11*GetPixelChannels(image),pixels+11,alpha+
4478 AlphaBlendPixelInfo(image,p+12*GetPixelChannels(image),pixels+12,alpha+
4480 AlphaBlendPixelInfo(image,p+13*GetPixelChannels(image),pixels+13,alpha+
4482 AlphaBlendPixelInfo(image,p+14*GetPixelChannels(image),pixels+14,alpha+
4484 AlphaBlendPixelInfo(image,p+15*GetPixelChannels(image),pixels+15,alpha+
4494 for (i=(-1); i < 3L; i++)
4496 dy=CubicWeightingFunction((MagickRealType) i-delta.y);
4497 for (j=(-1); j < 3L; j++)
4499 dx=CubicWeightingFunction(delta.x-(MagickRealType) j);
4500 gamma=1.0/(fabs((double) alpha[n]) <= MagickEpsilon ? 1.0 : alpha[n]);
4501 pixel->red+=gamma*dx*dy*pixels[n].red;
4502 pixel->green+=gamma*dx*dy*pixels[n].green;
4503 pixel->blue+=gamma*dx*dy*pixels[n].blue;
4504 if (image->colorspace == CMYKColorspace)
4505 pixel->black+=gamma*dx*dy*pixels[n].black;
4506 pixel->alpha+=dx*dy*pixels[n].alpha;
4517 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4521 + I s F u z z y E q u i v a l e n c e P i x e l %
4525 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4527 % IsFuzzyEquivalencePixel() returns MagickTrue if the distance between two
4528 % pixels is less than the specified distance in a linear three (or four)u
4529 % dimensional color space.
4531 % The format of the IsFuzzyEquivalencePixel method is:
4533 % void IsFuzzyEquivalencePixel(const Image *image,const Quantum *p,
4536 % A description of each parameter follows:
4538 % o image: the image.
4545 MagickExport MagickBooleanType IsFuzzyEquivalencePixel(const Image *image,
4546 const Quantum *p,const Quantum *q)
4552 register MagickRealType
4556 fuzz=MagickMax(image->fuzz,(MagickRealType) MagickSQ1_2)*
4557 MagickMax(image->fuzz,(MagickRealType) MagickSQ1_2);
4560 if (image->matte != MagickFalse)
4563 Transparencies are involved - set alpha distance
4565 pixel=(MagickRealType) ((image->matte != MagickFalse ?
4566 GetPixelAlpha(image,p) : OpaqueAlpha)-(image->matte != MagickFalse ?
4567 GetPixelAlpha(image,q) : OpaqueAlpha));
4568 distance=pixel*pixel;
4569 if (distance > fuzz)
4570 return(MagickFalse);
4572 Generate a alpha scaling factor to generate a 4D cone on colorspace
4573 Note that if one color is transparent, distance has no color component.
4575 scale=QuantumScale*GetPixelAlpha(image,p);
4576 scale*=QuantumScale*GetPixelAlpha(image,q);
4577 if (scale <= MagickEpsilon)
4581 RGB or CMY color cube
4583 distance*=3.0; /* rescale appropriately */
4585 pixel=GetPixelRed(image,p)-(MagickRealType) GetPixelRed(image,q);
4586 if ((image->colorspace == HSLColorspace) ||
4587 (image->colorspace == HSBColorspace) ||
4588 (image->colorspace == HWBColorspace))
4591 Compute an arc distance for hue. It should be a vector angle of
4592 'S'/'W' length with 'L'/'B' forming appropriate cones.
4594 if (fabs((double) pixel) > (QuantumRange/2))
4595 pixel-=QuantumRange;
4598 distance+=scale*pixel*pixel;
4599 if (distance > fuzz)
4600 return(MagickFalse);
4601 pixel=GetPixelGreen(image,p)-(MagickRealType) GetPixelGreen(image,q);
4602 distance+=scale*pixel*pixel;
4603 if (distance > fuzz)
4604 return(MagickFalse);
4605 pixel=GetPixelBlue(image,p)-(MagickRealType) GetPixelBlue(image,q);
4606 distance+=scale*pixel*pixel;
4607 if (distance > fuzz)
4608 return(MagickFalse);
4613 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4617 + I s F u z z y E q u i v a l e n c e P i x e l I n f o %
4621 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4623 % IsFuzzyEquivalencePixelInfo() returns true if the distance between two
4624 % colors is less than the specified distance in a linear three (or four)
4625 % dimensional color space.
4627 % This implements the equivalent of...
4628 % fuzz < sqrt( color_distance^2 * u.a*v.a + alpha_distance^2 )
4630 % Which produces a multi-dimensional cone for that colorspace along the
4631 % transparency vector.
4633 % For example for an RGB
4634 % color_distance^2 = ( (u.r-v.r)^2 + (u.g-v.g)^2 + (u.b-v.b)^2 ) / 3
4636 % See http://www.imagemagick.org/Usage/bugs/fuzz_distance/
4638 % Hue colorspace distances need more work. Hue is not a distance, it is an
4641 % A check that q is in the same color space as p should be made and the
4642 % appropriate mapping made. -- Anthony Thyssen 8 December 2010
4644 % The format of the IsFuzzyEquivalencePixelInfo method is:
4646 % MagickBooleanType IsFuzzyEquivalencePixelInfo(const PixelInfo *p,
4647 % const PixelInfo *q)
4649 % A description of each parameter follows:
4656 MagickExport MagickBooleanType IsFuzzyEquivalencePixelInfo(const PixelInfo *p,
4663 register MagickRealType
4667 if ((p->fuzz == 0.0) && (q->fuzz == 0.0))
4668 return(IsPixelInfoEquivalent(p,q));
4670 fuzz=MagickMax(q->fuzz,(MagickRealType) MagickSQ1_2)*
4671 MagickMax(q->fuzz,(MagickRealType) MagickSQ1_2);
4672 else if (q->fuzz == 0.0)
4673 fuzz=MagickMax(p->fuzz,(MagickRealType) MagickSQ1_2)*
4674 MagickMax(p->fuzz,(MagickRealType) MagickSQ1_2);
4676 fuzz=MagickMax(p->fuzz,(MagickRealType) MagickSQ1_2)*
4677 MagickMax(q->fuzz,(MagickRealType) MagickSQ1_2);
4680 if ((p->matte != MagickFalse) || (q->matte != MagickFalse))
4683 Transparencies are involved - set alpha distance.
4685 pixel=(p->matte != MagickFalse ? p->alpha : OpaqueAlpha)-
4686 (q->matte != MagickFalse ? q->alpha : OpaqueAlpha);
4687 distance=pixel*pixel;
4688 if (distance > fuzz)
4689 return(MagickFalse);
4691 Generate a alpha scaling factor to generate a 4D cone on colorspace.
4692 Note that if one color is transparent, distance has no color component.
4694 if (p->matte != MagickFalse)
4695 scale=(QuantumScale*p->alpha);
4696 if (q->matte != MagickFalse)
4697 scale*=(QuantumScale*q->alpha);
4698 if (scale <= MagickEpsilon )
4702 CMYK create a CMY cube with a multi-dimensional cone toward black.
4704 if (p->colorspace == CMYKColorspace)
4706 pixel=p->black-q->black;
4707 distance+=pixel*pixel*scale;
4708 if (distance > fuzz)
4709 return(MagickFalse);
4710 scale*=(MagickRealType) (QuantumScale*(QuantumRange-p->black));
4711 scale*=(MagickRealType) (QuantumScale*(QuantumRange-q->black));
4714 RGB or CMY color cube.
4716 distance*=3.0; /* rescale appropriately */
4718 pixel=p->red-q->red;
4719 if ((p->colorspace == HSLColorspace) || (p->colorspace == HSBColorspace) ||
4720 (p->colorspace == HWBColorspace))
4722 /* This calculates a arc distance for hue
4723 Really if should be a vector angle of 'S'/'W' length
4724 with 'L'/'B' forming appropriate cones.
4725 In other words this is a hack - Anthony
4727 if (fabs((double) pixel) > (QuantumRange/2))
4728 pixel-=QuantumRange;
4731 distance+=pixel*pixel*scale;
4732 if (distance > fuzz)
4733 return(MagickFalse);
4734 pixel=p->green-q->green;
4735 distance+=pixel*pixel*scale;
4736 if (distance > fuzz)
4737 return(MagickFalse);
4738 pixel=p->blue-q->blue;
4739 distance+=pixel*pixel*scale;
4740 if (distance > fuzz)
4741 return(MagickFalse);
4746 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4750 + I s F u z z y E q u i v a l e n c e P i x e l P a c k e t %
4754 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4756 % IsFuzzyEquivalencePixelPacket() returns MagickTrue if the distance between
4757 % two pixels is less than the specified distance in a linear three (or four)
4758 % dimensional color space.
4760 % The format of the IsFuzzyEquivalencePixelPacket method is:
4762 % void IsFuzzyEquivalencePixelPacket(const Image *image,
4763 % const PixelPacket *p,const PixelPacket *q)
4765 % A description of each parameter follows:
4767 % o image: the image.
4774 MagickExport MagickBooleanType IsFuzzyEquivalencePixelPacket(const Image *image,
4775 const PixelPacket *p,const PixelPacket *q)
4781 register MagickRealType
4785 if ((image->fuzz == 0.0) && (image->matte == MagickFalse))
4786 return(IsPixelPacketEquivalent(p,q));
4787 fuzz=MagickMax(image->fuzz,(MagickRealType) MagickSQ1_2)*
4788 MagickMax(image->fuzz,(MagickRealType) MagickSQ1_2);
4791 if (image->matte != MagickFalse)
4794 Transparencies are involved - set alpha distance
4796 pixel=(MagickRealType) ((image->matte != MagickFalse ? p->alpha :
4797 OpaqueAlpha)-(image->matte != MagickFalse ? q->alpha : OpaqueAlpha));
4798 distance=pixel*pixel;
4799 if (distance > fuzz)
4800 return(MagickFalse);
4802 Generate a alpha scaling factor to generate a 4D cone on colorspace
4803 Note that if one color is transparent, distance has no color component.
4805 scale=QuantumScale*p->alpha;
4806 scale*=QuantumScale*q->alpha;
4807 if (scale <= MagickEpsilon)
4811 RGB or CMY color cube
4813 distance*=3.0; /* rescale appropriately */
4815 pixel=p->red-(MagickRealType) q->red;
4816 if ((image->colorspace == HSLColorspace) ||
4817 (image->colorspace == HSBColorspace) ||
4818 (image->colorspace == HWBColorspace))
4821 Compute an arc distance for hue. It should be a vector angle of
4822 'S'/'W' length with 'L'/'B' forming appropriate cones.
4824 if (fabs((double) pixel) > (QuantumRange/2))
4825 pixel-=QuantumRange;
4828 distance+=scale*pixel*pixel;
4829 if (distance > fuzz)
4830 return(MagickFalse);
4831 pixel=(MagickRealType) p->green-q->green;
4832 distance+=scale*pixel*pixel;
4833 if (distance > fuzz)
4834 return(MagickFalse);
4835 pixel=(MagickRealType) p->blue-q->blue;
4836 distance+=scale*pixel*pixel;
4837 if (distance > fuzz)
4838 return(MagickFalse);
4843 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4847 % P o p P i x e l C h a n n e l M a p %
4851 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4853 % PopPixelChannelMap() pops the pixel component map.
4855 % The format of the PopPixelChannelMap method is:
4857 % void PopPixelChannelMap(Image *image)
4859 % A description of each parameter follows:
4861 % o image: the image.
4864 MagickExport void PopPixelChannelMap(Image *image)
4868 ThrowFatalException(ResourceLimitFatalError,"PixelChannelMapStack");
4872 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4876 % P u s h P i x e l C h a n n e l M a p %
4880 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4882 % PushPixelChannelMap() pushes the pixel channel map from the specified
4885 % The format of the PushPixelChannelMap method is:
4887 % void PushPixelChannelMap(Image *image,const ChannelType channel_mask)
4889 % A description of each parameter follows:
4891 % o image: the image.
4893 % o channel_mask: the channel mask.
4896 MagickExport void PushPixelChannelMap(Image *image,
4897 const ChannelType channel_mask)
4900 if (image->map >= MaxPixelChannelMaps)
4901 ThrowFatalException(ResourceLimitFatalError,"PixelChannelMapStack");
4902 SetPixelChannelMap(image,channel_mask);
4906 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4910 % S e t P i x e l C h a n n e l M a p %
4914 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4916 % SetPixelChannelMap() sets the pixel channel map from the specified channel
4919 % The format of the SetPixelChannelMap method is:
4921 % void SetPixelChannelMap(Image *image,const ChannelType channel_mask)
4923 % A description of each parameter follows:
4925 % o image: the image.
4927 % o channel_mask: the channel mask.
4930 MagickExport void SetPixelChannelMap(Image *image,
4931 const ChannelType channel_mask)
4933 #define GetChannelBit(alpha,i) (((size_t) (alpha) >> (size_t) (i)) & 0x01)
4938 for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
4939 SetPixelChannelMapTraits(image,(PixelChannel) i,
4940 GetChannelBit(channel_mask,i) ? UpdatePixelTrait : CopyPixelTrait);
4941 for ( ; i < MaxPixelChannels; i++)
4942 SetPixelChannelMapTraits(image,(PixelChannel) i,UndefinedPixelTrait);
4946 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4950 + S t a n d a r d P i x e l C h a n n e l M a p %
4954 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4956 % StandardPixelChannelMap() defines the standard pixel component map.
4958 % The format of the StandardPixelChannelMap() method is:
4960 % void StandardPixelChannelMap(Image *image)
4962 % A description of each parameter follows:
4964 % o image: the image.
4967 MagickExport void StandardPixelChannelMap(Image *image)
4975 for (i=0; i < (ssize_t) MaxPixelChannels; i++)
4977 SetPixelChannelMapChannel(image,(PixelChannel) i,(PixelChannel) i);
4978 SetPixelChannelMapTraits(image,(PixelChannel) i,UndefinedPixelTrait);
4980 image->number_channels=4;
4981 if (0 && image->colorspace == GRAYColorspace)
4982 image->number_channels=2;
4983 if (image->colorspace == CMYKColorspace)
4984 image->number_channels++;
4985 if (image->storage_class == PseudoClass)
4986 image->number_channels++;
4987 for (i=0; i < (ssize_t) image->number_channels; i++)
4988 SetPixelChannelMapTraits(image,(PixelChannel) i,(PixelTrait)
4990 alpha_channel=GetPixelChannelMapChannel(image,AlphaPixelChannel);
4991 if (image->matte != MagickFalse)
4992 for (i=0; i < (ssize_t) image->number_channels; i++)
4993 if ((PixelChannel) i != alpha_channel)
4994 SetPixelChannelMapTraits(image,(PixelChannel) i,(PixelTrait)
4995 (UpdatePixelTrait | BlendPixelTrait));
4996 if (0 && image->colorspace == GRAYColorspace)
4998 image->number_channels=2;
4999 SetPixelChannelMapChannel(image,GreenPixelChannel,RedPixelChannel);
5000 SetPixelChannelMapChannel(image,BluePixelChannel,RedPixelChannel);
5002 if (image->storage_class == PseudoClass)
5004 SetPixelChannelMapChannel(image,IndexPixelChannel,IndexPixelChannel);
5005 SetPixelChannelMapTraits(image,IndexPixelChannel,CopyPixelTrait);
5007 image->number_channels+=image->number_meta_channels;
5008 for ( ; i < (ssize_t) image->number_channels; i++)
5009 SetPixelChannelMapTraits(image,(PixelChannel) i,CopyPixelTrait);