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 "magick/studio.h"
42 #include "magick/property.h"
43 #include "magick/blob.h"
44 #include "magick/blob-private.h"
45 #include "magick/color-private.h"
46 #include "magick/draw.h"
47 #include "magick/exception.h"
48 #include "magick/exception-private.h"
49 #include "magick/cache.h"
50 #include "magick/constitute.h"
51 #include "magick/delegate.h"
52 #include "magick/geometry.h"
53 #include "magick/list.h"
54 #include "magick/magick.h"
55 #include "magick/memory_.h"
56 #include "magick/monitor.h"
57 #include "magick/option.h"
58 #include "magick/pixel.h"
59 #include "magick/pixel-private.h"
60 #include "magick/quantum.h"
61 #include "magick/resource_.h"
62 #include "magick/semaphore.h"
63 #include "magick/statistic.h"
64 #include "magick/stream.h"
65 #include "magick/string_.h"
66 #include "magick/transform.h"
67 #include "magick/utility.h"
70 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
74 % E x p o r t I m a g e P i x e l s %
78 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
80 % ExportImagePixels() extracts pixel data from an image and returns it to you.
81 % The method returns MagickTrue on success otherwise MagickFalse if an error is
82 % encountered. The data is returned as char, short int, int, ssize_t, float,
83 % or double in the order specified by map.
85 % Suppose you want to extract the first scanline of a 640x480 image as
86 % character data in red-green-blue order:
88 % ExportImagePixels(image,0,0,640,1,"RGB",CharPixel,pixels,exception);
90 % The format of the ExportImagePixels method is:
92 % MagickBooleanType ExportImagePixels(const Image *image,
93 % const ssize_t x_offset,const ssize_t y_offset,const size_t columns,
94 % const size_t rows,const char *map,const StorageType type,
95 % void *pixels,ExceptionInfo *exception)
97 % A description of each parameter follows:
101 % o x_offset,y_offset,columns,rows: These values define the perimeter
102 % of a region of pixels you want to extract.
104 % o map: This string reflects the expected ordering of the pixel array.
105 % It can be any combination or order of R = red, G = green, B = blue,
106 % A = alpha (0 is transparent), O = opacity (0 is opaque), C = cyan,
107 % Y = yellow, M = magenta, K = black, I = intensity (for grayscale),
110 % o type: Define the data type of the pixels. Float and double types are
111 % normalized to [0..1] otherwise [0..QuantumRange]. Choose from these
112 % types: CharPixel, DoublePixel, FloatPixel, IntegerPixel, LongPixel,
113 % QuantumPixel, or ShortPixel.
115 % o pixels: This array of values contain the pixel components as defined by
116 % map and type. You must preallocate this array where the expected
117 % length varies depending on the values of width, height, map, and type.
119 % o exception: return any errors or warnings in this structure.
122 MagickExport MagickBooleanType ExportImagePixels(const Image *image,
123 const ssize_t x_offset,const ssize_t y_offset,const size_t columns,
124 const size_t rows,const char *map,const StorageType type,void *pixels,
125 ExceptionInfo *exception)
134 register const IndexPacket
137 register const PixelPacket
146 assert(image != (Image *) NULL);
147 assert(image->signature == MagickSignature);
148 if (image->debug != MagickFalse)
149 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
151 quantum_map=(QuantumType *) AcquireQuantumMemory(length,sizeof(*quantum_map));
152 if (quantum_map == (QuantumType *) NULL)
154 (void) ThrowMagickException(exception,GetMagickModule(),
155 ResourceLimitError,"MemoryAllocationFailed","`%s'",image->filename);
158 for (i=0; i < (ssize_t) length; i++)
165 quantum_map[i]=AlphaQuantum;
171 quantum_map[i]=BlueQuantum;
177 quantum_map[i]=CyanQuantum;
178 if (image->colorspace == CMYKColorspace)
180 quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
181 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
182 "ColorSeparatedImageRequired","`%s'",map);
188 quantum_map[i]=GreenQuantum;
194 quantum_map[i]=IndexQuantum;
200 quantum_map[i]=BlackQuantum;
201 if (image->colorspace == CMYKColorspace)
203 quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
204 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
205 "ColorSeparatedImageRequired","`%s'",map);
211 quantum_map[i]=MagentaQuantum;
212 if (image->colorspace == CMYKColorspace)
214 quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
215 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
216 "ColorSeparatedImageRequired","`%s'",map);
222 quantum_map[i]=OpacityQuantum;
228 quantum_map[i]=UndefinedQuantum;
234 quantum_map[i]=RedQuantum;
240 quantum_map[i]=YellowQuantum;
241 if (image->colorspace == CMYKColorspace)
243 quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
244 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
245 "ColorSeparatedImageRequired","`%s'",map);
250 quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
251 (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
252 "UnrecognizedPixelMap","`%s'",map);
261 register unsigned char
264 q=(unsigned char *) pixels;
265 if (LocaleCompare(map,"BGR") == 0)
267 for (y=0; y < (ssize_t) rows; y++)
269 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
270 if (p == (const PixelPacket *) NULL)
272 for (x=0; x < (ssize_t) columns; x++)
274 *q++=ScaleQuantumToChar(GetBluePixelComponent(p));
275 *q++=ScaleQuantumToChar(GetGreenPixelComponent(p));
276 *q++=ScaleQuantumToChar(GetRedPixelComponent(p));
282 if (LocaleCompare(map,"BGRA") == 0)
284 for (y=0; y < (ssize_t) rows; y++)
286 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
287 if (p == (const PixelPacket *) NULL)
289 for (x=0; x < (ssize_t) columns; x++)
291 *q++=ScaleQuantumToChar(GetBluePixelComponent(p));
292 *q++=ScaleQuantumToChar(GetGreenPixelComponent(p));
293 *q++=ScaleQuantumToChar(GetRedPixelComponent(p));
294 *q++=ScaleQuantumToChar((Quantum) (GetAlphaPixelComponent(p)));
300 if (LocaleCompare(map,"BGRP") == 0)
302 for (y=0; y < (ssize_t) rows; y++)
304 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
305 if (p == (const PixelPacket *) NULL)
307 for (x=0; x < (ssize_t) columns; x++)
309 *q++=ScaleQuantumToChar(GetBluePixelComponent(p));
310 *q++=ScaleQuantumToChar(GetGreenPixelComponent(p));
311 *q++=ScaleQuantumToChar(GetRedPixelComponent(p));
312 *q++=ScaleQuantumToChar((Quantum) 0);
318 if (LocaleCompare(map,"I") == 0)
320 for (y=0; y < (ssize_t) rows; y++)
322 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
323 if (p == (const PixelPacket *) NULL)
325 for (x=0; x < (ssize_t) columns; x++)
327 *q++=ScaleQuantumToChar(PixelIntensityToQuantum(p));
333 if (LocaleCompare(map,"RGB") == 0)
335 for (y=0; y < (ssize_t) rows; y++)
337 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
338 if (p == (const PixelPacket *) NULL)
340 for (x=0; x < (ssize_t) columns; x++)
342 *q++=ScaleQuantumToChar(GetRedPixelComponent(p));
343 *q++=ScaleQuantumToChar(GetGreenPixelComponent(p));
344 *q++=ScaleQuantumToChar(GetBluePixelComponent(p));
350 if (LocaleCompare(map,"RGBA") == 0)
352 for (y=0; y < (ssize_t) rows; y++)
354 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
355 if (p == (const PixelPacket *) NULL)
357 for (x=0; x < (ssize_t) columns; x++)
359 *q++=ScaleQuantumToChar(GetRedPixelComponent(p));
360 *q++=ScaleQuantumToChar(GetGreenPixelComponent(p));
361 *q++=ScaleQuantumToChar(GetBluePixelComponent(p));
362 *q++=ScaleQuantumToChar((Quantum) (GetAlphaPixelComponent(p)));
368 if (LocaleCompare(map,"RGBP") == 0)
370 for (y=0; y < (ssize_t) rows; y++)
372 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
373 if (p == (const PixelPacket *) NULL)
375 for (x=0; x < (ssize_t) columns; x++)
377 *q++=ScaleQuantumToChar(GetRedPixelComponent(p));
378 *q++=ScaleQuantumToChar(GetGreenPixelComponent(p));
379 *q++=ScaleQuantumToChar(GetBluePixelComponent(p));
380 *q++=ScaleQuantumToChar((Quantum) 0);
386 for (y=0; y < (ssize_t) rows; y++)
388 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
389 if (p == (const PixelPacket *) NULL)
391 indexes=GetVirtualIndexQueue(image);
392 for (x=0; x < (ssize_t) columns; x++)
394 for (i=0; i < (ssize_t) length; i++)
397 switch (quantum_map[i])
402 *q=ScaleQuantumToChar(GetRedPixelComponent(p));
408 *q=ScaleQuantumToChar(GetGreenPixelComponent(p));
414 *q=ScaleQuantumToChar(GetBluePixelComponent(p));
419 *q=ScaleQuantumToChar((Quantum) (GetAlphaPixelComponent(p)));
424 *q=ScaleQuantumToChar(GetOpacityPixelComponent(p));
429 if (image->colorspace == CMYKColorspace)
430 *q=ScaleQuantumToChar(GetIndexPixelComponent(indexes+x));
435 *q=ScaleQuantumToChar(PixelIntensityToQuantum(p));
454 if (LocaleCompare(map,"BGR") == 0)
456 for (y=0; y < (ssize_t) rows; y++)
458 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
459 if (p == (const PixelPacket *) NULL)
461 for (x=0; x < (ssize_t) columns; x++)
463 *q++=(double) (QuantumScale*GetBluePixelComponent(p));
464 *q++=(double) (QuantumScale*GetGreenPixelComponent(p));
465 *q++=(double) (QuantumScale*GetRedPixelComponent(p));
471 if (LocaleCompare(map,"BGRA") == 0)
473 for (y=0; y < (ssize_t) rows; y++)
475 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
476 if (p == (const PixelPacket *) NULL)
478 for (x=0; x < (ssize_t) columns; x++)
480 *q++=(double) (QuantumScale*GetBluePixelComponent(p));
481 *q++=(double) (QuantumScale*GetGreenPixelComponent(p));
482 *q++=(double) (QuantumScale*GetRedPixelComponent(p));
483 *q++=(double) (QuantumScale*((Quantum) (QuantumRange-
484 GetOpacityPixelComponent(p))));
490 if (LocaleCompare(map,"BGRP") == 0)
492 for (y=0; y < (ssize_t) rows; y++)
494 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
495 if (p == (const PixelPacket *) NULL)
497 for (x=0; x < (ssize_t) columns; x++)
499 *q++=(double) (QuantumScale*GetBluePixelComponent(p));
500 *q++=(double) (QuantumScale*GetGreenPixelComponent(p));
501 *q++=(double) (QuantumScale*GetRedPixelComponent(p));
508 if (LocaleCompare(map,"I") == 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 PixelPacket *) NULL)
515 for (x=0; x < (ssize_t) columns; x++)
517 *q++=(double) (QuantumScale*PixelIntensityToQuantum(p));
523 if (LocaleCompare(map,"RGB") == 0)
525 for (y=0; y < (ssize_t) rows; y++)
527 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
528 if (p == (const PixelPacket *) NULL)
530 for (x=0; x < (ssize_t) columns; x++)
532 *q++=(double) (QuantumScale*GetRedPixelComponent(p));
533 *q++=(double) (QuantumScale*GetGreenPixelComponent(p));
534 *q++=(double) (QuantumScale*GetBluePixelComponent(p));
540 if (LocaleCompare(map,"RGBA") == 0)
542 for (y=0; y < (ssize_t) rows; y++)
544 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
545 if (p == (const PixelPacket *) NULL)
547 for (x=0; x < (ssize_t) columns; x++)
549 *q++=(double) (QuantumScale*GetRedPixelComponent(p));
550 *q++=(double) (QuantumScale*GetGreenPixelComponent(p));
551 *q++=(double) (QuantumScale*GetBluePixelComponent(p));
552 *q++=(double) (QuantumScale*((Quantum) (QuantumRange-
553 GetOpacityPixelComponent(p))));
559 if (LocaleCompare(map,"RGBP") == 0)
561 for (y=0; y < (ssize_t) rows; y++)
563 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
564 if (p == (const PixelPacket *) NULL)
566 for (x=0; x < (ssize_t) columns; x++)
568 *q++=(double) (QuantumScale*GetRedPixelComponent(p));
569 *q++=(double) (QuantumScale*GetGreenPixelComponent(p));
570 *q++=(double) (QuantumScale*GetBluePixelComponent(p));
577 for (y=0; y < (ssize_t) rows; y++)
579 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
580 if (p == (const PixelPacket *) NULL)
582 indexes=GetVirtualIndexQueue(image);
583 for (x=0; x < (ssize_t) columns; x++)
585 for (i=0; i < (ssize_t) length; i++)
588 switch (quantum_map[i])
593 *q=(double) (QuantumScale*GetRedPixelComponent(p));
599 *q=(double) (QuantumScale*GetGreenPixelComponent(p));
605 *q=(double) (QuantumScale*GetBluePixelComponent(p));
610 *q=(double) (QuantumScale*((Quantum) (QuantumRange-
611 GetOpacityPixelComponent(p))));
616 *q=(double) (QuantumScale*GetOpacityPixelComponent(p));
621 if (image->colorspace == CMYKColorspace)
622 *q=(double) (QuantumScale*GetIndexPixelComponent(indexes+x));
627 *q=(double) (QuantumScale*PixelIntensityToQuantum(p));
646 if (LocaleCompare(map,"BGR") == 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 PixelPacket *) NULL)
653 for (x=0; x < (ssize_t) columns; x++)
655 *q++=(float) (QuantumScale*GetBluePixelComponent(p));
656 *q++=(float) (QuantumScale*GetGreenPixelComponent(p));
657 *q++=(float) (QuantumScale*GetRedPixelComponent(p));
663 if (LocaleCompare(map,"BGRA") == 0)
665 for (y=0; y < (ssize_t) rows; y++)
667 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
668 if (p == (const PixelPacket *) NULL)
670 for (x=0; x < (ssize_t) columns; x++)
672 *q++=(float) (QuantumScale*GetBluePixelComponent(p));
673 *q++=(float) (QuantumScale*GetGreenPixelComponent(p));
674 *q++=(float) (QuantumScale*GetRedPixelComponent(p));
675 *q++=(float) (QuantumScale*(Quantum) (GetAlphaPixelComponent(p)));
681 if (LocaleCompare(map,"BGRP") == 0)
683 for (y=0; y < (ssize_t) rows; y++)
685 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
686 if (p == (const PixelPacket *) NULL)
688 for (x=0; x < (ssize_t) columns; x++)
690 *q++=(float) (QuantumScale*GetBluePixelComponent(p));
691 *q++=(float) (QuantumScale*GetGreenPixelComponent(p));
692 *q++=(float) (QuantumScale*GetRedPixelComponent(p));
699 if (LocaleCompare(map,"I") == 0)
701 for (y=0; y < (ssize_t) rows; y++)
703 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
704 if (p == (const PixelPacket *) NULL)
706 for (x=0; x < (ssize_t) columns; x++)
708 *q++=(float) (QuantumScale*PixelIntensityToQuantum(p));
714 if (LocaleCompare(map,"RGB") == 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 PixelPacket *) NULL)
721 for (x=0; x < (ssize_t) columns; x++)
723 *q++=(float) (QuantumScale*GetRedPixelComponent(p));
724 *q++=(float) (QuantumScale*GetGreenPixelComponent(p));
725 *q++=(float) (QuantumScale*GetBluePixelComponent(p));
731 if (LocaleCompare(map,"RGBA") == 0)
733 for (y=0; y < (ssize_t) rows; y++)
735 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
736 if (p == (const PixelPacket *) NULL)
738 for (x=0; x < (ssize_t) columns; x++)
740 *q++=(float) (QuantumScale*GetRedPixelComponent(p));
741 *q++=(float) (QuantumScale*GetGreenPixelComponent(p));
742 *q++=(float) (QuantumScale*GetBluePixelComponent(p));
743 *q++=(float) (QuantumScale*((Quantum) (GetAlphaPixelComponent(p))));
749 if (LocaleCompare(map,"RGBP") == 0)
751 for (y=0; y < (ssize_t) rows; y++)
753 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
754 if (p == (const PixelPacket *) NULL)
756 for (x=0; x < (ssize_t) columns; x++)
758 *q++=(float) (QuantumScale*GetRedPixelComponent(p));
759 *q++=(float) (QuantumScale*GetGreenPixelComponent(p));
760 *q++=(float) (QuantumScale*GetBluePixelComponent(p));
767 for (y=0; y < (ssize_t) rows; y++)
769 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
770 if (p == (const PixelPacket *) NULL)
772 indexes=GetVirtualIndexQueue(image);
773 for (x=0; x < (ssize_t) columns; x++)
775 for (i=0; i < (ssize_t) length; i++)
778 switch (quantum_map[i])
783 *q=(float) (QuantumScale*GetRedPixelComponent(p));
789 *q=(float) (QuantumScale*GetGreenPixelComponent(p));
795 *q=(float) (QuantumScale*GetBluePixelComponent(p));
800 *q=(float) (QuantumScale*((Quantum) (GetAlphaPixelComponent(p))));
805 *q=(float) (QuantumScale*GetOpacityPixelComponent(p));
810 if (image->colorspace == CMYKColorspace)
811 *q=(float) (QuantumScale*GetIndexPixelComponent(indexes+x));
816 *q=(float) (QuantumScale*PixelIntensityToQuantum(p));
831 register unsigned int
834 q=(unsigned int *) pixels;
835 if (LocaleCompare(map,"BGR") == 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 PixelPacket *) NULL)
842 for (x=0; x < (ssize_t) columns; x++)
844 *q++=(unsigned int) ScaleQuantumToLong(GetBluePixelComponent(p));
845 *q++=(unsigned int) ScaleQuantumToLong(GetGreenPixelComponent(p));
846 *q++=(unsigned int) ScaleQuantumToLong(GetRedPixelComponent(p));
852 if (LocaleCompare(map,"BGRA") == 0)
854 for (y=0; y < (ssize_t) rows; y++)
856 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
857 if (p == (const PixelPacket *) NULL)
859 for (x=0; x < (ssize_t) columns; x++)
861 *q++=(unsigned int) ScaleQuantumToLong(GetBluePixelComponent(p));
862 *q++=(unsigned int) ScaleQuantumToLong(GetGreenPixelComponent(p));
863 *q++=(unsigned int) ScaleQuantumToLong(GetRedPixelComponent(p));
864 *q++=(unsigned int) ScaleQuantumToLong((Quantum) (QuantumRange-
865 GetOpacityPixelComponent(p)));
871 if (LocaleCompare(map,"BGRP") == 0)
873 for (y=0; y < (ssize_t) rows; y++)
875 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
876 if (p == (const PixelPacket *) NULL)
878 for (x=0; x < (ssize_t) columns; x++)
880 *q++=(unsigned int) ScaleQuantumToLong(GetBluePixelComponent(p));
881 *q++=(unsigned int) ScaleQuantumToLong(GetGreenPixelComponent(p));
882 *q++=(unsigned int) ScaleQuantumToLong(GetRedPixelComponent(p));
889 if (LocaleCompare(map,"I") == 0)
891 for (y=0; y < (ssize_t) rows; y++)
893 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
894 if (p == (const PixelPacket *) NULL)
896 for (x=0; x < (ssize_t) columns; x++)
899 ScaleQuantumToLong(PixelIntensityToQuantum(p));
905 if (LocaleCompare(map,"RGB") == 0)
907 for (y=0; y < (ssize_t) rows; y++)
909 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
910 if (p == (const PixelPacket *) NULL)
912 for (x=0; x < (ssize_t) columns; x++)
914 *q++=(unsigned int) ScaleQuantumToLong(GetRedPixelComponent(p));
915 *q++=(unsigned int) ScaleQuantumToLong(GetGreenPixelComponent(p));
916 *q++=(unsigned int) ScaleQuantumToLong(GetBluePixelComponent(p));
922 if (LocaleCompare(map,"RGBA") == 0)
924 for (y=0; y < (ssize_t) rows; y++)
926 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
927 if (p == (const PixelPacket *) NULL)
929 for (x=0; x < (ssize_t) columns; x++)
931 *q++=(unsigned int) ScaleQuantumToLong(GetRedPixelComponent(p));
932 *q++=(unsigned int) ScaleQuantumToLong(GetGreenPixelComponent(p));
933 *q++=(unsigned int) ScaleQuantumToLong(GetBluePixelComponent(p));
934 *q++=(unsigned int) ScaleQuantumToLong((Quantum)
935 (GetAlphaPixelComponent(p)));
941 if (LocaleCompare(map,"RGBP") == 0)
943 for (y=0; y < (ssize_t) rows; y++)
945 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
946 if (p == (const PixelPacket *) NULL)
948 for (x=0; x < (ssize_t) columns; x++)
950 *q++=(unsigned int) ScaleQuantumToLong(GetRedPixelComponent(p));
951 *q++=(unsigned int) ScaleQuantumToLong(GetGreenPixelComponent(p));
952 *q++=(unsigned int) ScaleQuantumToLong(GetBluePixelComponent(p));
959 for (y=0; y < (ssize_t) rows; y++)
961 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
962 if (p == (const PixelPacket *) NULL)
964 indexes=GetVirtualIndexQueue(image);
965 for (x=0; x < (ssize_t) columns; x++)
967 for (i=0; i < (ssize_t) length; i++)
970 switch (quantum_map[i])
975 *q=(unsigned int) ScaleQuantumToLong(GetRedPixelComponent(p));
981 *q=(unsigned int) ScaleQuantumToLong(GetGreenPixelComponent(p));
987 *q=(unsigned int) ScaleQuantumToLong(GetBluePixelComponent(p));
992 *q=(unsigned int) ScaleQuantumToLong((Quantum) (QuantumRange-
993 GetOpacityPixelComponent(p)));
998 *q=(unsigned int) ScaleQuantumToLong(GetOpacityPixelComponent(p));
1003 if (image->colorspace == CMYKColorspace)
1004 *q=(unsigned int) ScaleQuantumToLong(GetIndexPixelComponent(indexes+x));
1010 ScaleQuantumToLong(PixelIntensityToQuantum(p));
1028 q=(size_t *) pixels;
1029 if (LocaleCompare(map,"BGR") == 0)
1031 for (y=0; y < (ssize_t) rows; y++)
1033 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1034 if (p == (const PixelPacket *) NULL)
1036 for (x=0; x < (ssize_t) columns; x++)
1038 *q++=ScaleQuantumToLong(GetBluePixelComponent(p));
1039 *q++=ScaleQuantumToLong(GetGreenPixelComponent(p));
1040 *q++=ScaleQuantumToLong(GetRedPixelComponent(p));
1046 if (LocaleCompare(map,"BGRA") == 0)
1048 for (y=0; y < (ssize_t) rows; y++)
1050 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1051 if (p == (const PixelPacket *) NULL)
1053 for (x=0; x < (ssize_t) columns; x++)
1055 *q++=ScaleQuantumToLong(GetBluePixelComponent(p));
1056 *q++=ScaleQuantumToLong(GetGreenPixelComponent(p));
1057 *q++=ScaleQuantumToLong(GetRedPixelComponent(p));
1058 *q++=ScaleQuantumToLong((Quantum) (GetAlphaPixelComponent(p)));
1064 if (LocaleCompare(map,"BGRP") == 0)
1066 for (y=0; y < (ssize_t) rows; y++)
1068 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1069 if (p == (const PixelPacket *) NULL)
1071 for (x=0; x < (ssize_t) columns; x++)
1073 *q++=ScaleQuantumToLong(GetBluePixelComponent(p));
1074 *q++=ScaleQuantumToLong(GetGreenPixelComponent(p));
1075 *q++=ScaleQuantumToLong(GetRedPixelComponent(p));
1082 if (LocaleCompare(map,"I") == 0)
1084 for (y=0; y < (ssize_t) rows; y++)
1086 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1087 if (p == (const PixelPacket *) NULL)
1089 for (x=0; x < (ssize_t) columns; x++)
1091 *q++=ScaleQuantumToLong(PixelIntensityToQuantum(p));
1097 if (LocaleCompare(map,"RGB") == 0)
1099 for (y=0; y < (ssize_t) rows; y++)
1101 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1102 if (p == (const PixelPacket *) NULL)
1104 for (x=0; x < (ssize_t) columns; x++)
1106 *q++=ScaleQuantumToLong(GetRedPixelComponent(p));
1107 *q++=ScaleQuantumToLong(GetGreenPixelComponent(p));
1108 *q++=ScaleQuantumToLong(GetBluePixelComponent(p));
1114 if (LocaleCompare(map,"RGBA") == 0)
1116 for (y=0; y < (ssize_t) rows; y++)
1118 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1119 if (p == (const PixelPacket *) NULL)
1121 for (x=0; x < (ssize_t) columns; x++)
1123 *q++=ScaleQuantumToLong(GetRedPixelComponent(p));
1124 *q++=ScaleQuantumToLong(GetGreenPixelComponent(p));
1125 *q++=ScaleQuantumToLong(GetBluePixelComponent(p));
1126 *q++=ScaleQuantumToLong((Quantum) (GetAlphaPixelComponent(p)));
1132 if (LocaleCompare(map,"RGBP") == 0)
1134 for (y=0; y < (ssize_t) rows; y++)
1136 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1137 if (p == (const PixelPacket *) NULL)
1139 for (x=0; x < (ssize_t) columns; x++)
1141 *q++=ScaleQuantumToLong(GetRedPixelComponent(p));
1142 *q++=ScaleQuantumToLong(GetGreenPixelComponent(p));
1143 *q++=ScaleQuantumToLong(GetBluePixelComponent(p));
1150 for (y=0; y < (ssize_t) rows; y++)
1152 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1153 if (p == (const PixelPacket *) NULL)
1155 indexes=GetVirtualIndexQueue(image);
1156 for (x=0; x < (ssize_t) columns; x++)
1158 for (i=0; i < (ssize_t) length; i++)
1161 switch (quantum_map[i])
1166 *q=ScaleQuantumToLong(GetRedPixelComponent(p));
1170 case MagentaQuantum:
1172 *q=ScaleQuantumToLong(GetGreenPixelComponent(p));
1178 *q=ScaleQuantumToLong(GetBluePixelComponent(p));
1183 *q=ScaleQuantumToLong((Quantum) (GetAlphaPixelComponent(p)));
1186 case OpacityQuantum:
1188 *q=ScaleQuantumToLong(GetOpacityPixelComponent(p));
1193 if (image->colorspace == CMYKColorspace)
1194 *q=ScaleQuantumToLong(GetIndexPixelComponent(indexes+x));
1199 *q=ScaleQuantumToLong(PixelIntensityToQuantum(p));
1217 q=(Quantum *) pixels;
1218 if (LocaleCompare(map,"BGR") == 0)
1220 for (y=0; y < (ssize_t) rows; y++)
1222 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1223 if (p == (const PixelPacket *) NULL)
1225 for (x=0; x < (ssize_t) columns; x++)
1227 *q++=GetBluePixelComponent(p);
1228 *q++=GetGreenPixelComponent(p);
1229 *q++=GetRedPixelComponent(p);
1235 if (LocaleCompare(map,"BGRA") == 0)
1237 for (y=0; y < (ssize_t) rows; y++)
1239 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1240 if (p == (const PixelPacket *) NULL)
1242 for (x=0; x < (ssize_t) columns; x++)
1244 *q++=GetBluePixelComponent(p);
1245 *q++=GetGreenPixelComponent(p);
1246 *q++=GetRedPixelComponent(p);
1247 *q++=(Quantum) (GetAlphaPixelComponent(p));
1253 if (LocaleCompare(map,"BGRP") == 0)
1255 for (y=0; y < (ssize_t) rows; y++)
1257 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1258 if (p == (const PixelPacket *) NULL)
1260 for (x=0; x < (ssize_t) columns; x++)
1262 *q++=GetBluePixelComponent(p);
1263 *q++=GetGreenPixelComponent(p);
1264 *q++=GetRedPixelComponent(p);
1271 if (LocaleCompare(map,"I") == 0)
1273 for (y=0; y < (ssize_t) rows; y++)
1275 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1276 if (p == (const PixelPacket *) NULL)
1278 for (x=0; x < (ssize_t) columns; x++)
1280 *q++=PixelIntensityToQuantum(p);
1286 if (LocaleCompare(map,"RGB") == 0)
1288 for (y=0; y < (ssize_t) rows; y++)
1290 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1291 if (p == (const PixelPacket *) NULL)
1293 for (x=0; x < (ssize_t) columns; x++)
1295 *q++=GetRedPixelComponent(p);
1296 *q++=GetGreenPixelComponent(p);
1297 *q++=GetBluePixelComponent(p);
1303 if (LocaleCompare(map,"RGBA") == 0)
1305 for (y=0; y < (ssize_t) rows; y++)
1307 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1308 if (p == (const PixelPacket *) NULL)
1310 for (x=0; x < (ssize_t) columns; x++)
1312 *q++=GetRedPixelComponent(p);
1313 *q++=GetGreenPixelComponent(p);
1314 *q++=GetBluePixelComponent(p);
1315 *q++=(Quantum) (GetAlphaPixelComponent(p));
1321 if (LocaleCompare(map,"RGBP") == 0)
1323 for (y=0; y < (ssize_t) rows; y++)
1325 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1326 if (p == (const PixelPacket *) NULL)
1328 for (x=0; x < (ssize_t) columns; x++)
1330 *q++=GetRedPixelComponent(p);
1331 *q++=GetGreenPixelComponent(p);
1332 *q++=GetBluePixelComponent(p);
1339 for (y=0; y < (ssize_t) rows; y++)
1341 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1342 if (p == (const PixelPacket *) NULL)
1344 indexes=GetVirtualIndexQueue(image);
1345 for (x=0; x < (ssize_t) columns; x++)
1347 for (i=0; i < (ssize_t) length; i++)
1350 switch (quantum_map[i])
1355 *q=GetRedPixelComponent(p);
1359 case MagentaQuantum:
1361 *q=GetGreenPixelComponent(p);
1367 *q=GetBluePixelComponent(p);
1372 *q=(Quantum) (GetAlphaPixelComponent(p));
1375 case OpacityQuantum:
1377 *q=GetOpacityPixelComponent(p);
1382 if (image->colorspace == CMYKColorspace)
1383 *q=GetIndexPixelComponent(indexes+x);
1388 *q=(PixelIntensityToQuantum(p));
1403 register unsigned short
1406 q=(unsigned short *) pixels;
1407 if (LocaleCompare(map,"BGR") == 0)
1409 for (y=0; y < (ssize_t) rows; y++)
1411 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1412 if (p == (const PixelPacket *) NULL)
1414 for (x=0; x < (ssize_t) columns; x++)
1416 *q++=ScaleQuantumToShort(GetBluePixelComponent(p));
1417 *q++=ScaleQuantumToShort(GetGreenPixelComponent(p));
1418 *q++=ScaleQuantumToShort(GetRedPixelComponent(p));
1424 if (LocaleCompare(map,"BGRA") == 0)
1426 for (y=0; y < (ssize_t) rows; y++)
1428 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1429 if (p == (const PixelPacket *) NULL)
1431 for (x=0; x < (ssize_t) columns; x++)
1433 *q++=ScaleQuantumToShort(GetBluePixelComponent(p));
1434 *q++=ScaleQuantumToShort(GetGreenPixelComponent(p));
1435 *q++=ScaleQuantumToShort(GetRedPixelComponent(p));
1436 *q++=ScaleQuantumToShort((Quantum) (GetAlphaPixelComponent(p)));
1442 if (LocaleCompare(map,"BGRP") == 0)
1444 for (y=0; y < (ssize_t) rows; y++)
1446 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1447 if (p == (const PixelPacket *) NULL)
1449 for (x=0; x < (ssize_t) columns; x++)
1451 *q++=ScaleQuantumToShort(GetBluePixelComponent(p));
1452 *q++=ScaleQuantumToShort(GetGreenPixelComponent(p));
1453 *q++=ScaleQuantumToShort(GetRedPixelComponent(p));
1460 if (LocaleCompare(map,"I") == 0)
1462 for (y=0; y < (ssize_t) rows; y++)
1464 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1465 if (p == (const PixelPacket *) NULL)
1467 for (x=0; x < (ssize_t) columns; x++)
1469 *q++=ScaleQuantumToShort(PixelIntensityToQuantum(p));
1475 if (LocaleCompare(map,"RGB") == 0)
1477 for (y=0; y < (ssize_t) rows; y++)
1479 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1480 if (p == (const PixelPacket *) NULL)
1482 for (x=0; x < (ssize_t) columns; x++)
1484 *q++=ScaleQuantumToShort(GetRedPixelComponent(p));
1485 *q++=ScaleQuantumToShort(GetGreenPixelComponent(p));
1486 *q++=ScaleQuantumToShort(GetBluePixelComponent(p));
1492 if (LocaleCompare(map,"RGBA") == 0)
1494 for (y=0; y < (ssize_t) rows; y++)
1496 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1497 if (p == (const PixelPacket *) NULL)
1499 for (x=0; x < (ssize_t) columns; x++)
1501 *q++=ScaleQuantumToShort(GetRedPixelComponent(p));
1502 *q++=ScaleQuantumToShort(GetGreenPixelComponent(p));
1503 *q++=ScaleQuantumToShort(GetBluePixelComponent(p));
1504 *q++=ScaleQuantumToShort((Quantum) (GetAlphaPixelComponent(p)));
1510 if (LocaleCompare(map,"RGBP") == 0)
1512 for (y=0; y < (ssize_t) rows; y++)
1514 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1515 if (p == (const PixelPacket *) NULL)
1517 for (x=0; x < (ssize_t) columns; x++)
1519 *q++=ScaleQuantumToShort(GetRedPixelComponent(p));
1520 *q++=ScaleQuantumToShort(GetGreenPixelComponent(p));
1521 *q++=ScaleQuantumToShort(GetBluePixelComponent(p));
1528 for (y=0; y < (ssize_t) rows; y++)
1530 p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
1531 if (p == (const PixelPacket *) NULL)
1533 indexes=GetVirtualIndexQueue(image);
1534 for (x=0; x < (ssize_t) columns; x++)
1536 for (i=0; i < (ssize_t) length; i++)
1539 switch (quantum_map[i])
1544 *q=ScaleQuantumToShort(GetRedPixelComponent(p));
1548 case MagentaQuantum:
1550 *q=ScaleQuantumToShort(GetGreenPixelComponent(p));
1556 *q=ScaleQuantumToShort(GetBluePixelComponent(p));
1561 *q=ScaleQuantumToShort((Quantum) (GetAlphaPixelComponent(p)));
1564 case OpacityQuantum:
1566 *q=ScaleQuantumToShort(GetOpacityPixelComponent(p));
1571 if (image->colorspace == CMYKColorspace)
1572 *q=ScaleQuantumToShort(GetIndexPixelComponent(indexes+x));
1577 *q=ScaleQuantumToShort(PixelIntensityToQuantum(p));
1592 quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
1593 (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
1594 "UnrecognizedPixelMap","`%s'",map);
1598 quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
1603 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1607 % G e t M a g i c k P i x e l P a c k e t %
1611 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1613 % GetMagickPixelPacket() initializes the MagickPixelPacket structure.
1615 % The format of the GetMagickPixelPacket method is:
1617 % GetMagickPixelPacket(const Image *image,MagickPixelPacket *pixel)
1619 % A description of each parameter follows:
1621 % o image: the image.
1623 % o pixel: Specifies a pointer to a PixelPacket structure.
1626 MagickExport void GetMagickPixelPacket(const Image *image,
1627 MagickPixelPacket *pixel)
1629 pixel->storage_class=DirectClass;
1630 pixel->colorspace=RGBColorspace;
1631 pixel->matte=MagickFalse;
1633 pixel->depth=MAGICKCORE_QUANTUM_DEPTH;
1637 pixel->opacity=(MagickRealType) OpaqueOpacity;
1639 if (image == (const Image *) NULL)
1641 pixel->storage_class=image->storage_class;
1642 pixel->colorspace=image->colorspace;
1643 pixel->matte=image->matte;
1644 pixel->depth=image->depth;
1645 pixel->fuzz=image->fuzz;
1649 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1653 % I m p o r t I m a g e P i x e l s %
1657 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1659 % ImportImagePixels() accepts pixel data and stores in the image at the
1660 % location you specify. The method returns MagickTrue on success otherwise
1661 % MagickFalse if an error is encountered. The pixel data can be either char,
1662 % short int, int, ssize_t, float, or double in the order specified by map.
1664 % Suppose your want to upload the first scanline of a 640x480 image from
1665 % character data in red-green-blue order:
1667 % ImportImagePixels(image,0,0,640,1,"RGB",CharPixel,pixels);
1669 % The format of the ImportImagePixels method is:
1671 % MagickBooleanType ImportImagePixels(Image *image,const ssize_t x_offset,
1672 % const ssize_t y_offset,const size_t columns,
1673 % const size_t rows,const char *map,const StorageType type,
1674 % const void *pixels)
1676 % A description of each parameter follows:
1678 % o image: the image.
1680 % o x_offset,y_offset,columns,rows: These values define the perimeter
1681 % of a region of pixels you want to define.
1683 % o map: This string reflects the expected ordering of the pixel array.
1684 % It can be any combination or order of R = red, G = green, B = blue,
1685 % A = alpha (0 is transparent), O = opacity (0 is opaque), C = cyan,
1686 % Y = yellow, M = magenta, K = black, I = intensity (for grayscale),
1689 % o type: Define the data type of the pixels. Float and double types are
1690 % normalized to [0..1] otherwise [0..QuantumRange]. Choose from these
1691 % types: CharPixel, ShortPixel, IntegerPixel, LongPixel, FloatPixel, or
1694 % o pixels: This array of values contain the pixel components as defined by
1695 % map and type. You must preallocate this array where the expected
1696 % length varies depending on the values of width, height, map, and type.
1699 MagickExport MagickBooleanType ImportImagePixels(Image *image,
1700 const ssize_t x_offset,const ssize_t y_offset,const size_t columns,
1701 const size_t rows,const char *map,const StorageType type,
1713 register IndexPacket
1727 Allocate image structure.
1729 assert(image != (Image *) NULL);
1730 assert(image->signature == MagickSignature);
1731 if (image->debug != MagickFalse)
1732 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
1734 quantum_map=(QuantumType *) AcquireQuantumMemory(length,sizeof(*quantum_map));
1735 if (quantum_map == (QuantumType *) NULL)
1736 ThrowBinaryException(ResourceLimitError,"MemoryAllocationFailed",
1738 for (i=0; i < (ssize_t) length; i++)
1745 quantum_map[i]=AlphaQuantum;
1746 image->matte=MagickTrue;
1752 quantum_map[i]=BlueQuantum;
1758 quantum_map[i]=CyanQuantum;
1759 (void) SetImageColorspace(image,CMYKColorspace);
1765 quantum_map[i]=GreenQuantum;
1771 quantum_map[i]=BlackQuantum;
1772 (void) SetImageColorspace(image,CMYKColorspace);
1778 quantum_map[i]=IndexQuantum;
1784 quantum_map[i]=MagentaQuantum;
1785 (void) SetImageColorspace(image,CMYKColorspace);
1791 quantum_map[i]=OpacityQuantum;
1792 image->matte=MagickTrue;
1798 quantum_map[i]=UndefinedQuantum;
1804 quantum_map[i]=RedQuantum;
1810 quantum_map[i]=YellowQuantum;
1811 (void) SetImageColorspace(image,CMYKColorspace);
1816 quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
1817 (void) ThrowMagickException(&image->exception,GetMagickModule(),
1818 OptionError,"UnrecognizedPixelMap","`%s'",map);
1819 return(MagickFalse);
1823 if (SetImageStorageClass(image,DirectClass) == MagickFalse)
1824 return(MagickFalse);
1826 Transfer the pixels from the pixel datarray to the image.
1828 exception=(&image->exception);
1833 register const unsigned char
1836 p=(const unsigned char *) pixels;
1837 if (LocaleCompare(map,"BGR") == 0)
1839 for (y=0; y < (ssize_t) rows; y++)
1841 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
1842 if (q == (PixelPacket *) NULL)
1844 for (x=0; x < (ssize_t) columns; x++)
1846 SetBluePixelComponent(q,ScaleCharToQuantum(*p++));
1847 SetGreenPixelComponent(q,ScaleCharToQuantum(*p++));
1848 SetRedPixelComponent(q,ScaleCharToQuantum(*p++));
1851 if (SyncAuthenticPixels(image,exception) == MagickFalse)
1856 if (LocaleCompare(map,"BGRA") == 0)
1858 for (y=0; y < (ssize_t) rows; y++)
1860 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
1861 if (q == (PixelPacket *) NULL)
1863 for (x=0; x < (ssize_t) columns; x++)
1865 SetBluePixelComponent(q,ScaleCharToQuantum(*p++));
1866 SetGreenPixelComponent(q,ScaleCharToQuantum(*p++));
1867 SetRedPixelComponent(q,ScaleCharToQuantum(*p++));
1868 SetAlphaPixelComponent(q,ScaleCharToQuantum(*p++));
1871 if (SyncAuthenticPixels(image,exception) == MagickFalse)
1876 if (LocaleCompare(map,"BGRO") == 0)
1878 for (y=0; y < (ssize_t) rows; y++)
1880 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
1881 if (q == (PixelPacket *) NULL)
1883 for (x=0; x < (ssize_t) columns; x++)
1885 SetBluePixelComponent(q,ScaleCharToQuantum(*p++));
1886 SetGreenPixelComponent(q,ScaleCharToQuantum(*p++));
1887 SetRedPixelComponent(q,ScaleCharToQuantum(*p++));
1888 SetOpacityPixelComponent(q,ScaleCharToQuantum(*p++));
1891 if (SyncAuthenticPixels(image,exception) == MagickFalse)
1896 if (LocaleCompare(map,"BGRP") == 0)
1898 for (y=0; y < (ssize_t) rows; y++)
1900 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
1901 if (q == (PixelPacket *) NULL)
1903 for (x=0; x < (ssize_t) columns; x++)
1905 SetBluePixelComponent(q,ScaleCharToQuantum(*p++));
1906 SetGreenPixelComponent(q,ScaleCharToQuantum(*p++));
1907 SetRedPixelComponent(q,ScaleCharToQuantum(*p++));
1911 if (SyncAuthenticPixels(image,exception) == MagickFalse)
1916 if (LocaleCompare(map,"I") == 0)
1918 for (y=0; y < (ssize_t) rows; y++)
1920 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
1921 if (q == (PixelPacket *) NULL)
1923 for (x=0; x < (ssize_t) columns; x++)
1925 SetRedPixelComponent(q,ScaleCharToQuantum(*p++));
1926 SetGreenPixelComponent(q,GetRedPixelComponent(q));
1927 SetBluePixelComponent(q,GetRedPixelComponent(q));
1930 if (SyncAuthenticPixels(image,exception) == MagickFalse)
1935 if (LocaleCompare(map,"RGB") == 0)
1937 for (y=0; y < (ssize_t) rows; y++)
1939 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
1940 if (q == (PixelPacket *) NULL)
1942 for (x=0; x < (ssize_t) columns; x++)
1944 SetRedPixelComponent(q,ScaleCharToQuantum(*p++));
1945 SetGreenPixelComponent(q,ScaleCharToQuantum(*p++));
1946 SetBluePixelComponent(q,ScaleCharToQuantum(*p++));
1949 if (SyncAuthenticPixels(image,exception) == MagickFalse)
1954 if (LocaleCompare(map,"RGBA") == 0)
1956 for (y=0; y < (ssize_t) rows; y++)
1958 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
1959 if (q == (PixelPacket *) NULL)
1961 for (x=0; x < (ssize_t) columns; x++)
1963 SetRedPixelComponent(q,ScaleCharToQuantum(*p++));
1964 SetGreenPixelComponent(q,ScaleCharToQuantum(*p++));
1965 SetBluePixelComponent(q,ScaleCharToQuantum(*p++));
1966 SetAlphaPixelComponent(q,ScaleCharToQuantum(*p++));
1969 if (SyncAuthenticPixels(image,exception) == MagickFalse)
1974 if (LocaleCompare(map,"RGBO") == 0)
1976 for (y=0; y < (ssize_t) rows; y++)
1978 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
1979 if (q == (PixelPacket *) NULL)
1981 for (x=0; x < (ssize_t) columns; x++)
1983 SetRedPixelComponent(q,ScaleCharToQuantum(*p++));
1984 SetGreenPixelComponent(q,ScaleCharToQuantum(*p++));
1985 SetBluePixelComponent(q,ScaleCharToQuantum(*p++));
1986 SetOpacityPixelComponent(q,ScaleCharToQuantum(*p++));
1989 if (SyncAuthenticPixels(image,exception) == MagickFalse)
1994 if (LocaleCompare(map,"RGBP") == 0)
1996 for (y=0; y < (ssize_t) rows; y++)
1998 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
1999 if (q == (PixelPacket *) NULL)
2001 for (x=0; x < (ssize_t) columns; x++)
2003 SetRedPixelComponent(q,ScaleCharToQuantum(*p++));
2004 SetGreenPixelComponent(q,ScaleCharToQuantum(*p++));
2005 SetBluePixelComponent(q,ScaleCharToQuantum(*p++));
2009 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2014 for (y=0; y < (ssize_t) rows; y++)
2016 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2017 if (q == (PixelPacket *) NULL)
2019 indexes=GetAuthenticIndexQueue(image);
2020 for (x=0; x < (ssize_t) columns; x++)
2022 for (i=0; i < (ssize_t) length; i++)
2024 switch (quantum_map[i])
2029 SetRedPixelComponent(q,ScaleCharToQuantum(*p));
2033 case MagentaQuantum:
2035 SetGreenPixelComponent(q,ScaleCharToQuantum(*p));
2041 SetBluePixelComponent(q,ScaleCharToQuantum(*p));
2046 SetAlphaPixelComponent(q,ScaleCharToQuantum(*p));
2049 case OpacityQuantum:
2051 SetOpacityPixelComponent(q,ScaleCharToQuantum(*p));
2056 SetIndexPixelComponent(indexes+x,ScaleCharToQuantum(*p));
2061 SetRedPixelComponent(q,ScaleCharToQuantum(*p));
2062 SetGreenPixelComponent(q,GetRedPixelComponent(q));
2063 SetBluePixelComponent(q,GetRedPixelComponent(q));
2073 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2080 register const double
2083 p=(const double *) pixels;
2084 if (LocaleCompare(map,"BGR") == 0)
2086 for (y=0; y < (ssize_t) rows; y++)
2088 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2089 if (q == (PixelPacket *) NULL)
2091 for (x=0; x < (ssize_t) columns; x++)
2093 SetBluePixelComponent(q,ClampToQuantum((MagickRealType)
2094 QuantumRange*(*p)));
2096 SetGreenPixelComponent(q,ClampToQuantum((MagickRealType)
2097 QuantumRange*(*p)));
2099 SetRedPixelComponent(q,ClampToQuantum((MagickRealType)
2100 QuantumRange*(*p)));
2104 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2109 if (LocaleCompare(map,"BGRA") == 0)
2111 for (y=0; y < (ssize_t) rows; y++)
2113 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2114 if (q == (PixelPacket *) NULL)
2116 for (x=0; x < (ssize_t) columns; x++)
2118 SetBluePixelComponent(q,ClampToQuantum((MagickRealType)
2119 QuantumRange*(*p)));
2121 SetGreenPixelComponent(q,ClampToQuantum((MagickRealType)
2122 QuantumRange*(*p)));
2124 SetRedPixelComponent(q,ClampToQuantum((MagickRealType)
2125 QuantumRange*(*p)));
2127 q->opacity=(Quantum) QuantumRange-ClampToQuantum((MagickRealType)
2132 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2137 if (LocaleCompare(map,"BGRP") == 0)
2139 for (y=0; y < (ssize_t) rows; y++)
2141 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2142 if (q == (PixelPacket *) NULL)
2144 for (x=0; x < (ssize_t) columns; x++)
2146 SetBluePixelComponent(q,ClampToQuantum((MagickRealType)
2147 QuantumRange*(*p)));
2149 SetGreenPixelComponent(q,ClampToQuantum((MagickRealType)
2150 QuantumRange*(*p)));
2152 SetRedPixelComponent(q,ClampToQuantum((MagickRealType)
2153 QuantumRange*(*p)));
2158 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2163 if (LocaleCompare(map,"I") == 0)
2165 for (y=0; y < (ssize_t) rows; y++)
2167 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2168 if (q == (PixelPacket *) NULL)
2170 for (x=0; x < (ssize_t) columns; x++)
2172 SetRedPixelComponent(q,ClampToQuantum((MagickRealType)
2173 QuantumRange*(*p)));
2174 SetGreenPixelComponent(q,GetRedPixelComponent(q));
2175 SetBluePixelComponent(q,GetRedPixelComponent(q));
2179 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2184 if (LocaleCompare(map,"RGB") == 0)
2186 for (y=0; y < (ssize_t) rows; y++)
2188 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2189 if (q == (PixelPacket *) NULL)
2191 for (x=0; x < (ssize_t) columns; x++)
2193 SetRedPixelComponent(q,ClampToQuantum((MagickRealType)
2194 QuantumRange*(*p)));
2196 SetGreenPixelComponent(q,ClampToQuantum((MagickRealType) QuantumRange*(*p)));
2198 SetBluePixelComponent(q,ClampToQuantum((MagickRealType) QuantumRange*(*p)));
2202 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2207 if (LocaleCompare(map,"RGBA") == 0)
2209 for (y=0; y < (ssize_t) rows; y++)
2211 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2212 if (q == (PixelPacket *) NULL)
2214 for (x=0; x < (ssize_t) columns; x++)
2216 SetRedPixelComponent(q,ClampToQuantum((MagickRealType)
2217 QuantumRange*(*p)));
2219 SetGreenPixelComponent(q,ClampToQuantum((MagickRealType)
2220 QuantumRange*(*p)));
2222 SetBluePixelComponent(q,ClampToQuantum((MagickRealType)
2223 QuantumRange*(*p)));
2225 SetAlphaPixelComponent(q,ClampToQuantum((MagickRealType)
2226 QuantumRange*(*p)));
2230 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2235 if (LocaleCompare(map,"RGBP") == 0)
2237 for (y=0; y < (ssize_t) rows; y++)
2239 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2240 if (q == (PixelPacket *) NULL)
2242 for (x=0; x < (ssize_t) columns; x++)
2244 SetRedPixelComponent(q,ClampToQuantum((MagickRealType)
2245 QuantumRange*(*p)));
2247 SetGreenPixelComponent(q,ClampToQuantum((MagickRealType)
2248 QuantumRange*(*p)));
2250 SetBluePixelComponent(q,ClampToQuantum((MagickRealType)
2251 QuantumRange*(*p)));
2255 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2260 for (y=0; y < (ssize_t) rows; y++)
2262 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2263 if (q == (PixelPacket *) NULL)
2265 indexes=GetAuthenticIndexQueue(image);
2266 for (x=0; x < (ssize_t) columns; x++)
2268 for (i=0; i < (ssize_t) length; i++)
2270 switch (quantum_map[i])
2275 SetRedPixelComponent(q,ClampToQuantum((MagickRealType)
2276 QuantumRange*(*p)));
2280 case MagentaQuantum:
2282 SetGreenPixelComponent(q,ClampToQuantum((MagickRealType)
2283 QuantumRange*(*p)));
2289 SetBluePixelComponent(q,ClampToQuantum((MagickRealType)
2290 QuantumRange*(*p)));
2295 SetAlphaPixelComponent(q,ClampToQuantum((MagickRealType)
2296 QuantumRange*(*p)));
2299 case OpacityQuantum:
2301 SetOpacityPixelComponent(q,ClampToQuantum((MagickRealType)
2302 QuantumRange*(*p)));
2307 SetIndexPixelComponent(indexes+x,ClampToQuantum(
2308 (MagickRealType) QuantumRange*(*p)));
2313 SetRedPixelComponent(q,ClampToQuantum((MagickRealType)
2314 QuantumRange*(*p)));
2315 SetGreenPixelComponent(q,GetRedPixelComponent(q));
2316 SetBluePixelComponent(q,GetRedPixelComponent(q));
2326 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2333 register const float
2336 p=(const float *) pixels;
2337 if (LocaleCompare(map,"BGR") == 0)
2339 for (y=0; y < (ssize_t) rows; y++)
2341 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2342 if (q == (PixelPacket *) NULL)
2344 for (x=0; x < (ssize_t) columns; x++)
2346 SetBluePixelComponent(q,ClampToQuantum((MagickRealType)
2347 QuantumRange*(*p)));
2349 SetGreenPixelComponent(q,ClampToQuantum((MagickRealType)
2350 QuantumRange*(*p)));
2352 SetRedPixelComponent(q,ClampToQuantum((MagickRealType)
2353 QuantumRange*(*p)));
2357 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2362 if (LocaleCompare(map,"BGRA") == 0)
2364 for (y=0; y < (ssize_t) rows; y++)
2366 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2367 if (q == (PixelPacket *) NULL)
2369 for (x=0; x < (ssize_t) columns; x++)
2371 SetBluePixelComponent(q,ClampToQuantum((MagickRealType)
2372 QuantumRange*(*p)));
2374 SetGreenPixelComponent(q,ClampToQuantum((MagickRealType)
2375 QuantumRange*(*p)));
2377 SetRedPixelComponent(q,ClampToQuantum((MagickRealType)
2378 QuantumRange*(*p)));
2380 SetAlphaPixelComponent(q,ClampToQuantum((MagickRealType)
2381 QuantumRange*(*p)));
2385 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2390 if (LocaleCompare(map,"BGRP") == 0)
2392 for (y=0; y < (ssize_t) rows; y++)
2394 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2395 if (q == (PixelPacket *) NULL)
2397 for (x=0; x < (ssize_t) columns; x++)
2399 SetBluePixelComponent(q,ClampToQuantum((MagickRealType)
2400 QuantumRange*(*p)));
2402 SetGreenPixelComponent(q,ClampToQuantum((MagickRealType)
2403 QuantumRange*(*p)));
2405 SetRedPixelComponent(q,ClampToQuantum((MagickRealType)
2406 QuantumRange*(*p)));
2411 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2416 if (LocaleCompare(map,"I") == 0)
2418 for (y=0; y < (ssize_t) rows; y++)
2420 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2421 if (q == (PixelPacket *) NULL)
2423 for (x=0; x < (ssize_t) columns; x++)
2425 SetRedPixelComponent(q,ClampToQuantum((MagickRealType)
2426 QuantumRange*(*p)));
2427 SetGreenPixelComponent(q,GetRedPixelComponent(q));
2428 SetBluePixelComponent(q,GetRedPixelComponent(q));
2432 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2437 if (LocaleCompare(map,"RGB") == 0)
2439 for (y=0; y < (ssize_t) rows; y++)
2441 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2442 if (q == (PixelPacket *) NULL)
2444 for (x=0; x < (ssize_t) columns; x++)
2446 SetRedPixelComponent(q,ClampToQuantum((MagickRealType)
2447 QuantumRange*(*p)));
2449 SetGreenPixelComponent(q,ClampToQuantum((MagickRealType)
2450 QuantumRange*(*p)));
2452 SetBluePixelComponent(q,ClampToQuantum((MagickRealType)
2453 QuantumRange*(*p)));
2457 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2462 if (LocaleCompare(map,"RGBA") == 0)
2464 for (y=0; y < (ssize_t) rows; y++)
2466 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2467 if (q == (PixelPacket *) NULL)
2469 for (x=0; x < (ssize_t) columns; x++)
2471 SetRedPixelComponent(q,ClampToQuantum((MagickRealType)
2472 QuantumRange*(*p)));
2474 SetGreenPixelComponent(q,ClampToQuantum((MagickRealType)
2475 QuantumRange*(*p)));
2477 SetBluePixelComponent(q,ClampToQuantum((MagickRealType)
2478 QuantumRange*(*p)));
2480 SetAlphaPixelComponent(q,ClampToQuantum((MagickRealType)
2481 QuantumRange*(*p)));
2485 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2490 if (LocaleCompare(map,"RGBP") == 0)
2492 for (y=0; y < (ssize_t) rows; y++)
2494 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2495 if (q == (PixelPacket *) NULL)
2497 for (x=0; x < (ssize_t) columns; x++)
2499 SetRedPixelComponent(q,ClampToQuantum((MagickRealType)
2500 QuantumRange*(*p)));
2502 SetGreenPixelComponent(q,ClampToQuantum((MagickRealType)
2503 QuantumRange*(*p)));
2505 SetBluePixelComponent(q,ClampToQuantum((MagickRealType)
2506 QuantumRange*(*p)));
2510 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2515 for (y=0; y < (ssize_t) rows; y++)
2517 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2518 if (q == (PixelPacket *) NULL)
2520 indexes=GetAuthenticIndexQueue(image);
2521 for (x=0; x < (ssize_t) columns; x++)
2523 for (i=0; i < (ssize_t) length; i++)
2525 switch (quantum_map[i])
2530 SetRedPixelComponent(q,ClampToQuantum((MagickRealType)
2531 QuantumRange*(*p)));
2535 case MagentaQuantum:
2537 SetGreenPixelComponent(q,ClampToQuantum((MagickRealType)
2538 QuantumRange*(*p)));
2544 SetBluePixelComponent(q,ClampToQuantum((MagickRealType)
2545 QuantumRange*(*p)));
2550 SetAlphaPixelComponent(q,ClampToQuantum((MagickRealType)
2551 QuantumRange*(*p)));
2554 case OpacityQuantum:
2556 SetOpacityPixelComponent(q,ClampToQuantum((MagickRealType)
2557 QuantumRange*(*p)));
2562 SetIndexPixelComponent(indexes+x,ClampToQuantum(
2563 (MagickRealType) QuantumRange*(*p)));
2568 SetRedPixelComponent(q,ClampToQuantum((MagickRealType)
2569 QuantumRange*(*p)));
2570 SetGreenPixelComponent(q,GetRedPixelComponent(q));
2571 SetBluePixelComponent(q,GetRedPixelComponent(q));
2581 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2588 register const unsigned int
2591 p=(const unsigned int *) pixels;
2592 if (LocaleCompare(map,"BGR") == 0)
2594 for (y=0; y < (ssize_t) rows; y++)
2596 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2597 if (q == (PixelPacket *) NULL)
2599 for (x=0; x < (ssize_t) columns; x++)
2601 SetBluePixelComponent(q,ScaleLongToQuantum(*p++));
2602 SetGreenPixelComponent(q,ScaleLongToQuantum(*p++));
2603 SetRedPixelComponent(q,ScaleLongToQuantum(*p++));
2606 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2611 if (LocaleCompare(map,"BGRA") == 0)
2613 for (y=0; y < (ssize_t) rows; y++)
2615 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2616 if (q == (PixelPacket *) NULL)
2618 for (x=0; x < (ssize_t) columns; x++)
2620 SetBluePixelComponent(q,ScaleLongToQuantum(*p++));
2621 SetGreenPixelComponent(q,ScaleLongToQuantum(*p++));
2622 SetRedPixelComponent(q,ScaleLongToQuantum(*p++));
2623 SetAlphaPixelComponent(q,ScaleLongToQuantum(*p++));
2626 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2631 if (LocaleCompare(map,"BGRP") == 0)
2633 for (y=0; y < (ssize_t) rows; y++)
2635 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2636 if (q == (PixelPacket *) NULL)
2638 for (x=0; x < (ssize_t) columns; x++)
2640 SetBluePixelComponent(q,ScaleLongToQuantum(*p++));
2641 SetGreenPixelComponent(q,ScaleLongToQuantum(*p++));
2642 SetRedPixelComponent(q,ScaleLongToQuantum(*p++));
2646 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2651 if (LocaleCompare(map,"I") == 0)
2653 for (y=0; y < (ssize_t) rows; y++)
2655 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2656 if (q == (PixelPacket *) NULL)
2658 for (x=0; x < (ssize_t) columns; x++)
2660 SetRedPixelComponent(q,ScaleLongToQuantum(*p++));
2661 SetGreenPixelComponent(q,GetRedPixelComponent(q));
2662 SetBluePixelComponent(q,GetRedPixelComponent(q));
2665 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2670 if (LocaleCompare(map,"RGB") == 0)
2672 for (y=0; y < (ssize_t) rows; y++)
2674 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2675 if (q == (PixelPacket *) NULL)
2677 for (x=0; x < (ssize_t) columns; x++)
2679 SetRedPixelComponent(q,ScaleLongToQuantum(*p++));
2680 SetGreenPixelComponent(q,ScaleLongToQuantum(*p++));
2681 SetBluePixelComponent(q,ScaleLongToQuantum(*p++));
2684 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2689 if (LocaleCompare(map,"RGBA") == 0)
2691 for (y=0; y < (ssize_t) rows; y++)
2693 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2694 if (q == (PixelPacket *) NULL)
2696 for (x=0; x < (ssize_t) columns; x++)
2698 SetRedPixelComponent(q,ScaleLongToQuantum(*p++));
2699 SetGreenPixelComponent(q,ScaleLongToQuantum(*p++));
2700 SetBluePixelComponent(q,ScaleLongToQuantum(*p++));
2701 SetAlphaPixelComponent(q,ScaleLongToQuantum(*p++));
2704 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2709 if (LocaleCompare(map,"RGBP") == 0)
2711 for (y=0; y < (ssize_t) rows; y++)
2713 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2714 if (q == (PixelPacket *) NULL)
2716 for (x=0; x < (ssize_t) columns; x++)
2718 SetRedPixelComponent(q,ScaleLongToQuantum(*p++));
2719 SetGreenPixelComponent(q,ScaleLongToQuantum(*p++));
2720 SetBluePixelComponent(q,ScaleLongToQuantum(*p++));
2724 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2729 for (y=0; y < (ssize_t) rows; y++)
2731 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2732 if (q == (PixelPacket *) NULL)
2734 indexes=GetAuthenticIndexQueue(image);
2735 for (x=0; x < (ssize_t) columns; x++)
2737 for (i=0; i < (ssize_t) length; i++)
2739 switch (quantum_map[i])
2744 SetRedPixelComponent(q,ScaleLongToQuantum(*p));
2748 case MagentaQuantum:
2750 SetGreenPixelComponent(q,ScaleLongToQuantum(*p));
2756 SetBluePixelComponent(q,ScaleLongToQuantum(*p));
2761 SetAlphaPixelComponent(q,ScaleLongToQuantum(*p));
2764 case OpacityQuantum:
2766 SetOpacityPixelComponent(q,ScaleLongToQuantum(*p));
2771 SetIndexPixelComponent(indexes+x,ScaleLongToQuantum(*p));
2776 SetRedPixelComponent(q,ScaleLongToQuantum(*p));
2777 SetGreenPixelComponent(q,GetRedPixelComponent(q));
2778 SetBluePixelComponent(q,GetRedPixelComponent(q));
2788 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2795 register const unsigned int
2798 p=(const unsigned int *) pixels;
2799 if (LocaleCompare(map,"BGR") == 0)
2801 for (y=0; y < (ssize_t) rows; y++)
2803 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2804 if (q == (PixelPacket *) NULL)
2806 for (x=0; x < (ssize_t) columns; x++)
2808 SetBluePixelComponent(q,ScaleLongToQuantum(*p++));
2809 SetGreenPixelComponent(q,ScaleLongToQuantum(*p++));
2810 SetRedPixelComponent(q,ScaleLongToQuantum(*p++));
2813 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2818 if (LocaleCompare(map,"BGRA") == 0)
2820 for (y=0; y < (ssize_t) rows; y++)
2822 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2823 if (q == (PixelPacket *) NULL)
2825 for (x=0; x < (ssize_t) columns; x++)
2827 SetBluePixelComponent(q,ScaleLongToQuantum(*p++));
2828 SetGreenPixelComponent(q,ScaleLongToQuantum(*p++));
2829 SetRedPixelComponent(q,ScaleLongToQuantum(*p++));
2830 SetAlphaPixelComponent(q,ScaleLongToQuantum(*p++));
2833 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2838 if (LocaleCompare(map,"BGRP") == 0)
2840 for (y=0; y < (ssize_t) rows; y++)
2842 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2843 if (q == (PixelPacket *) NULL)
2845 for (x=0; x < (ssize_t) columns; x++)
2847 SetBluePixelComponent(q,ScaleLongToQuantum(*p++));
2848 SetGreenPixelComponent(q,ScaleLongToQuantum(*p++));
2849 SetRedPixelComponent(q,ScaleLongToQuantum(*p++));
2853 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2858 if (LocaleCompare(map,"I") == 0)
2860 for (y=0; y < (ssize_t) rows; y++)
2862 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2863 if (q == (PixelPacket *) NULL)
2865 for (x=0; x < (ssize_t) columns; x++)
2867 SetRedPixelComponent(q,ScaleLongToQuantum(*p++));
2868 SetGreenPixelComponent(q,GetRedPixelComponent(q));
2869 SetBluePixelComponent(q,GetRedPixelComponent(q));
2872 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2877 if (LocaleCompare(map,"RGB") == 0)
2879 for (y=0; y < (ssize_t) rows; y++)
2881 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2882 if (q == (PixelPacket *) NULL)
2884 for (x=0; x < (ssize_t) columns; x++)
2886 SetRedPixelComponent(q,ScaleLongToQuantum(*p++));
2887 SetGreenPixelComponent(q,ScaleLongToQuantum(*p++));
2888 SetBluePixelComponent(q,ScaleLongToQuantum(*p++));
2891 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2896 if (LocaleCompare(map,"RGBA") == 0)
2898 for (y=0; y < (ssize_t) rows; y++)
2900 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2901 if (q == (PixelPacket *) NULL)
2903 for (x=0; x < (ssize_t) columns; x++)
2905 SetRedPixelComponent(q,ScaleLongToQuantum(*p++));
2906 SetGreenPixelComponent(q,ScaleLongToQuantum(*p++));
2907 SetBluePixelComponent(q,ScaleLongToQuantum(*p++));
2908 SetAlphaPixelComponent(q,ScaleLongToQuantum(*p++));
2911 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2916 if (LocaleCompare(map,"RGBP") == 0)
2918 for (y=0; y < (ssize_t) rows; y++)
2920 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2921 if (q == (PixelPacket *) NULL)
2923 for (x=0; x < (ssize_t) columns; x++)
2925 SetRedPixelComponent(q,ScaleLongToQuantum(*p++));
2926 SetGreenPixelComponent(q,ScaleLongToQuantum(*p++));
2927 SetBluePixelComponent(q,ScaleLongToQuantum(*p++));
2931 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2936 for (y=0; y < (ssize_t) rows; y++)
2938 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
2939 if (q == (PixelPacket *) NULL)
2941 indexes=GetAuthenticIndexQueue(image);
2942 for (x=0; x < (ssize_t) columns; x++)
2944 for (i=0; i < (ssize_t) length; i++)
2946 switch (quantum_map[i])
2951 SetRedPixelComponent(q,ScaleLongToQuantum(*p));
2955 case MagentaQuantum:
2957 SetGreenPixelComponent(q,ScaleLongToQuantum(*p));
2963 SetBluePixelComponent(q,ScaleLongToQuantum(*p));
2968 SetAlphaPixelComponent(q,ScaleLongToQuantum(*p));
2971 case OpacityQuantum:
2973 SetOpacityPixelComponent(q,ScaleLongToQuantum(*p));
2978 SetIndexPixelComponent(indexes+x,ScaleLongToQuantum(*p));
2983 SetRedPixelComponent(q,ScaleLongToQuantum(*p));
2984 SetGreenPixelComponent(q,GetRedPixelComponent(q));
2985 SetBluePixelComponent(q,GetRedPixelComponent(q));
2995 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3002 register const Quantum
3005 p=(const Quantum *) pixels;
3006 if (LocaleCompare(map,"BGR") == 0)
3008 for (y=0; y < (ssize_t) rows; y++)
3010 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
3011 if (q == (PixelPacket *) NULL)
3013 for (x=0; x < (ssize_t) columns; x++)
3015 SetBluePixelComponent(q,*p++);
3016 SetGreenPixelComponent(q,*p++);
3017 SetRedPixelComponent(q,*p++);
3020 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3025 if (LocaleCompare(map,"BGRA") == 0)
3027 for (y=0; y < (ssize_t) rows; y++)
3029 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
3030 if (q == (PixelPacket *) NULL)
3032 for (x=0; x < (ssize_t) columns; x++)
3034 SetBluePixelComponent(q,*p++);
3035 SetGreenPixelComponent(q,*p++);
3036 SetRedPixelComponent(q,*p++);
3037 SetAlphaPixelComponent(q,*p++);
3040 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3045 if (LocaleCompare(map,"BGRP") == 0)
3047 for (y=0; y < (ssize_t) rows; y++)
3049 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
3050 if (q == (PixelPacket *) NULL)
3052 for (x=0; x < (ssize_t) columns; x++)
3054 SetBluePixelComponent(q,*p++);
3055 SetGreenPixelComponent(q,*p++);
3056 SetRedPixelComponent(q,*p++);
3060 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3065 if (LocaleCompare(map,"I") == 0)
3067 for (y=0; y < (ssize_t) rows; y++)
3069 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
3070 if (q == (PixelPacket *) NULL)
3072 for (x=0; x < (ssize_t) columns; x++)
3074 SetRedPixelComponent(q,*p++);
3075 SetGreenPixelComponent(q,GetRedPixelComponent(q));
3076 SetBluePixelComponent(q,GetRedPixelComponent(q));
3079 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3084 if (LocaleCompare(map,"RGB") == 0)
3086 for (y=0; y < (ssize_t) rows; y++)
3088 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
3089 if (q == (PixelPacket *) NULL)
3091 for (x=0; x < (ssize_t) columns; x++)
3093 SetRedPixelComponent(q,*p++);
3094 SetGreenPixelComponent(q,*p++);
3095 SetBluePixelComponent(q,*p++);
3098 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3103 if (LocaleCompare(map,"RGBA") == 0)
3105 for (y=0; y < (ssize_t) rows; y++)
3107 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
3108 if (q == (PixelPacket *) NULL)
3110 for (x=0; x < (ssize_t) columns; x++)
3112 SetRedPixelComponent(q,*p++);
3113 SetGreenPixelComponent(q,*p++);
3114 SetBluePixelComponent(q,*p++);
3115 SetAlphaPixelComponent(q,*p++);
3118 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3123 if (LocaleCompare(map,"RGBP") == 0)
3125 for (y=0; y < (ssize_t) rows; y++)
3127 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
3128 if (q == (PixelPacket *) NULL)
3130 for (x=0; x < (ssize_t) columns; x++)
3132 SetRedPixelComponent(q,*p++);
3133 SetGreenPixelComponent(q,*p++);
3134 SetBluePixelComponent(q,*p++);
3138 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3143 for (y=0; y < (ssize_t) rows; y++)
3145 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
3146 if (q == (PixelPacket *) NULL)
3148 indexes=GetAuthenticIndexQueue(image);
3149 for (x=0; x < (ssize_t) columns; x++)
3151 for (i=0; i < (ssize_t) length; i++)
3153 switch (quantum_map[i])
3158 SetRedPixelComponent(q,*p);
3162 case MagentaQuantum:
3164 SetGreenPixelComponent(q,*p);
3170 SetBluePixelComponent(q,*p);
3175 SetAlphaPixelComponent(q,*p);
3178 case OpacityQuantum:
3180 SetOpacityPixelComponent(q,*p);
3185 SetIndexPixelComponent(indexes+x,*p);
3190 SetRedPixelComponent(q,*p);
3191 SetGreenPixelComponent(q,GetRedPixelComponent(q));
3192 SetBluePixelComponent(q,GetRedPixelComponent(q));
3202 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3209 register const unsigned short
3212 p=(const unsigned short *) pixels;
3213 if (LocaleCompare(map,"BGR") == 0)
3215 for (y=0; y < (ssize_t) rows; y++)
3217 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
3218 if (q == (PixelPacket *) NULL)
3220 for (x=0; x < (ssize_t) columns; x++)
3222 SetBluePixelComponent(q,ScaleShortToQuantum(*p++));
3223 SetGreenPixelComponent(q,ScaleShortToQuantum(*p++));
3224 SetRedPixelComponent(q,ScaleShortToQuantum(*p++));
3227 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3232 if (LocaleCompare(map,"BGRA") == 0)
3234 for (y=0; y < (ssize_t) rows; y++)
3236 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
3237 if (q == (PixelPacket *) NULL)
3239 for (x=0; x < (ssize_t) columns; x++)
3241 SetBluePixelComponent(q,ScaleShortToQuantum(*p++));
3242 SetGreenPixelComponent(q,ScaleShortToQuantum(*p++));
3243 SetRedPixelComponent(q,ScaleShortToQuantum(*p++));
3244 SetAlphaPixelComponent(q,ScaleShortToQuantum(*p++));
3247 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3252 if (LocaleCompare(map,"BGRP") == 0)
3254 for (y=0; y < (ssize_t) rows; y++)
3256 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
3257 if (q == (PixelPacket *) NULL)
3259 for (x=0; x < (ssize_t) columns; x++)
3261 SetBluePixelComponent(q,ScaleShortToQuantum(*p++));
3262 SetGreenPixelComponent(q,ScaleShortToQuantum(*p++));
3263 SetRedPixelComponent(q,ScaleShortToQuantum(*p++));
3267 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3272 if (LocaleCompare(map,"I") == 0)
3274 for (y=0; y < (ssize_t) rows; y++)
3276 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
3277 if (q == (PixelPacket *) NULL)
3279 for (x=0; x < (ssize_t) columns; x++)
3281 SetRedPixelComponent(q,ScaleShortToQuantum(*p++));
3282 SetGreenPixelComponent(q,GetRedPixelComponent(q));
3283 SetBluePixelComponent(q,GetRedPixelComponent(q));
3286 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3291 if (LocaleCompare(map,"RGB") == 0)
3293 for (y=0; y < (ssize_t) rows; y++)
3295 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
3296 if (q == (PixelPacket *) NULL)
3298 for (x=0; x < (ssize_t) columns; x++)
3300 SetRedPixelComponent(q,ScaleShortToQuantum(*p++));
3301 SetGreenPixelComponent(q,ScaleShortToQuantum(*p++));
3302 SetBluePixelComponent(q,ScaleShortToQuantum(*p++));
3305 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3310 if (LocaleCompare(map,"RGBA") == 0)
3312 for (y=0; y < (ssize_t) rows; y++)
3314 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
3315 if (q == (PixelPacket *) NULL)
3317 for (x=0; x < (ssize_t) columns; x++)
3319 SetRedPixelComponent(q,ScaleShortToQuantum(*p++));
3320 SetGreenPixelComponent(q,ScaleShortToQuantum(*p++));
3321 SetBluePixelComponent(q,ScaleShortToQuantum(*p++));
3322 SetAlphaPixelComponent(q,ScaleShortToQuantum(*p++));
3325 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3330 if (LocaleCompare(map,"RGBP") == 0)
3332 for (y=0; y < (ssize_t) rows; y++)
3334 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
3335 if (q == (PixelPacket *) NULL)
3337 for (x=0; x < (ssize_t) columns; x++)
3339 SetRedPixelComponent(q,ScaleShortToQuantum(*p++));
3340 SetGreenPixelComponent(q,ScaleShortToQuantum(*p++));
3341 SetBluePixelComponent(q,ScaleShortToQuantum(*p++));
3345 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3350 for (y=0; y < (ssize_t) rows; y++)
3352 q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
3353 if (q == (PixelPacket *) NULL)
3355 indexes=GetAuthenticIndexQueue(image);
3356 for (x=0; x < (ssize_t) columns; x++)
3358 for (i=0; i < (ssize_t) length; i++)
3360 switch (quantum_map[i])
3365 SetRedPixelComponent(q,ScaleShortToQuantum(*p));
3369 case MagentaQuantum:
3371 SetGreenPixelComponent(q,ScaleShortToQuantum(*p));
3377 SetBluePixelComponent(q,ScaleShortToQuantum(*p));
3382 SetAlphaPixelComponent(q,ScaleShortToQuantum(*p));
3385 case OpacityQuantum:
3387 SetOpacityPixelComponent(q,ScaleShortToQuantum(*p));
3392 SetIndexPixelComponent(indexes+x,ScaleShortToQuantum(*p));
3397 SetRedPixelComponent(q,ScaleShortToQuantum(*p));
3398 SetGreenPixelComponent(q,GetRedPixelComponent(q));
3399 SetBluePixelComponent(q,GetRedPixelComponent(q));
3409 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3416 quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
3417 (void) ThrowMagickException(&image->exception,GetMagickModule(),
3418 OptionError,"UnrecognizedPixelMap","`%s'",map);
3422 quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
3427 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3431 % I n t e r p o l a t e M a g i c k P i x e l P a c k e t %
3435 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3437 % InterpolateMagickPixelPacket() applies bi-linear or tri-linear interpolation
3438 % between a floating point coordinate and the pixels surrounding that
3439 % coordinate. No pixel area resampling, or scaling of the result is
3442 % The format of the InterpolateMagickPixelPacket method is:
3444 % MagickBooleanType InterpolateMagickPixelPacket(const Image *image,
3445 % const CacheView *image_view,const InterpolatePixelMethod method,
3446 % const double x,const double y,MagickPixelPacket *pixel,
3447 % ExceptionInfo *exception)
3449 % A description of each parameter follows:
3451 % o image: the image.
3453 % o image_view: the image view.
3455 % o method: the pixel color interpolation method.
3457 % o x,y: A double representing the current (x,y) position of the pixel.
3459 % o pixel: return the interpolated pixel here.
3461 % o exception: return any errors or warnings in this structure.
3465 static inline void AlphaBlendMagickPixelPacket(const Image *image,
3466 const PixelPacket *color,const IndexPacket *indexes,MagickPixelPacket *pixel,
3467 MagickRealType *alpha)
3469 if (image->matte == MagickFalse)
3472 pixel->red=(MagickRealType) GetRedPixelComponent(color);
3473 pixel->green=(MagickRealType) GetGreenPixelComponent(color);
3474 pixel->blue=(MagickRealType) GetBluePixelComponent(color);
3475 pixel->opacity=(MagickRealType) GetOpacityPixelComponent(color);
3477 if (((image->colorspace == CMYKColorspace) ||
3478 (image->storage_class == PseudoClass)) &&
3479 (indexes != (const IndexPacket *) NULL))
3480 pixel->index=(MagickRealType) GetIndexPixelComponent(indexes);
3483 *alpha=QuantumScale*GetAlphaPixelComponent(color);
3484 pixel->red=(*alpha*GetRedPixelComponent(color));
3485 pixel->green=(*alpha*GetGreenPixelComponent(color));
3486 pixel->blue=(*alpha*GetBluePixelComponent(color));
3487 pixel->opacity=(MagickRealType) GetOpacityPixelComponent(color);
3489 if (((image->colorspace == CMYKColorspace) ||
3490 (image->storage_class == PseudoClass)) &&
3491 (indexes != (const IndexPacket *) NULL))
3492 pixel->index=(*alpha*GetIndexPixelComponent(indexes));
3495 static void BicubicInterpolate(const MagickPixelPacket *pixels,const double dx,
3496 MagickPixelPacket *pixel)
3506 p=(pixels[3].red-pixels[2].red)-(pixels[0].red-pixels[1].red);
3507 q=(pixels[0].red-pixels[1].red)-p;
3508 r=pixels[2].red-pixels[0].red;
3510 pixel->red=(dx*dx2*p)+(dx2*q)+(dx*r)+s;
3511 p=(pixels[3].green-pixels[2].green)-(pixels[0].green-pixels[1].green);
3512 q=(pixels[0].green-pixels[1].green)-p;
3513 r=pixels[2].green-pixels[0].green;
3515 pixel->green=(dx*dx2*p)+(dx2*q)+(dx*r)+s;
3516 p=(pixels[3].blue-pixels[2].blue)-(pixels[0].blue-pixels[1].blue);
3517 q=(pixels[0].blue-pixels[1].blue)-p;
3518 r=pixels[2].blue-pixels[0].blue;
3520 pixel->blue=(dx*dx2*p)+(dx2*q)+(dx*r)+s;
3521 p=(pixels[3].opacity-pixels[2].opacity)-(pixels[0].opacity-pixels[1].opacity);
3522 q=(pixels[0].opacity-pixels[1].opacity)-p;
3523 r=pixels[2].opacity-pixels[0].opacity;
3524 s=pixels[1].opacity;
3525 pixel->opacity=(dx*dx2*p)+(dx2*q)+(dx*r)+s;
3526 if (pixel->colorspace == CMYKColorspace)
3528 p=(pixels[3].index-pixels[2].index)-(pixels[0].index-pixels[1].index);
3529 q=(pixels[0].index-pixels[1].index)-p;
3530 r=pixels[2].index-pixels[0].index;
3532 pixel->index=(dx*dx2*p)+(dx2*q)+(dx*r)+s;
3536 static inline double MagickMax(const MagickRealType x,const MagickRealType y)
3543 static inline MagickRealType CubicWeightingFunction(const MagickRealType x)
3549 alpha=MagickMax(x+2.0,0.0);
3550 gamma=1.0*alpha*alpha*alpha;
3551 alpha=MagickMax(x+1.0,0.0);
3552 gamma-=4.0*alpha*alpha*alpha;
3553 alpha=MagickMax(x+0.0,0.0);
3554 gamma+=6.0*alpha*alpha*alpha;
3555 alpha=MagickMax(x-1.0,0.0);
3556 gamma-=4.0*alpha*alpha*alpha;
3560 static inline double MeshInterpolate(const PointInfo *delta,const double p,
3561 const double x,const double y)
3563 return(delta->x*x+delta->y*y+(1.0-delta->x-delta->y)*p);
3566 static inline ssize_t NearestNeighbor(const MagickRealType x)
3569 return((ssize_t) (x+0.5));
3570 return((ssize_t) (x-0.5));
3573 MagickExport MagickBooleanType InterpolateMagickPixelPacket(const Image *image,
3574 const CacheView *image_view,const InterpolatePixelMethod method,
3575 const double x,const double y,MagickPixelPacket *pixel,
3576 ExceptionInfo *exception)
3588 register const IndexPacket
3591 register const PixelPacket
3601 assert(image != (Image *) NULL);
3602 assert(image->signature == MagickSignature);
3603 assert(image_view != (CacheView *) NULL);
3605 x_offset=(ssize_t) floor(x);
3606 y_offset=(ssize_t) floor(y);
3607 switch (method == UndefinedInterpolatePixel ? image->interpolate : method)
3609 case AverageInterpolatePixel:
3611 p=GetCacheViewVirtualPixels(image_view,x_offset-1,y_offset-1,4,4,
3613 if (p == (const PixelPacket *) NULL)
3618 indexes=GetCacheViewVirtualIndexQueue(image_view);
3619 AlphaBlendMagickPixelPacket(image,p+0,indexes+0,pixels+0,alpha+0);
3620 AlphaBlendMagickPixelPacket(image,p+1,indexes+1,pixels+1,alpha+1);
3621 AlphaBlendMagickPixelPacket(image,p+2,indexes+2,pixels+2,alpha+2);
3622 AlphaBlendMagickPixelPacket(image,p+3,indexes+3,pixels+3,alpha+3);
3623 AlphaBlendMagickPixelPacket(image,p+4,indexes+4,pixels+4,alpha+4);
3624 AlphaBlendMagickPixelPacket(image,p+5,indexes+5,pixels+5,alpha+5);
3625 AlphaBlendMagickPixelPacket(image,p+6,indexes+6,pixels+6,alpha+6);
3626 AlphaBlendMagickPixelPacket(image,p+7,indexes+7,pixels+7,alpha+7);
3627 AlphaBlendMagickPixelPacket(image,p+8,indexes+8,pixels+8,alpha+8);
3628 AlphaBlendMagickPixelPacket(image,p+9,indexes+9,pixels+9,alpha+9);
3629 AlphaBlendMagickPixelPacket(image,p+10,indexes+10,pixels+10,alpha+10);
3630 AlphaBlendMagickPixelPacket(image,p+11,indexes+11,pixels+11,alpha+11);
3631 AlphaBlendMagickPixelPacket(image,p+12,indexes+12,pixels+12,alpha+12);
3632 AlphaBlendMagickPixelPacket(image,p+13,indexes+13,pixels+13,alpha+13);
3633 AlphaBlendMagickPixelPacket(image,p+14,indexes+14,pixels+14,alpha+14);
3634 AlphaBlendMagickPixelPacket(image,p+15,indexes+15,pixels+15,alpha+15);
3640 for (i=0; i < 16L; i++)
3642 gamma=1.0/(fabs((double) alpha[i]) <= MagickEpsilon ? 1.0 : alpha[i]);
3643 pixel->red+=gamma*0.0625*pixels[i].red;
3644 pixel->green+=gamma*0.0625*pixels[i].green;
3645 pixel->blue+=gamma*0.0625*pixels[i].blue;
3646 pixel->opacity+=0.0625*pixels[i].opacity;
3647 if (image->colorspace == CMYKColorspace)
3648 pixel->index+=gamma*0.0625*pixels[i].index;
3652 case BicubicInterpolatePixel:
3660 p=GetCacheViewVirtualPixels(image_view,x_offset-1,y_offset-1,4,4,
3662 if (p == (const PixelPacket *) NULL)
3667 indexes=GetCacheViewVirtualIndexQueue(image_view);
3668 AlphaBlendMagickPixelPacket(image,p+0,indexes+0,pixels+0,alpha+0);
3669 AlphaBlendMagickPixelPacket(image,p+1,indexes+1,pixels+1,alpha+1);
3670 AlphaBlendMagickPixelPacket(image,p+2,indexes+2,pixels+2,alpha+2);
3671 AlphaBlendMagickPixelPacket(image,p+3,indexes+3,pixels+3,alpha+3);
3672 AlphaBlendMagickPixelPacket(image,p+4,indexes+4,pixels+4,alpha+4);
3673 AlphaBlendMagickPixelPacket(image,p+5,indexes+5,pixels+5,alpha+5);
3674 AlphaBlendMagickPixelPacket(image,p+6,indexes+6,pixels+6,alpha+6);
3675 AlphaBlendMagickPixelPacket(image,p+7,indexes+7,pixels+7,alpha+7);
3676 AlphaBlendMagickPixelPacket(image,p+8,indexes+8,pixels+8,alpha+8);
3677 AlphaBlendMagickPixelPacket(image,p+9,indexes+9,pixels+9,alpha+9);
3678 AlphaBlendMagickPixelPacket(image,p+10,indexes+10,pixels+10,alpha+10);
3679 AlphaBlendMagickPixelPacket(image,p+11,indexes+11,pixels+11,alpha+11);
3680 AlphaBlendMagickPixelPacket(image,p+12,indexes+12,pixels+12,alpha+12);
3681 AlphaBlendMagickPixelPacket(image,p+13,indexes+13,pixels+13,alpha+13);
3682 AlphaBlendMagickPixelPacket(image,p+14,indexes+14,pixels+14,alpha+14);
3683 AlphaBlendMagickPixelPacket(image,p+15,indexes+15,pixels+15,alpha+15);
3686 for (i=0; i < 4L; i++)
3687 BicubicInterpolate(pixels+4*i,delta.x,u+i);
3688 BicubicInterpolate(u,delta.y,pixel);
3691 case BilinearInterpolatePixel:
3698 p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,2,2,exception);
3699 if (p == (const PixelPacket *) NULL)
3704 indexes=GetCacheViewVirtualIndexQueue(image_view);
3705 AlphaBlendMagickPixelPacket(image,p+0,indexes+0,pixels+0,alpha+0);
3706 AlphaBlendMagickPixelPacket(image,p+1,indexes+1,pixels+1,alpha+1);
3707 AlphaBlendMagickPixelPacket(image,p+2,indexes+2,pixels+2,alpha+2);
3708 AlphaBlendMagickPixelPacket(image,p+3,indexes+3,pixels+3,alpha+3);
3711 epsilon.x=1.0-delta.x;
3712 epsilon.y=1.0-delta.y;
3713 gamma=((epsilon.y*(epsilon.x*alpha[0]+delta.x*alpha[1])+delta.y*
3714 (epsilon.x*alpha[2]+delta.x*alpha[3])));
3715 gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
3716 pixel->red=gamma*(epsilon.y*(epsilon.x*pixels[0].red+delta.x*
3717 pixels[1].red)+delta.y*(epsilon.x*pixels[2].red+delta.x*pixels[3].red));
3718 pixel->green=gamma*(epsilon.y*(epsilon.x*pixels[0].green+delta.x*
3719 pixels[1].green)+delta.y*(epsilon.x*pixels[2].green+delta.x*
3721 pixel->blue=gamma*(epsilon.y*(epsilon.x*pixels[0].blue+delta.x*
3722 pixels[1].blue)+delta.y*(epsilon.x*pixels[2].blue+delta.x*
3724 pixel->opacity=(epsilon.y*(epsilon.x*pixels[0].opacity+delta.x*
3725 pixels[1].opacity)+delta.y*(epsilon.x*pixels[2].opacity+delta.x*
3726 pixels[3].opacity));
3727 if (image->colorspace == CMYKColorspace)
3728 pixel->index=gamma*(epsilon.y*(epsilon.x*pixels[0].index+delta.x*
3729 pixels[1].index)+delta.y*(epsilon.x*pixels[2].index+delta.x*
3733 case FilterInterpolatePixel:
3747 geometry.x=x_offset-1;
3748 geometry.y=y_offset-1;
3749 excerpt_image=ExcerptImage(image,&geometry,exception);
3750 if (excerpt_image == (Image *) NULL)
3755 filter_image=ResizeImage(excerpt_image,1,1,image->filter,image->blur,
3757 excerpt_image=DestroyImage(excerpt_image);
3758 if (filter_image == (Image *) NULL)
3760 filter_view=AcquireCacheView(filter_image);
3761 p=GetCacheViewVirtualPixels(filter_view,0,0,1,1,exception);
3762 if (p != (const PixelPacket *) NULL)
3764 indexes=GetVirtualIndexQueue(filter_image);
3765 SetMagickPixelPacket(image,p,indexes,pixel);
3767 filter_view=DestroyCacheView(filter_view);
3768 filter_image=DestroyImage(filter_image);
3771 case IntegerInterpolatePixel:
3773 p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,1,1,exception);
3774 if (p == (const PixelPacket *) NULL)
3779 indexes=GetCacheViewVirtualIndexQueue(image_view);
3780 SetMagickPixelPacket(image,p,indexes,pixel);
3783 case MeshInterpolatePixel:
3789 p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,2,2,
3791 if (p == (const PixelPacket *) NULL)
3796 indexes=GetCacheViewVirtualIndexQueue(image_view);
3797 AlphaBlendMagickPixelPacket(image,p+0,indexes+0,pixels+0,alpha+0);
3798 AlphaBlendMagickPixelPacket(image,p+1,indexes+1,pixels+1,alpha+1);
3799 AlphaBlendMagickPixelPacket(image,p+2,indexes+2,pixels+2,alpha+2);
3800 AlphaBlendMagickPixelPacket(image,p+3,indexes+3,pixels+3,alpha+3);
3803 luminance.x=MagickPixelLuminance(pixels+0)-MagickPixelLuminance(pixels+3);
3804 luminance.y=MagickPixelLuminance(pixels+1)-MagickPixelLuminance(pixels+2);
3805 if (fabs(luminance.x) < fabs(luminance.y))
3810 if (delta.x <= delta.y)
3813 Bottom-left triangle (pixel:2, diagonal: 0-3).
3815 delta.y=1.0-delta.y;
3816 gamma=MeshInterpolate(&delta,alpha[2],alpha[3],alpha[0]);
3817 gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
3818 pixel->red=gamma*MeshInterpolate(&delta,pixels[2].red,
3819 pixels[3].red,pixels[0].red);
3820 pixel->green=gamma*MeshInterpolate(&delta,pixels[2].green,
3821 pixels[3].green,pixels[0].green);
3822 pixel->blue=gamma*MeshInterpolate(&delta,pixels[2].blue,
3823 pixels[3].blue,pixels[0].blue);
3824 pixel->opacity=gamma*MeshInterpolate(&delta,pixels[2].opacity,
3825 pixels[3].opacity,pixels[0].opacity);
3826 if (image->colorspace == CMYKColorspace)
3827 pixel->index=gamma*MeshInterpolate(&delta,pixels[2].index,
3828 pixels[3].index,pixels[0].index);
3833 Top-right triangle (pixel:1, diagonal: 0-3).
3835 delta.x=1.0-delta.x;
3836 gamma=MeshInterpolate(&delta,alpha[1],alpha[0],alpha[3]);
3837 gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
3838 pixel->red=gamma*MeshInterpolate(&delta,pixels[1].red,
3839 pixels[0].red,pixels[3].red);
3840 pixel->green=gamma*MeshInterpolate(&delta,pixels[1].green,
3841 pixels[0].green,pixels[3].green);
3842 pixel->blue=gamma*MeshInterpolate(&delta,pixels[1].blue,
3843 pixels[0].blue,pixels[3].blue);
3844 pixel->opacity=gamma*MeshInterpolate(&delta,pixels[1].opacity,
3845 pixels[0].opacity,pixels[3].opacity);
3846 if (image->colorspace == CMYKColorspace)
3847 pixel->index=gamma*MeshInterpolate(&delta,pixels[1].index,
3848 pixels[0].index,pixels[3].index);
3856 if (delta.x <= (1.0-delta.y))
3859 Top-left triangle (pixel 0, diagonal: 1-2).
3861 gamma=MeshInterpolate(&delta,alpha[0],alpha[1],alpha[2]);
3862 gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
3863 pixel->red=gamma*MeshInterpolate(&delta,pixels[0].red,
3864 pixels[1].red,pixels[2].red);
3865 pixel->green=gamma*MeshInterpolate(&delta,pixels[0].green,
3866 pixels[1].green,pixels[2].green);
3867 pixel->blue=gamma*MeshInterpolate(&delta,pixels[0].blue,
3868 pixels[1].blue,pixels[2].blue);
3869 pixel->opacity=gamma*MeshInterpolate(&delta,pixels[0].opacity,
3870 pixels[1].opacity,pixels[2].opacity);
3871 if (image->colorspace == CMYKColorspace)
3872 pixel->index=gamma*MeshInterpolate(&delta,pixels[0].index,
3873 pixels[1].index,pixels[2].index);
3878 Bottom-right triangle (pixel: 3, diagonal: 1-2).
3880 delta.x=1.0-delta.x;
3881 delta.y=1.0-delta.y;
3882 gamma=MeshInterpolate(&delta,alpha[3],alpha[2],alpha[1]);
3883 gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
3884 pixel->red=gamma*MeshInterpolate(&delta,pixels[3].red,
3885 pixels[2].red,pixels[1].red);
3886 pixel->green=gamma*MeshInterpolate(&delta,pixels[3].green,
3887 pixels[2].green,pixels[1].green);
3888 pixel->blue=gamma*MeshInterpolate(&delta,pixels[3].blue,
3889 pixels[2].blue,pixels[1].blue);
3890 pixel->opacity=gamma*MeshInterpolate(&delta,pixels[3].opacity,
3891 pixels[2].opacity,pixels[1].opacity);
3892 if (image->colorspace == CMYKColorspace)
3893 pixel->index=gamma*MeshInterpolate(&delta,pixels[3].index,
3894 pixels[2].index,pixels[1].index);
3899 case NearestNeighborInterpolatePixel:
3901 p=GetCacheViewVirtualPixels(image_view,NearestNeighbor(x),
3902 NearestNeighbor(y),1,1,exception);
3903 if (p == (const PixelPacket *) NULL)
3908 indexes=GetCacheViewVirtualIndexQueue(image_view);
3909 SetMagickPixelPacket(image,p,indexes,pixel);
3912 case SplineInterpolatePixel:
3925 p=GetCacheViewVirtualPixels(image_view,x_offset-1,y_offset-1,4,4,
3927 if (p == (const PixelPacket *) NULL)
3932 indexes=GetCacheViewVirtualIndexQueue(image_view);
3933 AlphaBlendMagickPixelPacket(image,p+0,indexes+0,pixels+0,alpha+0);
3934 AlphaBlendMagickPixelPacket(image,p+1,indexes+1,pixels+1,alpha+1);
3935 AlphaBlendMagickPixelPacket(image,p+2,indexes+2,pixels+2,alpha+2);
3936 AlphaBlendMagickPixelPacket(image,p+3,indexes+3,pixels+3,alpha+3);
3937 AlphaBlendMagickPixelPacket(image,p+4,indexes+4,pixels+4,alpha+4);
3938 AlphaBlendMagickPixelPacket(image,p+5,indexes+5,pixels+5,alpha+5);
3939 AlphaBlendMagickPixelPacket(image,p+6,indexes+6,pixels+6,alpha+6);
3940 AlphaBlendMagickPixelPacket(image,p+7,indexes+7,pixels+7,alpha+7);
3941 AlphaBlendMagickPixelPacket(image,p+8,indexes+8,pixels+8,alpha+8);
3942 AlphaBlendMagickPixelPacket(image,p+9,indexes+9,pixels+9,alpha+9);
3943 AlphaBlendMagickPixelPacket(image,p+10,indexes+10,pixels+10,alpha+10);
3944 AlphaBlendMagickPixelPacket(image,p+11,indexes+11,pixels+11,alpha+11);
3945 AlphaBlendMagickPixelPacket(image,p+12,indexes+12,pixels+12,alpha+12);
3946 AlphaBlendMagickPixelPacket(image,p+13,indexes+13,pixels+13,alpha+13);
3947 AlphaBlendMagickPixelPacket(image,p+14,indexes+14,pixels+14,alpha+14);
3948 AlphaBlendMagickPixelPacket(image,p+15,indexes+15,pixels+15,alpha+15);
3957 for (i=(-1); i < 3L; i++)
3959 dy=CubicWeightingFunction((MagickRealType) i-delta.y);
3960 for (j=(-1); j < 3L; j++)
3962 dx=CubicWeightingFunction(delta.x-(MagickRealType) j);
3963 gamma=1.0/(fabs((double) alpha[n]) <= MagickEpsilon ? 1.0 : alpha[n]);
3964 pixel->red+=gamma*dx*dy*pixels[n].red;
3965 pixel->green+=gamma*dx*dy*pixels[n].green;
3966 pixel->blue+=gamma*dx*dy*pixels[n].blue;
3967 pixel->opacity+=dx*dy*pixels[n].opacity;
3968 if (image->colorspace == CMYKColorspace)
3969 pixel->index+=gamma*dx*dy*pixels[n].index;