41#include "magick/studio.h"
42#include "magick/blob.h"
43#include "magick/blob-private.h"
44#include "magick/cache-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/colorspace-private.h"
51#include "magick/constitute.h"
52#include "magick/delegate.h"
53#include "magick/geometry.h"
54#include "magick/list.h"
55#include "magick/magick.h"
56#include "magick/memory_.h"
57#include "magick/memory-private.h"
58#include "magick/monitor.h"
59#include "magick/option.h"
60#include "magick/pixel.h"
61#include "magick/pixel-private.h"
62#include "magick/property.h"
63#include "magick/quantum.h"
64#include "magick/resource_.h"
65#include "magick/semaphore.h"
66#include "magick/statistic.h"
67#include "magick/stream.h"
68#include "magick/string_.h"
69#include "magick/transform.h"
70#include "magick/utility.h"
101 sizeof(*clone_pixel)));
103 ThrowFatalException(ResourceLimitFatalError,
"MemoryAllocationFailed");
104 *clone_pixel=(*pixel);
139MagickExport
void ConformMagickPixelPacket(
Image *image,
143 assert(image != (
Image *) NULL);
144 assert(image->signature == MagickCoreSignature);
147 *destination=(*source);
148 if (image->colorspace == CMYKColorspace)
150 if (IssRGBCompatibleColorspace(destination->colorspace) != MagickFalse)
151 ConvertRGBToCMYK(destination);
154 if (destination->colorspace == CMYKColorspace)
156 if (IssRGBCompatibleColorspace(image->colorspace) != MagickFalse)
157 ConvertCMYKToRGB(destination);
159 if ((IsGrayColorspace(image->colorspace) != MagickFalse) &&
160 (IsMagickGray(destination) == MagickFalse))
161 (void) TransformImageColorspace(image,sRGBColorspace);
162 if ((destination->matte != MagickFalse) && (image->matte == MagickFalse))
163 (void) SetImageOpacity(image,OpaqueOpacity);
189static inline double DecodeGamma(
const double x)
201 static const double coefficient[] =
203 1.7917488588043277509,
204 0.82045614371976854984,
205 0.027694100686325412819,
206 -0.00094244335181762134018,
207 0.000064355540911469709545,
208 -5.7224404636060757485e-06,
209 5.8767669437311184313e-07,
210 -6.6139920053589721168e-08,
211 7.9323242696227458163e-09
214 static const double powers_of_two[] =
217 2.6390158215457883983,
218 6.9644045063689921093,
219 1.8379173679952558018e+01,
220 4.8502930128332728543e+01
227 term[1]=4.0*frexp(x,&exponent)-3.0;
228 term[2]=2.0*term[1]*term[1]-term[0];
229 term[3]=2.0*term[1]*term[2]-term[1];
230 term[4]=2.0*term[1]*term[3]-term[2];
231 term[5]=2.0*term[1]*term[4]-term[3];
232 term[6]=2.0*term[1]*term[5]-term[4];
233 term[7]=2.0*term[1]*term[6]-term[5];
234 term[8]=2.0*term[1]*term[7]-term[6];
235 p=coefficient[0]*term[0]+coefficient[1]*term[1]+coefficient[2]*term[2]+
236 coefficient[3]*term[3]+coefficient[4]*term[4]+coefficient[5]*term[5]+
237 coefficient[6]*term[6]+coefficient[7]*term[7]+coefficient[8]*term[8];
238 quotient=div(exponent-1,5);
239 if (quotient.rem < 0)
244 return(x*ldexp(powers_of_two[quotient.rem]*p,7*quotient.quot));
247MagickExport MagickRealType DecodePixelGamma(
const MagickRealType pixel)
249 if (pixel <= (0.0404482362771076*(MagickRealType) QuantumRange))
250 return((MagickRealType) pixel/12.92);
251 return((MagickRealType) QuantumRange*DecodeGamma((
double) (QuantumScale*
252 pixel+0.055)/1.055));
278static inline double EncodeGamma(
const double x)
290 static const double coefficient[] =
292 1.1758200232996901923,
293 0.16665763094889061230,
294 -0.0083154894939042125035,
295 0.00075187976780420279038,
296 -0.000083240178519391795367,
297 0.000010229209410070008679,
298 -1.3400466409860246e-06,
299 1.8333422241635376682e-07,
300 -2.5878596761348859722e-08
303 static const double powers_of_two[] =
306 1.3348398541700343678,
307 1.7817974362806785482,
308 2.3784142300054420538,
309 3.1748021039363991669,
310 4.2378523774371812394,
311 5.6568542494923805819,
312 7.5509945014535482244,
313 1.0079368399158985525e1,
314 1.3454342644059433809e1,
315 1.7959392772949968275e1,
316 2.3972913230026907883e1
323 term[1]=4.0*frexp(x,&exponent)-3.0;
324 term[2]=2.0*term[1]*term[1]-term[0];
325 term[3]=2.0*term[1]*term[2]-term[1];
326 term[4]=2.0*term[1]*term[3]-term[2];
327 term[5]=2.0*term[1]*term[4]-term[3];
328 term[6]=2.0*term[1]*term[5]-term[4];
329 term[7]=2.0*term[1]*term[6]-term[5];
330 term[8]=2.0*term[1]*term[7]-term[6];
331 p=coefficient[0]*term[0]+coefficient[1]*term[1]+coefficient[2]*term[2]+
332 coefficient[3]*term[3]+coefficient[4]*term[4]+coefficient[5]*term[5]+
333 coefficient[6]*term[6]+coefficient[7]*term[7]+coefficient[8]*term[8];
334 quotient=div(exponent-1,12);
335 if (quotient.rem < 0)
340 return(ldexp(powers_of_two[quotient.rem]*p,5*quotient.quot));
343MagickExport MagickRealType EncodePixelGamma(
const MagickRealType pixel)
345 if (pixel <= (0.0031306684425005883*(MagickRealType) QuantumRange))
347 return((MagickRealType) QuantumRange*(1.055*EncodeGamma(QuantumScale*
348 (MagickRealType) pixel)-0.055));
407 const char *magick_restrict map,
const QuantumType *quantum_map,
void *pixels,
411 *magick_restrict indexes;
428 q=(
unsigned char *) pixels;
429 if (LocaleCompare(map,
"BGR") == 0)
431 for (y=0; y < (ssize_t) roi->height; y++)
433 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
436 for (x=0; x < (ssize_t) roi->width; x++)
438 *q++=ScaleQuantumToChar(GetPixelBlue(p));
439 *q++=ScaleQuantumToChar(GetPixelGreen(p));
440 *q++=ScaleQuantumToChar(GetPixelRed(p));
444 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
446 if (LocaleCompare(map,
"BGRA") == 0)
448 for (y=0; y < (ssize_t) roi->height; y++)
450 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
453 for (x=0; x < (ssize_t) roi->width; x++)
455 *q++=ScaleQuantumToChar(GetPixelBlue(p));
456 *q++=ScaleQuantumToChar(GetPixelGreen(p));
457 *q++=ScaleQuantumToChar(GetPixelRed(p));
458 *q++=ScaleQuantumToChar((Quantum) GetPixelAlpha(p));
462 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
464 if (LocaleCompare(map,
"BGRP") == 0)
466 for (y=0; y < (ssize_t) roi->height; y++)
468 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
471 for (x=0; x < (ssize_t) roi->width; x++)
473 *q++=ScaleQuantumToChar(GetPixelBlue(p));
474 *q++=ScaleQuantumToChar(GetPixelGreen(p));
475 *q++=ScaleQuantumToChar(GetPixelRed(p));
476 *q++=ScaleQuantumToChar((Quantum) 0);
480 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
482 if (LocaleCompare(map,
"I") == 0)
484 for (y=0; y < (ssize_t) roi->height; y++)
486 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
489 for (x=0; x < (ssize_t) roi->width; x++)
491 *q++=ScaleQuantumToChar(ClampToQuantum(GetPixelIntensity(image,p)));
495 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
497 if (LocaleCompare(map,
"RGB") == 0)
499 for (y=0; y < (ssize_t) roi->height; y++)
501 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
504 for (x=0; x < (ssize_t) roi->width; x++)
506 *q++=ScaleQuantumToChar(GetPixelRed(p));
507 *q++=ScaleQuantumToChar(GetPixelGreen(p));
508 *q++=ScaleQuantumToChar(GetPixelBlue(p));
512 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
514 if (LocaleCompare(map,
"RGBA") == 0)
516 for (y=0; y < (ssize_t) roi->height; y++)
518 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
521 for (x=0; x < (ssize_t) roi->width; x++)
523 *q++=ScaleQuantumToChar(GetPixelRed(p));
524 *q++=ScaleQuantumToChar(GetPixelGreen(p));
525 *q++=ScaleQuantumToChar(GetPixelBlue(p));
526 *q++=ScaleQuantumToChar((Quantum) GetPixelAlpha(p));
530 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
532 if (LocaleCompare(map,
"RGBP") == 0)
534 for (y=0; y < (ssize_t) roi->height; y++)
536 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
539 for (x=0; x < (ssize_t) roi->width; x++)
541 *q++=ScaleQuantumToChar(GetPixelRed(p));
542 *q++=ScaleQuantumToChar(GetPixelGreen(p));
543 *q++=ScaleQuantumToChar(GetPixelBlue(p));
544 *q++=ScaleQuantumToChar((Quantum) 0);
548 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
551 for (y=0; y < (ssize_t) roi->height; y++)
553 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
556 indexes=GetVirtualIndexQueue(image);
557 for (x=0; x < (ssize_t) roi->width; x++)
562 for (i=0; i < (ssize_t) length; i++)
565 switch (quantum_map[i])
570 *q=ScaleQuantumToChar(GetPixelRed(p));
576 *q=ScaleQuantumToChar(GetPixelGreen(p));
582 *q=ScaleQuantumToChar(GetPixelBlue(p));
587 *q=ScaleQuantumToChar((Quantum) GetPixelAlpha(p));
592 *q=ScaleQuantumToChar(GetPixelOpacity(p));
597 if (image->colorspace == CMYKColorspace)
598 *q=ScaleQuantumToChar(GetPixelIndex(indexes+x));
603 *q=ScaleQuantumToChar(ClampToQuantum(GetPixelIntensity(image,p)));
614 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
617static MagickBooleanType ExportDoublePixel(
Image *image,
619 const QuantumType *quantum_map,
void *pixels,
ExceptionInfo *exception)
622 *magick_restrict indexes;
640 if (LocaleCompare(map,
"BGR") == 0)
642 for (y=0; y < (ssize_t) roi->height; y++)
644 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
647 for (x=0; x < (ssize_t) roi->width; x++)
649 *q++=(double) (QuantumScale*(
double) GetPixelBlue(p));
650 *q++=(double) (QuantumScale*(
double) GetPixelGreen(p));
651 *q++=(double) (QuantumScale*(
double) GetPixelRed(p));
655 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
657 if (LocaleCompare(map,
"BGRA") == 0)
659 for (y=0; y < (ssize_t) roi->height; y++)
661 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
664 for (x=0; x < (ssize_t) roi->width; x++)
666 *q++=(double) (QuantumScale*(
double) GetPixelBlue(p));
667 *q++=(double) (QuantumScale*(
double) GetPixelGreen(p));
668 *q++=(double) (QuantumScale*(
double) GetPixelRed(p));
669 *q++=(double) (QuantumScale*((
double) QuantumRange-
670 (
double) GetPixelOpacity(p)));
674 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
676 if (LocaleCompare(map,
"BGRP") == 0)
678 for (y=0; y < (ssize_t) roi->height; y++)
680 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
683 for (x=0; x < (ssize_t) roi->width; x++)
685 *q++=(double) (QuantumScale*(
double) GetPixelBlue(p));
686 *q++=(double) (QuantumScale*(
double) GetPixelGreen(p));
687 *q++=(double) (QuantumScale*(
double) GetPixelRed(p));
692 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
694 if (LocaleCompare(map,
"I") == 0)
696 for (y=0; y < (ssize_t) roi->height; y++)
698 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
701 for (x=0; x < (ssize_t) roi->width; x++)
703 *q++=(double) (QuantumScale*(
double) GetPixelIntensity(image,p));
707 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
709 if (LocaleCompare(map,
"RGB") == 0)
711 for (y=0; y < (ssize_t) roi->height; y++)
713 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
716 for (x=0; x < (ssize_t) roi->width; x++)
718 *q++=(double) (QuantumScale*(
double) GetPixelRed(p));
719 *q++=(double) (QuantumScale*(
double) GetPixelGreen(p));
720 *q++=(double) (QuantumScale*(
double) GetPixelBlue(p));
724 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
726 if (LocaleCompare(map,
"RGBA") == 0)
728 for (y=0; y < (ssize_t) roi->height; y++)
730 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
733 for (x=0; x < (ssize_t) roi->width; x++)
735 *q++=(double) (QuantumScale*(
double) GetPixelRed(p));
736 *q++=(double) (QuantumScale*(
double) GetPixelGreen(p));
737 *q++=(double) (QuantumScale*(
double) GetPixelBlue(p));
738 *q++=(double) (QuantumScale*((
double) QuantumRange-
739 (
double) GetPixelOpacity(p)));
743 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
745 if (LocaleCompare(map,
"RGBP") == 0)
747 for (y=0; y < (ssize_t) roi->height; y++)
749 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
752 for (x=0; x < (ssize_t) roi->width; x++)
754 *q++=(double) (QuantumScale*(
double) GetPixelRed(p));
755 *q++=(double) (QuantumScale*(
double) GetPixelGreen(p));
756 *q++=(double) (QuantumScale*(
double) GetPixelBlue(p));
761 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
764 for (y=0; y < (ssize_t) roi->height; y++)
766 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
769 indexes=GetVirtualIndexQueue(image);
770 for (x=0; x < (ssize_t) roi->width; x++)
775 for (i=0; i < (ssize_t) length; i++)
778 switch (quantum_map[i])
783 *q=(double) (QuantumScale*(
double) GetPixelRed(p));
789 *q=(double) (QuantumScale*(
double) GetPixelGreen(p));
795 *q=(double) (QuantumScale*(
double) GetPixelBlue(p));
800 *q=(double) (QuantumScale*((
double) QuantumRange-
801 (
double) GetPixelOpacity(p)));
806 *q=(double) (QuantumScale*(
double) GetPixelOpacity(p));
811 if (image->colorspace == CMYKColorspace)
812 *q=(double) (QuantumScale*(
double) GetPixelIndex(indexes+x));
817 *q=(double) (QuantumScale*(
double) GetPixelIntensity(image,p));
828 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
832 const char *magick_restrict map,
const QuantumType *quantum_map,
void *pixels,
836 *magick_restrict indexes;
854 if (LocaleCompare(map,
"BGR") == 0)
856 for (y=0; y < (ssize_t) roi->height; y++)
858 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
861 for (x=0; x < (ssize_t) roi->width; x++)
863 *q++=(float) (QuantumScale*(
double) GetPixelBlue(p));
864 *q++=(float) (QuantumScale*(
double) GetPixelGreen(p));
865 *q++=(float) (QuantumScale*(
double) GetPixelRed(p));
869 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
871 if (LocaleCompare(map,
"BGRA") == 0)
873 for (y=0; y < (ssize_t) roi->height; y++)
875 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
878 for (x=0; x < (ssize_t) roi->width; x++)
880 *q++=(float) (QuantumScale*(
double) GetPixelBlue(p));
881 *q++=(float) (QuantumScale*(
double) GetPixelGreen(p));
882 *q++=(float) (QuantumScale*(
double) GetPixelRed(p));
883 *q++=(float) (QuantumScale*(
double) GetPixelAlpha(p));
887 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
889 if (LocaleCompare(map,
"BGRP") == 0)
891 for (y=0; y < (ssize_t) roi->height; y++)
893 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
896 for (x=0; x < (ssize_t) roi->width; x++)
898 *q++=(float) (QuantumScale*(
double) GetPixelBlue(p));
899 *q++=(float) (QuantumScale*(
double) GetPixelGreen(p));
900 *q++=(float) (QuantumScale*(
double) GetPixelRed(p));
905 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
907 if (LocaleCompare(map,
"I") == 0)
909 for (y=0; y < (ssize_t) roi->height; y++)
911 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
914 for (x=0; x < (ssize_t) roi->width; x++)
916 *q++=(float) (QuantumScale*(
double) GetPixelIntensity(image,p));
920 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
922 if (LocaleCompare(map,
"RGB") == 0)
924 for (y=0; y < (ssize_t) roi->height; y++)
926 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
929 for (x=0; x < (ssize_t) roi->width; x++)
931 *q++=(float) (QuantumScale*(
double) GetPixelRed(p));
932 *q++=(float) (QuantumScale*(
double) GetPixelGreen(p));
933 *q++=(float) (QuantumScale*(
double) GetPixelBlue(p));
937 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
939 if (LocaleCompare(map,
"RGBA") == 0)
941 for (y=0; y < (ssize_t) roi->height; y++)
943 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
946 for (x=0; x < (ssize_t) roi->width; x++)
948 *q++=(float) (QuantumScale*(
double) GetPixelRed(p));
949 *q++=(float) (QuantumScale*(
double) GetPixelGreen(p));
950 *q++=(float) (QuantumScale*(
double) GetPixelBlue(p));
951 *q++=(float) (QuantumScale*(
double) GetPixelAlpha(p));
955 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
957 if (LocaleCompare(map,
"RGBP") == 0)
959 for (y=0; y < (ssize_t) roi->height; y++)
961 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
964 for (x=0; x < (ssize_t) roi->width; x++)
966 *q++=(float) (QuantumScale*(
double) GetPixelRed(p));
967 *q++=(float) (QuantumScale*(
double) GetPixelGreen(p));
968 *q++=(float) (QuantumScale*(
double) GetPixelBlue(p));
973 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
976 for (y=0; y < (ssize_t) roi->height; y++)
978 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
981 indexes=GetVirtualIndexQueue(image);
982 for (x=0; x < (ssize_t) roi->width; x++)
987 for (i=0; i < (ssize_t) length; i++)
990 switch (quantum_map[i])
995 *q=(float) (QuantumScale*(
double) GetPixelRed(p));
1001 *q=(float) (QuantumScale*(
double) GetPixelGreen(p));
1007 *q=(float) (QuantumScale*(
double) GetPixelBlue(p));
1012 *q=(float) (QuantumScale*(
double) GetPixelAlpha(p));
1015 case OpacityQuantum:
1017 *q=(float) (QuantumScale*(
double) GetPixelOpacity(p));
1022 if (image->colorspace == CMYKColorspace)
1023 *q=(float) (QuantumScale*(
double) GetPixelIndex(indexes+x));
1028 *q=(float) (QuantumScale*(
double) GetPixelIntensity(image,p));
1039 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
1042static MagickBooleanType ExportIntegerPixel(
Image *image,
1044 const QuantumType *quantum_map,
void *pixels,
ExceptionInfo *exception)
1047 *magick_restrict indexes;
1064 q=(
unsigned int *) pixels;
1065 if (LocaleCompare(map,
"BGR") == 0)
1067 for (y=0; y < (ssize_t) roi->height; y++)
1069 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1072 for (x=0; x < (ssize_t) roi->width; x++)
1074 *q++=(
unsigned int) ScaleQuantumToLong(GetPixelBlue(p));
1075 *q++=(
unsigned int) ScaleQuantumToLong(GetPixelGreen(p));
1076 *q++=(
unsigned int) ScaleQuantumToLong(GetPixelRed(p));
1080 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
1082 if (LocaleCompare(map,
"BGRA") == 0)
1084 for (y=0; y < (ssize_t) roi->height; y++)
1086 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1089 for (x=0; x < (ssize_t) roi->width; x++)
1091 *q++=(
unsigned int) ScaleQuantumToLong(GetPixelBlue(p));
1092 *q++=(
unsigned int) ScaleQuantumToLong(GetPixelGreen(p));
1093 *q++=(
unsigned int) ScaleQuantumToLong(GetPixelRed(p));
1094 *q++=(
unsigned int) ScaleQuantumToLong((Quantum) (QuantumRange-
1095 GetPixelOpacity(p)));
1099 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
1101 if (LocaleCompare(map,
"BGRP") == 0)
1103 for (y=0; y < (ssize_t) roi->height; y++)
1105 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1108 for (x=0; x < (ssize_t) roi->width; x++)
1110 *q++=(
unsigned int) ScaleQuantumToLong(GetPixelBlue(p));
1111 *q++=(
unsigned int) ScaleQuantumToLong(GetPixelGreen(p));
1112 *q++=(
unsigned int) ScaleQuantumToLong(GetPixelRed(p));
1117 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
1119 if (LocaleCompare(map,
"I") == 0)
1121 for (y=0; y < (ssize_t) roi->height; y++)
1123 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1126 for (x=0; x < (ssize_t) roi->width; x++)
1128 *q++=(
unsigned int) ScaleQuantumToLong(ClampToQuantum(
1129 GetPixelIntensity(image,p)));
1133 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
1135 if (LocaleCompare(map,
"RGB") == 0)
1137 for (y=0; y < (ssize_t) roi->height; y++)
1139 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1142 for (x=0; x < (ssize_t) roi->width; x++)
1144 *q++=(
unsigned int) ScaleQuantumToLong(GetPixelRed(p));
1145 *q++=(
unsigned int) ScaleQuantumToLong(GetPixelGreen(p));
1146 *q++=(
unsigned int) ScaleQuantumToLong(GetPixelBlue(p));
1150 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
1152 if (LocaleCompare(map,
"RGBA") == 0)
1154 for (y=0; y < (ssize_t) roi->height; y++)
1156 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1159 for (x=0; x < (ssize_t) roi->width; x++)
1161 *q++=(
unsigned int) ScaleQuantumToLong(GetPixelRed(p));
1162 *q++=(
unsigned int) ScaleQuantumToLong(GetPixelGreen(p));
1163 *q++=(
unsigned int) ScaleQuantumToLong(GetPixelBlue(p));
1164 *q++=(
unsigned int) ScaleQuantumToLong((Quantum) GetPixelAlpha(p));
1168 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
1170 if (LocaleCompare(map,
"RGBP") == 0)
1172 for (y=0; y < (ssize_t) roi->height; y++)
1174 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1177 for (x=0; x < (ssize_t) roi->width; x++)
1179 *q++=(
unsigned int) ScaleQuantumToLong(GetPixelRed(p));
1180 *q++=(
unsigned int) ScaleQuantumToLong(GetPixelGreen(p));
1181 *q++=(
unsigned int) ScaleQuantumToLong(GetPixelBlue(p));
1186 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
1189 for (y=0; y < (ssize_t) roi->height; y++)
1191 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1194 indexes=GetVirtualIndexQueue(image);
1195 for (x=0; x < (ssize_t) roi->width; x++)
1200 for (i=0; i < (ssize_t) length; i++)
1203 switch (quantum_map[i])
1208 *q=(
unsigned int) ScaleQuantumToLong(GetPixelRed(p));
1212 case MagentaQuantum:
1214 *q=(
unsigned int) ScaleQuantumToLong(GetPixelGreen(p));
1220 *q=(
unsigned int) ScaleQuantumToLong(GetPixelBlue(p));
1225 *q=(
unsigned int) ScaleQuantumToLong((Quantum) (QuantumRange-
1226 GetPixelOpacity(p)));
1229 case OpacityQuantum:
1231 *q=(
unsigned int) ScaleQuantumToLong(GetPixelOpacity(p));
1236 if (image->colorspace == CMYKColorspace)
1237 *q=(
unsigned int) ScaleQuantumToLong(GetPixelIndex(indexes+x));
1242 *q=(
unsigned int) ScaleQuantumToLong(ClampToQuantum(
1243 GetPixelIntensity(image,p)));
1254 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
1258 const char *magick_restrict map,
const QuantumType *quantum_map,
void *pixels,
1262 *magick_restrict indexes;
1279 q=(
unsigned int *) pixels;
1280 if (LocaleCompare(map,
"BGR") == 0)
1282 for (y=0; y < (ssize_t) roi->height; y++)
1284 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1287 for (x=0; x < (ssize_t) roi->width; x++)
1289 *q++=ScaleQuantumToLong(GetPixelBlue(p));
1290 *q++=ScaleQuantumToLong(GetPixelGreen(p));
1291 *q++=ScaleQuantumToLong(GetPixelRed(p));
1295 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
1297 if (LocaleCompare(map,
"BGRA") == 0)
1299 for (y=0; y < (ssize_t) roi->height; y++)
1301 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1304 for (x=0; x < (ssize_t) roi->width; x++)
1306 *q++=ScaleQuantumToLong(GetPixelBlue(p));
1307 *q++=ScaleQuantumToLong(GetPixelGreen(p));
1308 *q++=ScaleQuantumToLong(GetPixelRed(p));
1309 *q++=ScaleQuantumToLong((Quantum) (GetPixelAlpha(p)));
1313 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
1315 if (LocaleCompare(map,
"BGRP") == 0)
1317 for (y=0; y < (ssize_t) roi->height; y++)
1319 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1322 for (x=0; x < (ssize_t) roi->width; x++)
1324 *q++=ScaleQuantumToLong(GetPixelBlue(p));
1325 *q++=ScaleQuantumToLong(GetPixelGreen(p));
1326 *q++=ScaleQuantumToLong(GetPixelRed(p));
1331 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
1333 if (LocaleCompare(map,
"I") == 0)
1335 for (y=0; y < (ssize_t) roi->height; y++)
1337 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1340 for (x=0; x < (ssize_t) roi->width; x++)
1342 *q++=ScaleQuantumToLong(ClampToQuantum(GetPixelIntensity(image,p)));
1346 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
1348 if (LocaleCompare(map,
"RGB") == 0)
1350 for (y=0; y < (ssize_t) roi->height; y++)
1352 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1355 for (x=0; x < (ssize_t) roi->width; x++)
1357 *q++=ScaleQuantumToLong(GetPixelRed(p));
1358 *q++=ScaleQuantumToLong(GetPixelGreen(p));
1359 *q++=ScaleQuantumToLong(GetPixelBlue(p));
1363 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
1365 if (LocaleCompare(map,
"RGBA") == 0)
1367 for (y=0; y < (ssize_t) roi->height; y++)
1369 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1372 for (x=0; x < (ssize_t) roi->width; x++)
1374 *q++=ScaleQuantumToLong(GetPixelRed(p));
1375 *q++=ScaleQuantumToLong(GetPixelGreen(p));
1376 *q++=ScaleQuantumToLong(GetPixelBlue(p));
1377 *q++=ScaleQuantumToLong((Quantum) (GetPixelAlpha(p)));
1381 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
1383 if (LocaleCompare(map,
"RGBP") == 0)
1385 for (y=0; y < (ssize_t) roi->height; y++)
1387 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1390 for (x=0; x < (ssize_t) roi->width; x++)
1392 *q++=ScaleQuantumToLong(GetPixelRed(p));
1393 *q++=ScaleQuantumToLong(GetPixelGreen(p));
1394 *q++=ScaleQuantumToLong(GetPixelBlue(p));
1399 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
1402 for (y=0; y < (ssize_t) roi->height; y++)
1404 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1407 indexes=GetVirtualIndexQueue(image);
1408 for (x=0; x < (ssize_t) roi->width; x++)
1413 for (i=0; i < (ssize_t) length; i++)
1416 switch (quantum_map[i])
1421 *q=ScaleQuantumToLong(GetPixelRed(p));
1425 case MagentaQuantum:
1427 *q=ScaleQuantumToLong(GetPixelGreen(p));
1433 *q=ScaleQuantumToLong(GetPixelBlue(p));
1438 *q=ScaleQuantumToLong((Quantum) GetPixelAlpha(p));
1441 case OpacityQuantum:
1443 *q=ScaleQuantumToLong(GetPixelOpacity(p));
1448 if (image->colorspace == CMYKColorspace)
1449 *q=ScaleQuantumToLong(GetPixelIndex(indexes+x));
1454 *q=ScaleQuantumToLong(ClampToQuantum(GetPixelIntensity(image,p)));
1465 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
1468static MagickBooleanType ExportQuantumPixel(
Image *image,
1470 const QuantumType *quantum_map,
void *pixels,
ExceptionInfo *exception)
1473 *magick_restrict indexes;
1490 q=(Quantum *) pixels;
1491 if (LocaleCompare(map,
"BGR") == 0)
1493 for (y=0; y < (ssize_t) roi->height; y++)
1495 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1498 for (x=0; x < (ssize_t) roi->width; x++)
1500 *q++=GetPixelBlue(p);
1501 *q++=GetPixelGreen(p);
1502 *q++=GetPixelRed(p);
1506 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
1508 if (LocaleCompare(map,
"BGRA") == 0)
1510 for (y=0; y < (ssize_t) roi->height; y++)
1512 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1515 for (x=0; x < (ssize_t) roi->width; x++)
1517 *q++=GetPixelBlue(p);
1518 *q++=GetPixelGreen(p);
1519 *q++=GetPixelRed(p);
1520 *q++=(Quantum) GetPixelAlpha(p);
1524 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
1526 if (LocaleCompare(map,
"BGRP") == 0)
1528 for (y=0; y < (ssize_t) roi->height; y++)
1530 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1533 for (x=0; x < (ssize_t) roi->width; x++)
1535 *q++=GetPixelBlue(p);
1536 *q++=GetPixelGreen(p);
1537 *q++=GetPixelRed(p);
1542 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
1544 if (LocaleCompare(map,
"I") == 0)
1546 for (y=0; y < (ssize_t) roi->height; y++)
1548 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1551 for (x=0; x < (ssize_t) roi->width; x++)
1553 *q++=ClampToQuantum(GetPixelIntensity(image,p));
1557 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
1559 if (LocaleCompare(map,
"RGB") == 0)
1561 for (y=0; y < (ssize_t) roi->height; y++)
1563 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1566 for (x=0; x < (ssize_t) roi->width; x++)
1568 *q++=GetPixelRed(p);
1569 *q++=GetPixelGreen(p);
1570 *q++=GetPixelBlue(p);
1574 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
1576 if (LocaleCompare(map,
"RGBA") == 0)
1578 for (y=0; y < (ssize_t) roi->height; y++)
1580 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1583 for (x=0; x < (ssize_t) roi->width; x++)
1585 *q++=GetPixelRed(p);
1586 *q++=GetPixelGreen(p);
1587 *q++=GetPixelBlue(p);
1588 *q++=(Quantum) GetPixelAlpha(p);
1592 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
1594 if (LocaleCompare(map,
"RGBP") == 0)
1596 for (y=0; y < (ssize_t) roi->height; y++)
1598 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1601 for (x=0; x < (ssize_t) roi->width; x++)
1603 *q++=GetPixelRed(p);
1604 *q++=GetPixelGreen(p);
1605 *q++=GetPixelBlue(p);
1610 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
1613 for (y=0; y < (ssize_t) roi->height; y++)
1615 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1618 indexes=GetVirtualIndexQueue(image);
1619 for (x=0; x < (ssize_t) roi->width; x++)
1624 for (i=0; i < (ssize_t) length; i++)
1627 switch (quantum_map[i])
1636 case MagentaQuantum:
1638 *q=GetPixelGreen(p);
1649 *q=(Quantum) (GetPixelAlpha(p));
1652 case OpacityQuantum:
1654 *q=GetPixelOpacity(p);
1659 if (image->colorspace == CMYKColorspace)
1660 *q=GetPixelIndex(indexes+x);
1665 *q=(ClampToQuantum(GetPixelIntensity(image,p)));
1679 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
1683 const char *magick_restrict map,
const QuantumType *quantum_map,
void *pixels,
1687 *magick_restrict indexes;
1704 q=(
unsigned short *) pixels;
1705 if (LocaleCompare(map,
"BGR") == 0)
1707 for (y=0; y < (ssize_t) roi->height; y++)
1709 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1712 for (x=0; x < (ssize_t) roi->width; x++)
1714 *q++=ScaleQuantumToShort(GetPixelBlue(p));
1715 *q++=ScaleQuantumToShort(GetPixelGreen(p));
1716 *q++=ScaleQuantumToShort(GetPixelRed(p));
1720 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
1722 if (LocaleCompare(map,
"BGRA") == 0)
1724 for (y=0; y < (ssize_t) roi->height; y++)
1726 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1729 for (x=0; x < (ssize_t) roi->width; x++)
1731 *q++=ScaleQuantumToShort(GetPixelBlue(p));
1732 *q++=ScaleQuantumToShort(GetPixelGreen(p));
1733 *q++=ScaleQuantumToShort(GetPixelRed(p));
1734 *q++=ScaleQuantumToShort((Quantum) GetPixelAlpha(p));
1738 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
1740 if (LocaleCompare(map,
"BGRP") == 0)
1742 for (y=0; y < (ssize_t) roi->height; y++)
1744 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1747 for (x=0; x < (ssize_t) roi->width; x++)
1749 *q++=ScaleQuantumToShort(GetPixelBlue(p));
1750 *q++=ScaleQuantumToShort(GetPixelGreen(p));
1751 *q++=ScaleQuantumToShort(GetPixelRed(p));
1756 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
1758 if (LocaleCompare(map,
"I") == 0)
1760 for (y=0; y < (ssize_t) roi->height; y++)
1762 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1765 for (x=0; x < (ssize_t) roi->width; x++)
1767 *q++=ScaleQuantumToShort(ClampToQuantum(GetPixelIntensity(image,p)));
1771 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
1773 if (LocaleCompare(map,
"RGB") == 0)
1775 for (y=0; y < (ssize_t) roi->height; y++)
1777 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1780 for (x=0; x < (ssize_t) roi->width; x++)
1782 *q++=ScaleQuantumToShort(GetPixelRed(p));
1783 *q++=ScaleQuantumToShort(GetPixelGreen(p));
1784 *q++=ScaleQuantumToShort(GetPixelBlue(p));
1788 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
1790 if (LocaleCompare(map,
"RGBA") == 0)
1792 for (y=0; y < (ssize_t) roi->height; y++)
1794 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1797 for (x=0; x < (ssize_t) roi->width; x++)
1799 *q++=ScaleQuantumToShort(GetPixelRed(p));
1800 *q++=ScaleQuantumToShort(GetPixelGreen(p));
1801 *q++=ScaleQuantumToShort(GetPixelBlue(p));
1802 *q++=ScaleQuantumToShort((Quantum) GetPixelAlpha(p));
1806 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
1808 if (LocaleCompare(map,
"RGBP") == 0)
1810 for (y=0; y < (ssize_t) roi->height; y++)
1812 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1815 for (x=0; x < (ssize_t) roi->width; x++)
1817 *q++=ScaleQuantumToShort(GetPixelRed(p));
1818 *q++=ScaleQuantumToShort(GetPixelGreen(p));
1819 *q++=ScaleQuantumToShort(GetPixelBlue(p));
1824 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
1827 for (y=0; y < (ssize_t) roi->height; y++)
1829 p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1832 indexes=GetVirtualIndexQueue(image);
1833 for (x=0; x < (ssize_t) roi->width; x++)
1838 for (i=0; i < (ssize_t) length; i++)
1841 switch (quantum_map[i])
1846 *q=ScaleQuantumToShort(GetPixelRed(p));
1850 case MagentaQuantum:
1852 *q=ScaleQuantumToShort(GetPixelGreen(p));
1858 *q=ScaleQuantumToShort(GetPixelBlue(p));
1863 *q=ScaleQuantumToShort((Quantum) (GetPixelAlpha(p)));
1866 case OpacityQuantum:
1868 *q=ScaleQuantumToShort(GetPixelOpacity(p));
1873 if (image->colorspace == CMYKColorspace)
1874 *q=ScaleQuantumToShort(GetPixelIndex(indexes+x));
1879 *q=ScaleQuantumToShort(ClampToQuantum(GetPixelIntensity(image,p)));
1890 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
1893MagickExport MagickBooleanType ExportImagePixels(
const Image *image,
1894 const ssize_t x,
const ssize_t y,
const size_t width,
const size_t height,
1895 const char *map,
const StorageType type,
void *pixels,
ExceptionInfo *exception)
1912 assert(image != (
Image *) NULL);
1913 assert(image->signature == MagickCoreSignature);
1914 if (IsEventLogging() != MagickFalse)
1915 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",image->filename);
1917 quantum_map=(QuantumType *) AcquireQuantumMemory(length,
sizeof(*quantum_map));
1918 if (quantum_map == (QuantumType *) NULL)
1920 (void) ThrowMagickException(exception,GetMagickModule(),
1921 ResourceLimitError,
"MemoryAllocationFailed",
"`%s'",image->filename);
1922 return(MagickFalse);
1924 for (i=0; i < (ssize_t) length; i++)
1931 quantum_map[i]=AlphaQuantum;
1937 quantum_map[i]=BlueQuantum;
1943 quantum_map[i]=CyanQuantum;
1944 if (image->colorspace == CMYKColorspace)
1946 quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
1947 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1948 "ColorSeparatedImageRequired",
"`%s'",map);
1949 return(MagickFalse);
1954 quantum_map[i]=GreenQuantum;
1960 quantum_map[i]=IndexQuantum;
1966 quantum_map[i]=BlackQuantum;
1967 if (image->colorspace == CMYKColorspace)
1969 quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
1970 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1971 "ColorSeparatedImageRequired",
"`%s'",map);
1972 return(MagickFalse);
1977 quantum_map[i]=MagentaQuantum;
1978 if (image->colorspace == CMYKColorspace)
1980 quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
1981 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1982 "ColorSeparatedImageRequired",
"`%s'",map);
1983 return(MagickFalse);
1988 quantum_map[i]=OpacityQuantum;
1994 quantum_map[i]=UndefinedQuantum;
2000 quantum_map[i]=RedQuantum;
2006 quantum_map[i]=YellowQuantum;
2007 if (image->colorspace == CMYKColorspace)
2009 quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
2010 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2011 "ColorSeparatedImageRequired",
"`%s'",map);
2012 return(MagickFalse);
2016 quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
2017 (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
2018 "UnrecognizedPixelMap",
"`%s'",map);
2019 return(MagickFalse);
2031 status=ExportCharPixel((
Image *) image,&roi,map,quantum_map,pixels,
2037 status=ExportDoublePixel((
Image *) image,&roi,map,quantum_map,pixels,
2043 status=ExportFloatPixel((
Image *) image,&roi,map,quantum_map,pixels,
2049 status=ExportIntegerPixel((
Image *) image,&roi,map,quantum_map,pixels,
2055 status=ExportLongPixel((
Image *) image,&roi,map,quantum_map,pixels,
2061 status=ExportQuantumPixel((
Image *) image,&roi,map,quantum_map,pixels,
2067 status=ExportShortPixel((
Image *) image,&roi,map,quantum_map,pixels,
2073 (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
2074 "UnrecognizedPixelMap",
"`%s'",map);
2078 quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
2119MagickExport MagickRealType GetMagickPixelIntensity(
const Image *image,
2131 switch (image->intensity)
2133 case AveragePixelIntensityMethod:
2135 intensity=(red+green+blue)/3.0;
2138 case BrightnessPixelIntensityMethod:
2140 intensity=MagickMax(MagickMax(red,green),blue);
2143 case LightnessPixelIntensityMethod:
2145 intensity=(MagickMin(MagickMin(red,green),blue)+
2146 MagickMax(MagickMax(red,green),blue))/2.0;
2149 case MSPixelIntensityMethod:
2151 intensity=(MagickRealType) (((
double) red*red+green*green+blue*blue)/
2152 (3.0*(
double) QuantumRange));
2155 case Rec601LumaPixelIntensityMethod:
2157 if (pixel->colorspace == RGBColorspace)
2159 red=EncodePixelGamma(red);
2160 green=EncodePixelGamma(green);
2161 blue=EncodePixelGamma(blue);
2163 intensity=0.298839*red+0.586811*green+0.114350*blue;
2166 case Rec601LuminancePixelIntensityMethod:
2168 if (pixel->colorspace == sRGBColorspace)
2170 red=DecodePixelGamma(red);
2171 green=DecodePixelGamma(green);
2172 blue=DecodePixelGamma(blue);
2174 intensity=0.298839*red+0.586811*green+0.114350*blue;
2177 case Rec709LumaPixelIntensityMethod:
2180 if (pixel->colorspace == RGBColorspace)
2182 red=EncodePixelGamma(red);
2183 green=EncodePixelGamma(green);
2184 blue=EncodePixelGamma(blue);
2186 intensity=0.212656*red+0.715158*green+0.072186*blue;
2189 case Rec709LuminancePixelIntensityMethod:
2191 if (pixel->colorspace == sRGBColorspace)
2193 red=DecodePixelGamma(red);
2194 green=DecodePixelGamma(green);
2195 blue=DecodePixelGamma(blue);
2197 intensity=0.212656*red+0.715158*green+0.072186*blue;
2200 case RMSPixelIntensityMethod:
2202 intensity=(MagickRealType) (sqrt((
double) red*red+green*green+blue*blue)/
2234MagickExport
void GetMagickPixelPacket(
const Image *image,
2237 pixel->storage_class=DirectClass;
2238 pixel->colorspace=sRGBColorspace;
2239 pixel->matte=MagickFalse;
2241 pixel->depth=MAGICKCORE_QUANTUM_DEPTH;
2245 pixel->opacity=(MagickRealType) OpaqueOpacity;
2247 if (image == (
const Image *) NULL)
2249 pixel->storage_class=image->storage_class;
2250 pixel->colorspace=image->colorspace;
2251 pixel->matte=image->matte;
2252 pixel->depth=image->depth;
2253 pixel->fuzz=image->fuzz;
2293MagickExport MagickRealType GetPixelIntensity(
const Image *image,
2302 red=(MagickRealType) pixel->red;
2303 green=(MagickRealType) pixel->green;
2304 blue=(MagickRealType) pixel->blue;
2305 switch (image->intensity)
2307 case AveragePixelIntensityMethod:
2309 intensity=(red+green+blue)/3.0;
2312 case BrightnessPixelIntensityMethod:
2314 intensity=MagickMax(MagickMax(red,green),blue);
2317 case LightnessPixelIntensityMethod:
2319 intensity=(MagickMin(MagickMin(red,green),blue)+
2320 MagickMax(MagickMax(red,green),blue))/2.0;
2323 case MSPixelIntensityMethod:
2325 intensity=(MagickRealType) (((
double) red*red+green*green+blue*blue)/
2326 (3.0*(
double) QuantumRange));
2329 case Rec601LumaPixelIntensityMethod:
2331 if ((image->colorspace == RGBColorspace) ||
2332 (image->colorspace == LinearGRAYColorspace))
2334 red=EncodePixelGamma(red);
2335 green=EncodePixelGamma(green);
2336 blue=EncodePixelGamma(blue);
2338 intensity=0.298839*red+0.586811*green+0.114350*blue;
2341 case Rec601LuminancePixelIntensityMethod:
2343 if ((image->colorspace == sRGBColorspace) ||
2344 (image->colorspace == GRAYColorspace))
2346 red=DecodePixelGamma(red);
2347 green=DecodePixelGamma(green);
2348 blue=DecodePixelGamma(blue);
2350 intensity=0.298839*red+0.586811*green+0.114350*blue;
2353 case Rec709LumaPixelIntensityMethod:
2356 if ((image->colorspace == RGBColorspace) ||
2357 (image->colorspace == LinearGRAYColorspace))
2359 red=EncodePixelGamma(red);
2360 green=EncodePixelGamma(green);
2361 blue=EncodePixelGamma(blue);
2363 intensity=0.212656*red+0.715158*green+0.072186*blue;
2366 case Rec709LuminancePixelIntensityMethod:
2368 if ((image->colorspace == sRGBColorspace) ||
2369 (image->colorspace == GRAYColorspace))
2371 red=DecodePixelGamma(red);
2372 green=DecodePixelGamma(green);
2373 blue=DecodePixelGamma(blue);
2375 intensity=0.212656*red+0.715158*green+0.072186*blue;
2378 case RMSPixelIntensityMethod:
2380 intensity=(MagickRealType) (sqrt((
double) red*red+green*green+blue*blue)/
2442 const char *magick_restrict map,
const QuantumType *quantum_map,
2449 *magick_restrict indexes;
2463 p=(
const unsigned char *) pixels;
2464 if (LocaleCompare(map,
"BGR") == 0)
2466 for (y=0; y < (ssize_t) roi->height; y++)
2468 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2471 for (x=0; x < (ssize_t) roi->width; x++)
2473 SetPixelBlue(q,ScaleCharToQuantum(*p++));
2474 SetPixelGreen(q,ScaleCharToQuantum(*p++));
2475 SetPixelRed(q,ScaleCharToQuantum(*p++));
2478 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2481 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
2483 if (LocaleCompare(map,
"BGRA") == 0)
2485 for (y=0; y < (ssize_t) roi->height; y++)
2487 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2490 for (x=0; x < (ssize_t) roi->width; x++)
2492 SetPixelBlue(q,ScaleCharToQuantum(*p++));
2493 SetPixelGreen(q,ScaleCharToQuantum(*p++));
2494 SetPixelRed(q,ScaleCharToQuantum(*p++));
2495 SetPixelAlpha(q,ScaleCharToQuantum(*p++));
2498 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2501 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
2503 if (LocaleCompare(map,
"BGRO") == 0)
2505 for (y=0; y < (ssize_t) roi->height; y++)
2507 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2510 for (x=0; x < (ssize_t) roi->width; x++)
2512 SetPixelBlue(q,ScaleCharToQuantum(*p++));
2513 SetPixelGreen(q,ScaleCharToQuantum(*p++));
2514 SetPixelRed(q,ScaleCharToQuantum(*p++));
2515 SetPixelOpacity(q,ScaleCharToQuantum(*p++));
2518 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2521 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
2523 if (LocaleCompare(map,
"BGRP") == 0)
2525 for (y=0; y < (ssize_t) roi->height; y++)
2527 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2530 for (x=0; x < (ssize_t) roi->width; x++)
2532 SetPixelBlue(q,ScaleCharToQuantum(*p++));
2533 SetPixelGreen(q,ScaleCharToQuantum(*p++));
2534 SetPixelRed(q,ScaleCharToQuantum(*p++));
2538 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2541 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
2543 if (LocaleCompare(map,
"I") == 0)
2545 for (y=0; y < (ssize_t) roi->height; y++)
2547 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2550 for (x=0; x < (ssize_t) roi->width; x++)
2552 SetPixelRed(q,ScaleCharToQuantum(*p++));
2553 SetPixelGreen(q,GetPixelRed(q));
2554 SetPixelBlue(q,GetPixelRed(q));
2557 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2560 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
2562 if (LocaleCompare(map,
"RGB") == 0)
2564 for (y=0; y < (ssize_t) roi->height; y++)
2566 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2569 for (x=0; x < (ssize_t) roi->width; x++)
2571 SetPixelRed(q,ScaleCharToQuantum(*p++));
2572 SetPixelGreen(q,ScaleCharToQuantum(*p++));
2573 SetPixelBlue(q,ScaleCharToQuantum(*p++));
2576 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2579 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
2581 if (LocaleCompare(map,
"RGBA") == 0)
2583 for (y=0; y < (ssize_t) roi->height; y++)
2585 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2588 for (x=0; x < (ssize_t) roi->width; x++)
2590 SetPixelRed(q,ScaleCharToQuantum(*p++));
2591 SetPixelGreen(q,ScaleCharToQuantum(*p++));
2592 SetPixelBlue(q,ScaleCharToQuantum(*p++));
2593 SetPixelAlpha(q,ScaleCharToQuantum(*p++));
2596 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2599 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
2601 if (LocaleCompare(map,
"RGBO") == 0)
2603 for (y=0; y < (ssize_t) roi->height; y++)
2605 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2608 for (x=0; x < (ssize_t) roi->width; x++)
2610 SetPixelRed(q,ScaleCharToQuantum(*p++));
2611 SetPixelGreen(q,ScaleCharToQuantum(*p++));
2612 SetPixelBlue(q,ScaleCharToQuantum(*p++));
2613 SetPixelOpacity(q,ScaleCharToQuantum(*p++));
2616 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2619 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
2621 if (LocaleCompare(map,
"RGBP") == 0)
2623 for (y=0; y < (ssize_t) roi->height; y++)
2625 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2628 for (x=0; x < (ssize_t) roi->width; x++)
2630 SetPixelRed(q,ScaleCharToQuantum(*p++));
2631 SetPixelGreen(q,ScaleCharToQuantum(*p++));
2632 SetPixelBlue(q,ScaleCharToQuantum(*p++));
2636 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2639 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
2642 for (y=0; y < (ssize_t) roi->height; y++)
2644 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2647 indexes=GetAuthenticIndexQueue(image);
2648 for (x=0; x < (ssize_t) roi->width; x++)
2653 for (i=0; i < (ssize_t) length; i++)
2655 switch (quantum_map[i])
2660 SetPixelRed(q,ScaleCharToQuantum(*p));
2664 case MagentaQuantum:
2666 SetPixelGreen(q,ScaleCharToQuantum(*p));
2672 SetPixelBlue(q,ScaleCharToQuantum(*p));
2677 SetPixelAlpha(q,ScaleCharToQuantum(*p));
2680 case OpacityQuantum:
2682 SetPixelOpacity(q,ScaleCharToQuantum(*p));
2687 SetPixelIndex(indexes+x,ScaleCharToQuantum(*p));
2692 SetPixelRed(q,ScaleCharToQuantum(*p));
2693 SetPixelGreen(q,GetPixelRed(q));
2694 SetPixelBlue(q,GetPixelRed(q));
2704 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2707 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
2710static MagickBooleanType ImportDoublePixel(
Image *image,
2712 const QuantumType *quantum_map,
const void *pixels,
ExceptionInfo *exception)
2718 *magick_restrict indexes;
2732 p=(
const double *) pixels;
2733 if (LocaleCompare(map,
"BGR") == 0)
2735 for (y=0; y < (ssize_t) roi->height; y++)
2737 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2740 for (x=0; x < (ssize_t) roi->width; x++)
2742 SetPixelBlue(q,ClampToQuantum((MagickRealType) QuantumRange*(*p)));
2744 SetPixelGreen(q,ClampToQuantum((MagickRealType) QuantumRange*(*p)));
2746 SetPixelRed(q,ClampToQuantum((MagickRealType) QuantumRange*(*p)));
2750 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2753 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
2755 if (LocaleCompare(map,
"BGRA") == 0)
2757 for (y=0; y < (ssize_t) roi->height; y++)
2759 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2762 for (x=0; x < (ssize_t) roi->width; x++)
2764 SetPixelBlue(q,ClampToQuantum((MagickRealType) QuantumRange*(*p)));
2766 SetPixelGreen(q,ClampToQuantum((MagickRealType) QuantumRange*(*p)));
2768 SetPixelRed(q,ClampToQuantum((MagickRealType) QuantumRange*(*p)));
2770 q->opacity=QuantumRange-ClampToQuantum((MagickRealType)
2775 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2778 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
2780 if (LocaleCompare(map,
"BGRP") == 0)
2782 for (y=0; y < (ssize_t) roi->height; y++)
2784 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2787 for (x=0; x < (ssize_t) roi->width; x++)
2789 SetPixelBlue(q,ClampToQuantum((MagickRealType) QuantumRange*(*p)));
2791 SetPixelGreen(q,ClampToQuantum((MagickRealType) QuantumRange*(*p)));
2793 SetPixelRed(q,ClampToQuantum((MagickRealType) QuantumRange*(*p)));
2798 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2801 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
2803 if (LocaleCompare(map,
"I") == 0)
2805 for (y=0; y < (ssize_t) roi->height; y++)
2807 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2810 for (x=0; x < (ssize_t) roi->width; x++)
2812 SetPixelRed(q,ClampToQuantum((MagickRealType) QuantumRange*(*p)));
2813 SetPixelGreen(q,GetPixelRed(q));
2814 SetPixelBlue(q,GetPixelRed(q));
2818 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2821 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
2823 if (LocaleCompare(map,
"RGB") == 0)
2825 for (y=0; y < (ssize_t) roi->height; y++)
2827 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2830 for (x=0; x < (ssize_t) roi->width; x++)
2832 SetPixelRed(q,ClampToQuantum((MagickRealType) QuantumRange*(*p)));
2834 SetPixelGreen(q,ClampToQuantum((MagickRealType) QuantumRange*(*p)));
2836 SetPixelBlue(q,ClampToQuantum((MagickRealType) QuantumRange*(*p)));
2840 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2843 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
2845 if (LocaleCompare(map,
"RGBA") == 0)
2847 for (y=0; y < (ssize_t) roi->height; y++)
2849 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2852 for (x=0; x < (ssize_t) roi->width; x++)
2854 SetPixelRed(q,ClampToQuantum((MagickRealType) QuantumRange*(*p)));
2856 SetPixelGreen(q,ClampToQuantum((MagickRealType) QuantumRange*(*p)));
2858 SetPixelBlue(q,ClampToQuantum((MagickRealType) QuantumRange*(*p)));
2860 SetPixelAlpha(q,ClampToQuantum((MagickRealType) QuantumRange*(*p)));
2864 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2867 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
2869 if (LocaleCompare(map,
"RGBP") == 0)
2871 for (y=0; y < (ssize_t) roi->height; y++)
2873 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2876 for (x=0; x < (ssize_t) roi->width; x++)
2878 SetPixelRed(q,ClampToQuantum((MagickRealType) QuantumRange*(*p)));
2880 SetPixelGreen(q,ClampToQuantum((MagickRealType) QuantumRange*(*p)));
2882 SetPixelBlue(q,ClampToQuantum((MagickRealType) QuantumRange*(*p)));
2886 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2889 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
2892 for (y=0; y < (ssize_t) roi->height; y++)
2894 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2897 indexes=GetAuthenticIndexQueue(image);
2898 for (x=0; x < (ssize_t) roi->width; x++)
2903 for (i=0; i < (ssize_t) length; i++)
2905 switch (quantum_map[i])
2910 SetPixelRed(q,ClampToQuantum((MagickRealType)
2911 QuantumRange*(*p)));
2915 case MagentaQuantum:
2917 SetPixelGreen(q,ClampToQuantum((MagickRealType)
2918 QuantumRange*(*p)));
2924 SetPixelBlue(q,ClampToQuantum((MagickRealType)
2925 QuantumRange*(*p)));
2930 SetPixelAlpha(q,ClampToQuantum((MagickRealType)
2931 QuantumRange*(*p)));
2934 case OpacityQuantum:
2936 SetPixelOpacity(q,ClampToQuantum((MagickRealType)
2937 QuantumRange*(*p)));
2942 SetPixelIndex(indexes+x,ClampToQuantum((MagickRealType)
2943 QuantumRange*(*p)));
2948 SetPixelRed(q,ClampToQuantum((MagickRealType) QuantumRange*(*p)));
2949 SetPixelGreen(q,GetPixelRed(q));
2950 SetPixelBlue(q,GetPixelRed(q));
2960 if (SyncAuthenticPixels(image,exception) == MagickFalse)
2963 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
2967 const char *magick_restrict map,
const QuantumType *quantum_map,
2974 *magick_restrict indexes;
2988 p=(
const float *) pixels;
2989 if (LocaleCompare(map,
"BGR") == 0)
2991 for (y=0; y < (ssize_t) roi->height; y++)
2993 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2996 for (x=0; x < (ssize_t) roi->width; x++)
2998 SetPixelBlue(q,ClampToQuantum((MagickRealType) QuantumRange*
2999 (MagickRealType) (*p)));
3001 SetPixelGreen(q,ClampToQuantum((MagickRealType) QuantumRange*
3002 (MagickRealType) (*p)));
3004 SetPixelRed(q,ClampToQuantum((MagickRealType) QuantumRange*
3005 (MagickRealType) (*p)));
3009 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3012 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
3014 if (LocaleCompare(map,
"BGRA") == 0)
3016 for (y=0; y < (ssize_t) roi->height; y++)
3018 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3021 for (x=0; x < (ssize_t) roi->width; x++)
3023 SetPixelBlue(q,ClampToQuantum((MagickRealType) QuantumRange*
3024 (MagickRealType) (*p)));
3026 SetPixelGreen(q,ClampToQuantum((MagickRealType) QuantumRange*
3027 (MagickRealType) (*p)));
3029 SetPixelRed(q,ClampToQuantum((MagickRealType) QuantumRange*
3030 (MagickRealType) (*p)));
3032 SetPixelAlpha(q,ClampToQuantum((MagickRealType) QuantumRange*
3033 (MagickRealType) (*p)));
3037 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3040 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
3042 if (LocaleCompare(map,
"BGRP") == 0)
3044 for (y=0; y < (ssize_t) roi->height; y++)
3046 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3049 for (x=0; x < (ssize_t) roi->width; x++)
3051 SetPixelBlue(q,ClampToQuantum((MagickRealType) QuantumRange*
3052 (MagickRealType) (*p)));
3054 SetPixelGreen(q,ClampToQuantum((MagickRealType) QuantumRange*
3055 (MagickRealType) (*p)));
3057 SetPixelRed(q,ClampToQuantum((MagickRealType) QuantumRange*
3058 (MagickRealType) (*p)));
3063 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3066 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
3068 if (LocaleCompare(map,
"I") == 0)
3070 for (y=0; y < (ssize_t) roi->height; y++)
3072 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3075 for (x=0; x < (ssize_t) roi->width; x++)
3077 SetPixelRed(q,ClampToQuantum((MagickRealType) QuantumRange*
3078 (MagickRealType) (*p)));
3079 SetPixelGreen(q,GetPixelRed(q));
3080 SetPixelBlue(q,GetPixelRed(q));
3084 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3087 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
3089 if (LocaleCompare(map,
"RGB") == 0)
3091 for (y=0; y < (ssize_t) roi->height; y++)
3093 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3096 for (x=0; x < (ssize_t) roi->width; x++)
3098 SetPixelRed(q,ClampToQuantum((MagickRealType) QuantumRange*
3099 (MagickRealType) (*p)));
3101 SetPixelGreen(q,ClampToQuantum((MagickRealType) QuantumRange*
3102 (MagickRealType) (*p)));
3104 SetPixelBlue(q,ClampToQuantum((MagickRealType) QuantumRange*
3105 (MagickRealType) (*p)));
3109 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3112 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
3114 if (LocaleCompare(map,
"RGBA") == 0)
3116 for (y=0; y < (ssize_t) roi->height; y++)
3118 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3121 for (x=0; x < (ssize_t) roi->width; x++)
3123 SetPixelRed(q,ClampToQuantum((MagickRealType) QuantumRange*
3124 (MagickRealType) (*p)));
3126 SetPixelGreen(q,ClampToQuantum((MagickRealType) QuantumRange*
3127 (MagickRealType) (*p)));
3129 SetPixelBlue(q,ClampToQuantum((MagickRealType) QuantumRange*
3130 (MagickRealType) (*p)));
3132 SetPixelAlpha(q,ClampToQuantum((MagickRealType) QuantumRange*
3133 (MagickRealType) (*p)));
3137 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3140 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
3142 if (LocaleCompare(map,
"RGBP") == 0)
3144 for (y=0; y < (ssize_t) roi->height; y++)
3146 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3149 for (x=0; x < (ssize_t) roi->width; x++)
3151 SetPixelRed(q,ClampToQuantum((MagickRealType) QuantumRange*
3152 (MagickRealType) (*p)));
3154 SetPixelGreen(q,ClampToQuantum((MagickRealType) QuantumRange*
3155 (MagickRealType) (*p)));
3157 SetPixelBlue(q,ClampToQuantum((MagickRealType) QuantumRange*
3158 (MagickRealType) (*p)));
3162 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3165 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
3168 for (y=0; y < (ssize_t) roi->height; y++)
3170 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3173 indexes=GetAuthenticIndexQueue(image);
3174 for (x=0; x < (ssize_t) roi->width; x++)
3179 for (i=0; i < (ssize_t) length; i++)
3181 switch (quantum_map[i])
3186 SetPixelRed(q,ClampToQuantum((MagickRealType) QuantumRange*
3187 (MagickRealType) (*p)));
3191 case MagentaQuantum:
3193 SetPixelGreen(q,ClampToQuantum((MagickRealType) QuantumRange*
3194 (MagickRealType) (*p)));
3200 SetPixelBlue(q,ClampToQuantum((MagickRealType) QuantumRange*
3201 (MagickRealType) (*p)));
3206 SetPixelAlpha(q,ClampToQuantum((MagickRealType) QuantumRange*
3207 (MagickRealType) (*p)));
3210 case OpacityQuantum:
3212 SetPixelOpacity(q,ClampToQuantum((MagickRealType)
3213 QuantumRange*(MagickRealType) (*p)));
3218 SetPixelIndex(indexes+x,ClampToQuantum((MagickRealType)
3219 QuantumRange*(MagickRealType) (*p)));
3224 SetPixelRed(q,ClampToQuantum((MagickRealType) QuantumRange*
3225 (MagickRealType) (*p)));
3226 SetPixelGreen(q,GetPixelRed(q));
3227 SetPixelBlue(q,GetPixelRed(q));
3237 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3240 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
3243static MagickBooleanType ImportIntegerPixel(
Image *image,
3245 const QuantumType *quantum_map,
const void *pixels,
ExceptionInfo *exception)
3251 *magick_restrict indexes;
3265 p=(
const unsigned int *) pixels;
3266 if (LocaleCompare(map,
"BGR") == 0)
3268 for (y=0; y < (ssize_t) roi->height; y++)
3270 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3273 for (x=0; x < (ssize_t) roi->width; x++)
3275 SetPixelBlue(q,ScaleLongToQuantum(*p++));
3276 SetPixelGreen(q,ScaleLongToQuantum(*p++));
3277 SetPixelRed(q,ScaleLongToQuantum(*p++));
3280 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3283 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
3285 if (LocaleCompare(map,
"BGRA") == 0)
3287 for (y=0; y < (ssize_t) roi->height; y++)
3289 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3292 for (x=0; x < (ssize_t) roi->width; x++)
3294 SetPixelBlue(q,ScaleLongToQuantum(*p++));
3295 SetPixelGreen(q,ScaleLongToQuantum(*p++));
3296 SetPixelRed(q,ScaleLongToQuantum(*p++));
3297 SetPixelAlpha(q,ScaleLongToQuantum(*p++));
3300 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3303 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
3305 if (LocaleCompare(map,
"BGRP") == 0)
3307 for (y=0; y < (ssize_t) roi->height; y++)
3309 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3312 for (x=0; x < (ssize_t) roi->width; x++)
3314 SetPixelBlue(q,ScaleLongToQuantum(*p++));
3315 SetPixelGreen(q,ScaleLongToQuantum(*p++));
3316 SetPixelRed(q,ScaleLongToQuantum(*p++));
3320 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3323 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
3325 if (LocaleCompare(map,
"I") == 0)
3327 for (y=0; y < (ssize_t) roi->height; y++)
3329 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3332 for (x=0; x < (ssize_t) roi->width; x++)
3334 SetPixelRed(q,ScaleLongToQuantum(*p++));
3335 SetPixelGreen(q,GetPixelRed(q));
3336 SetPixelBlue(q,GetPixelRed(q));
3339 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3342 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
3344 if (LocaleCompare(map,
"RGB") == 0)
3346 for (y=0; y < (ssize_t) roi->height; y++)
3348 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3351 for (x=0; x < (ssize_t) roi->width; x++)
3353 SetPixelRed(q,ScaleLongToQuantum(*p++));
3354 SetPixelGreen(q,ScaleLongToQuantum(*p++));
3355 SetPixelBlue(q,ScaleLongToQuantum(*p++));
3358 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3361 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
3363 if (LocaleCompare(map,
"RGBA") == 0)
3365 for (y=0; y < (ssize_t) roi->height; y++)
3367 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3370 for (x=0; x < (ssize_t) roi->width; x++)
3372 SetPixelRed(q,ScaleLongToQuantum(*p++));
3373 SetPixelGreen(q,ScaleLongToQuantum(*p++));
3374 SetPixelBlue(q,ScaleLongToQuantum(*p++));
3375 SetPixelAlpha(q,ScaleLongToQuantum(*p++));
3378 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3381 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
3383 if (LocaleCompare(map,
"RGBP") == 0)
3385 for (y=0; y < (ssize_t) roi->height; y++)
3387 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3390 for (x=0; x < (ssize_t) roi->width; x++)
3392 SetPixelRed(q,ScaleLongToQuantum(*p++));
3393 SetPixelGreen(q,ScaleLongToQuantum(*p++));
3394 SetPixelBlue(q,ScaleLongToQuantum(*p++));
3398 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3401 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
3404 for (y=0; y < (ssize_t) roi->height; y++)
3406 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3409 indexes=GetAuthenticIndexQueue(image);
3410 for (x=0; x < (ssize_t) roi->width; x++)
3415 for (i=0; i < (ssize_t) length; i++)
3417 switch (quantum_map[i])
3422 SetPixelRed(q,ScaleLongToQuantum(*p));
3426 case MagentaQuantum:
3428 SetPixelGreen(q,ScaleLongToQuantum(*p));
3434 SetPixelBlue(q,ScaleLongToQuantum(*p));
3439 SetPixelAlpha(q,ScaleLongToQuantum(*p));
3442 case OpacityQuantum:
3444 SetPixelOpacity(q,ScaleLongToQuantum(*p));
3449 SetPixelIndex(indexes+x,ScaleLongToQuantum(*p));
3454 SetPixelRed(q,ScaleLongToQuantum(*p));
3455 SetPixelGreen(q,GetPixelRed(q));
3456 SetPixelBlue(q,GetPixelRed(q));
3466 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3469 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
3473 const char *magick_restrict map,
const QuantumType *quantum_map,
3480 *magick_restrict indexes;
3494 p=(
const unsigned int *) pixels;
3495 if (LocaleCompare(map,
"BGR") == 0)
3497 for (y=0; y < (ssize_t) roi->height; y++)
3499 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3502 for (x=0; x < (ssize_t) roi->width; x++)
3504 SetPixelBlue(q,ScaleLongToQuantum(*p++));
3505 SetPixelGreen(q,ScaleLongToQuantum(*p++));
3506 SetPixelRed(q,ScaleLongToQuantum(*p++));
3509 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3512 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
3514 if (LocaleCompare(map,
"BGRA") == 0)
3516 for (y=0; y < (ssize_t) roi->height; y++)
3518 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3521 for (x=0; x < (ssize_t) roi->width; x++)
3523 SetPixelBlue(q,ScaleLongToQuantum(*p++));
3524 SetPixelGreen(q,ScaleLongToQuantum(*p++));
3525 SetPixelRed(q,ScaleLongToQuantum(*p++));
3526 SetPixelAlpha(q,ScaleLongToQuantum(*p++));
3529 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3532 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
3534 if (LocaleCompare(map,
"BGRP") == 0)
3536 for (y=0; y < (ssize_t) roi->height; y++)
3538 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3541 for (x=0; x < (ssize_t) roi->width; x++)
3543 SetPixelBlue(q,ScaleLongToQuantum(*p++));
3544 SetPixelGreen(q,ScaleLongToQuantum(*p++));
3545 SetPixelRed(q,ScaleLongToQuantum(*p++));
3549 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3552 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
3554 if (LocaleCompare(map,
"I") == 0)
3556 for (y=0; y < (ssize_t) roi->height; y++)
3558 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3561 for (x=0; x < (ssize_t) roi->width; x++)
3563 SetPixelRed(q,ScaleLongToQuantum(*p++));
3564 SetPixelGreen(q,GetPixelRed(q));
3565 SetPixelBlue(q,GetPixelRed(q));
3568 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3571 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
3573 if (LocaleCompare(map,
"RGB") == 0)
3575 for (y=0; y < (ssize_t) roi->height; y++)
3577 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3580 for (x=0; x < (ssize_t) roi->width; x++)
3582 SetPixelRed(q,ScaleLongToQuantum(*p++));
3583 SetPixelGreen(q,ScaleLongToQuantum(*p++));
3584 SetPixelBlue(q,ScaleLongToQuantum(*p++));
3587 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3590 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
3592 if (LocaleCompare(map,
"RGBA") == 0)
3594 for (y=0; y < (ssize_t) roi->height; y++)
3596 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3599 for (x=0; x < (ssize_t) roi->width; x++)
3601 SetPixelRed(q,ScaleLongToQuantum(*p++));
3602 SetPixelGreen(q,ScaleLongToQuantum(*p++));
3603 SetPixelBlue(q,ScaleLongToQuantum(*p++));
3604 SetPixelAlpha(q,ScaleLongToQuantum(*p++));
3607 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3610 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
3612 if (LocaleCompare(map,
"RGBP") == 0)
3614 for (y=0; y < (ssize_t) roi->height; y++)
3616 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3619 for (x=0; x < (ssize_t) roi->width; x++)
3621 SetPixelRed(q,ScaleLongToQuantum(*p++));
3622 SetPixelGreen(q,ScaleLongToQuantum(*p++));
3623 SetPixelBlue(q,ScaleLongToQuantum(*p++));
3627 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3630 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
3633 for (y=0; y < (ssize_t) roi->height; y++)
3635 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3638 indexes=GetAuthenticIndexQueue(image);
3639 for (x=0; x < (ssize_t) roi->width; x++)
3644 for (i=0; i < (ssize_t) length; i++)
3646 switch (quantum_map[i])
3651 SetPixelRed(q,ScaleLongToQuantum(*p));
3655 case MagentaQuantum:
3657 SetPixelGreen(q,ScaleLongToQuantum(*p));
3663 SetPixelBlue(q,ScaleLongToQuantum(*p));
3668 SetPixelAlpha(q,ScaleLongToQuantum(*p));
3671 case OpacityQuantum:
3673 SetPixelOpacity(q,ScaleLongToQuantum(*p));
3678 SetPixelIndex(indexes+x,ScaleLongToQuantum(*p));
3683 SetPixelRed(q,ScaleLongToQuantum(*p));
3684 SetPixelGreen(q,GetPixelRed(q));
3685 SetPixelBlue(q,GetPixelRed(q));
3695 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3698 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
3701static MagickBooleanType ImportQuantumPixel(
Image *image,
3703 const QuantumType *quantum_map,
const void *pixels,
ExceptionInfo *exception)
3709 *magick_restrict indexes;
3723 p=(
const Quantum *) pixels;
3724 if (LocaleCompare(map,
"BGR") == 0)
3726 for (y=0; y < (ssize_t) roi->height; y++)
3728 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3731 for (x=0; x < (ssize_t) roi->width; x++)
3733 SetPixelBlue(q,*p++);
3734 SetPixelGreen(q,*p++);
3735 SetPixelRed(q,*p++);
3738 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3741 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
3743 if (LocaleCompare(map,
"BGRA") == 0)
3745 for (y=0; y < (ssize_t) roi->height; y++)
3747 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3750 for (x=0; x < (ssize_t) roi->width; x++)
3752 SetPixelBlue(q,*p++);
3753 SetPixelGreen(q,*p++);
3754 SetPixelRed(q,*p++);
3755 SetPixelAlpha(q,*p++);
3758 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3761 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
3763 if (LocaleCompare(map,
"BGRP") == 0)
3765 for (y=0; y < (ssize_t) roi->height; y++)
3767 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3770 for (x=0; x < (ssize_t) roi->width; x++)
3772 SetPixelBlue(q,*p++);
3773 SetPixelGreen(q,*p++);
3774 SetPixelRed(q,*p++);
3778 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3781 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
3783 if (LocaleCompare(map,
"I") == 0)
3785 for (y=0; y < (ssize_t) roi->height; y++)
3787 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3790 for (x=0; x < (ssize_t) roi->width; x++)
3792 SetPixelRed(q,*p++);
3793 SetPixelGreen(q,GetPixelRed(q));
3794 SetPixelBlue(q,GetPixelRed(q));
3797 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3800 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
3802 if (LocaleCompare(map,
"RGB") == 0)
3804 for (y=0; y < (ssize_t) roi->height; y++)
3806 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3809 for (x=0; x < (ssize_t) roi->width; x++)
3811 SetPixelRed(q,*p++);
3812 SetPixelGreen(q,*p++);
3813 SetPixelBlue(q,*p++);
3816 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3819 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
3821 if (LocaleCompare(map,
"RGBA") == 0)
3823 for (y=0; y < (ssize_t) roi->height; y++)
3825 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3828 for (x=0; x < (ssize_t) roi->width; x++)
3830 SetPixelRed(q,*p++);
3831 SetPixelGreen(q,*p++);
3832 SetPixelBlue(q,*p++);
3833 SetPixelAlpha(q,*p++);
3836 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3839 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
3841 if (LocaleCompare(map,
"RGBP") == 0)
3843 for (y=0; y < (ssize_t) roi->height; y++)
3845 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3848 for (x=0; x < (ssize_t) roi->width; x++)
3850 SetPixelRed(q,*p++);
3851 SetPixelGreen(q,*p++);
3852 SetPixelBlue(q,*p++);
3856 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3859 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
3862 for (y=0; y < (ssize_t) roi->height; y++)
3864 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3867 indexes=GetAuthenticIndexQueue(image);
3868 for (x=0; x < (ssize_t) roi->width; x++)
3873 for (i=0; i < (ssize_t) length; i++)
3875 switch (quantum_map[i])
3884 case MagentaQuantum:
3886 SetPixelGreen(q,*p);
3897 SetPixelAlpha(q,*p);
3900 case OpacityQuantum:
3902 SetPixelOpacity(q,*p);
3907 SetPixelIndex(indexes+x,*p);
3913 SetPixelGreen(q,GetPixelRed(q));
3914 SetPixelBlue(q,GetPixelRed(q));
3924 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3927 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
3931 const char *magick_restrict map,
const QuantumType *quantum_map,
3934 const unsigned short
3938 *magick_restrict indexes;
3952 p=(
const unsigned short *) pixels;
3953 if (LocaleCompare(map,
"BGR") == 0)
3955 for (y=0; y < (ssize_t) roi->height; y++)
3957 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3960 for (x=0; x < (ssize_t) roi->width; x++)
3962 SetPixelBlue(q,ScaleShortToQuantum(*p++));
3963 SetPixelGreen(q,ScaleShortToQuantum(*p++));
3964 SetPixelRed(q,ScaleShortToQuantum(*p++));
3967 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3970 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
3972 if (LocaleCompare(map,
"BGRA") == 0)
3974 for (y=0; y < (ssize_t) roi->height; y++)
3976 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3979 for (x=0; x < (ssize_t) roi->width; x++)
3981 SetPixelBlue(q,ScaleShortToQuantum(*p++));
3982 SetPixelGreen(q,ScaleShortToQuantum(*p++));
3983 SetPixelRed(q,ScaleShortToQuantum(*p++));
3984 SetPixelAlpha(q,ScaleShortToQuantum(*p++));
3987 if (SyncAuthenticPixels(image,exception) == MagickFalse)
3990 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
3992 if (LocaleCompare(map,
"BGRP") == 0)
3994 for (y=0; y < (ssize_t) roi->height; y++)
3996 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3999 for (x=0; x < (ssize_t) roi->width; x++)
4001 SetPixelBlue(q,ScaleShortToQuantum(*p++));
4002 SetPixelGreen(q,ScaleShortToQuantum(*p++));
4003 SetPixelRed(q,ScaleShortToQuantum(*p++));
4007 if (SyncAuthenticPixels(image,exception) == MagickFalse)
4010 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
4012 if (LocaleCompare(map,
"I") == 0)
4014 for (y=0; y < (ssize_t) roi->height; y++)
4016 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
4019 for (x=0; x < (ssize_t) roi->width; x++)
4021 SetPixelRed(q,ScaleShortToQuantum(*p++));
4022 SetPixelGreen(q,GetPixelRed(q));
4023 SetPixelBlue(q,GetPixelRed(q));
4026 if (SyncAuthenticPixels(image,exception) == MagickFalse)
4029 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
4031 if (LocaleCompare(map,
"RGB") == 0)
4033 for (y=0; y < (ssize_t) roi->height; y++)
4035 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
4038 for (x=0; x < (ssize_t) roi->width; x++)
4040 SetPixelRed(q,ScaleShortToQuantum(*p++));
4041 SetPixelGreen(q,ScaleShortToQuantum(*p++));
4042 SetPixelBlue(q,ScaleShortToQuantum(*p++));
4045 if (SyncAuthenticPixels(image,exception) == MagickFalse)
4048 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
4050 if (LocaleCompare(map,
"RGBA") == 0)
4052 for (y=0; y < (ssize_t) roi->height; y++)
4054 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
4057 for (x=0; x < (ssize_t) roi->width; x++)
4059 SetPixelRed(q,ScaleShortToQuantum(*p++));
4060 SetPixelGreen(q,ScaleShortToQuantum(*p++));
4061 SetPixelBlue(q,ScaleShortToQuantum(*p++));
4062 SetPixelAlpha(q,ScaleShortToQuantum(*p++));
4065 if (SyncAuthenticPixels(image,exception) == MagickFalse)
4068 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
4070 if (LocaleCompare(map,
"RGBP") == 0)
4072 for (y=0; y < (ssize_t) roi->height; y++)
4074 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
4077 for (x=0; x < (ssize_t) roi->width; x++)
4079 SetPixelRed(q,ScaleShortToQuantum(*p++));
4080 SetPixelGreen(q,ScaleShortToQuantum(*p++));
4081 SetPixelBlue(q,ScaleShortToQuantum(*p++));
4085 if (SyncAuthenticPixels(image,exception) == MagickFalse)
4088 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
4091 for (y=0; y < (ssize_t) roi->height; y++)
4093 q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
4096 indexes=GetAuthenticIndexQueue(image);
4097 for (x=0; x < (ssize_t) roi->width; x++)
4102 for (i=0; i < (ssize_t) length; i++)
4104 switch (quantum_map[i])
4109 SetPixelRed(q,ScaleShortToQuantum(*p));
4113 case MagentaQuantum:
4115 SetPixelGreen(q,ScaleShortToQuantum(*p));
4121 SetPixelBlue(q,ScaleShortToQuantum(*p));
4126 SetPixelAlpha(q,ScaleShortToQuantum(*p));
4129 case OpacityQuantum:
4131 SetPixelOpacity(q,ScaleShortToQuantum(*p));
4136 SetPixelIndex(indexes+x,ScaleShortToQuantum(*p));
4141 SetPixelRed(q,ScaleShortToQuantum(*p));
4142 SetPixelGreen(q,GetPixelRed(q));
4143 SetPixelBlue(q,GetPixelRed(q));
4153 if (SyncAuthenticPixels(image,exception) == MagickFalse)
4156 return(y < (ssize_t) roi->height ? MagickFalse : MagickTrue);
4159MagickExport MagickBooleanType ImportImagePixels(
Image *image,
const ssize_t x,
4160 const ssize_t y,
const size_t width,
const size_t height,
const char *map,
4161 const StorageType type,
const void *pixels)
4184 assert(image != (
Image *) NULL);
4185 assert(image->signature == MagickCoreSignature);
4186 if (IsEventLogging() != MagickFalse)
4187 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",image->filename);
4188 exception=(&image->exception);
4190 quantum_map=(QuantumType *) AcquireQuantumMemory(length,
sizeof(*quantum_map));
4191 if (quantum_map == (QuantumType *) NULL)
4192 ThrowBinaryException(ResourceLimitError,
"MemoryAllocationFailed",
4194 for (i=0; i < (ssize_t) length; i++)
4201 quantum_map[i]=AlphaQuantum;
4202 image->matte=MagickTrue;
4208 quantum_map[i]=BlueQuantum;
4214 quantum_map[i]=CyanQuantum;
4215 (void) SetImageColorspace(image,CMYKColorspace);
4221 quantum_map[i]=GreenQuantum;
4227 quantum_map[i]=BlackQuantum;
4228 (void) SetImageColorspace(image,CMYKColorspace);
4234 quantum_map[i]=IndexQuantum;
4235 (void) SetImageColorspace(image,GRAYColorspace);
4241 quantum_map[i]=MagentaQuantum;
4242 (void) SetImageColorspace(image,CMYKColorspace);
4248 quantum_map[i]=OpacityQuantum;
4249 image->matte=MagickTrue;
4255 quantum_map[i]=UndefinedQuantum;
4261 quantum_map[i]=RedQuantum;
4267 quantum_map[i]=YellowQuantum;
4268 (void) SetImageColorspace(image,CMYKColorspace);
4273 quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
4274 (void) ThrowMagickException(&image->exception,GetMagickModule(),
4275 OptionError,
"UnrecognizedPixelMap",
"`%s'",map);
4276 return(MagickFalse);
4280 if (SetImageStorageClass(image,DirectClass) == MagickFalse)
4281 return(MagickFalse);
4293 status=ImportCharPixel(image,&roi,map,quantum_map,pixels,exception);
4298 status=ImportDoublePixel(image,&roi,map,quantum_map,pixels,exception);
4303 status=ImportFloatPixel(image,&roi,map,quantum_map,pixels,exception);
4308 status=ImportIntegerPixel(image,&roi,map,quantum_map,pixels,exception);
4313 status=ImportLongPixel(image,&roi,map,quantum_map,pixels,exception);
4318 status=ImportQuantumPixel(image,&roi,map,quantum_map,pixels,exception);
4323 status=ImportShortPixel(image,&roi,map,quantum_map,pixels,exception);
4328 (void) ThrowMagickException(&image->exception,GetMagickModule(),
4329 OptionError,
"UnrecognizedStorageType",
"`%d'",type);
4333 quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
4376static inline void AlphaBlendMagickPixelPacket(
const Image *image,
4378 MagickRealType *alpha)
4384 if (image->matte == MagickFalse)
4387 pixel->red=(MagickRealType) GetPixelRed(color);
4388 pixel->green=(MagickRealType) GetPixelGreen(color);
4389 pixel->blue=(MagickRealType) GetPixelBlue(color);
4390 pixel->opacity=(MagickRealType) GetPixelOpacity(color);
4392 if (((image->colorspace == CMYKColorspace) ||
4393 (image->storage_class == PseudoClass)) &&
4394 (indexes != (
const IndexPacket *) NULL))
4395 pixel->index=(MagickRealType) GetPixelIndex(indexes);
4398 *alpha=QuantumScale*(double) GetPixelAlpha(color);
4399 pixel->red=(*alpha*(double) GetPixelRed(color));
4400 pixel->green=(*alpha*(double) GetPixelGreen(color));
4401 pixel->blue=(*alpha*(double) GetPixelBlue(color));
4402 pixel->opacity=(MagickRealType) GetPixelOpacity(color);
4404 if (((image->colorspace == CMYKColorspace) ||
4405 (image->storage_class == PseudoClass)) &&
4406 (indexes != (
const IndexPacket *) NULL))
4407 pixel->index=(*alpha*(double) GetPixelIndex(indexes));
4410static inline void CatromWeights(
const MagickRealType x,
4411 MagickRealType (*weights)[4])
4426 alpha=(MagickRealType) 1.0-x;
4427 beta=(MagickRealType) (-0.5)*x*alpha;
4428 (*weights)[0]=alpha*beta;
4429 (*weights)[3]=x*beta;
4434 gamma=(*weights)[3]-(*weights)[0];
4435 (*weights)[1]=alpha-(*weights)[0]+gamma;
4436 (*weights)[2]=x-(*weights)[3]-gamma;
4439static inline void SplineWeights(
const MagickRealType x,
4440 MagickRealType (*weights)[4])
4453 alpha=(MagickRealType) 1.0-x;
4454 (*weights)[3]=(MagickRealType) (1.0/6.0)*x*x*x;
4455 (*weights)[0]=(MagickRealType) (1.0/6.0)*alpha*alpha*alpha;
4456 beta=(*weights)[3]-(*weights)[0];
4457 (*weights)[1]=alpha-(*weights)[0]+beta;
4458 (*weights)[2]=x-(*weights)[3]-beta;
4461static inline double MeshInterpolate(
const PointInfo *delta,
const double p,
4462 const double x,
const double y)
4464 return(delta->x*x+delta->y*y+(1.0-delta->x-delta->y)*p);
4467MagickExport MagickBooleanType InterpolateMagickPixelPacket(
4469 const InterpolatePixelMethod method,
const double x,
const double y,
4497 InterpolatePixelMethod
4500 assert(image != (
Image *) NULL);
4501 assert(image->signature == MagickCoreSignature);
4502 assert(image_view != (
CacheView *) NULL);
4504 x_offset=CastDoubleToLong(floor(x));
4505 y_offset=CastDoubleToLong(floor(y));
4507 if (interpolate == UndefinedInterpolatePixel)
4508 interpolate=image->interpolate;
4509 GetMagickPixelPacket(image,pixel);
4510 switch (interpolate)
4512 case AverageInterpolatePixel:
4513 case Average9InterpolatePixel:
4514 case Average16InterpolatePixel:
4520 if (interpolate == Average9InterpolatePixel)
4523 x_offset=CastDoubleToLong(floor(x+0.5)-1.0);
4524 y_offset=CastDoubleToLong(floor(y+0.5)-1.0);
4527 if (interpolate == Average16InterpolatePixel)
4533 p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,(
size_t) count,
4534 (
size_t) count,exception);
4540 indexes=GetCacheViewVirtualIndexQueue(image_view);
4547 GetMagickPixelPacket(image,pixels);
4548 for (i=0; i < (ssize_t) count; i++)
4550 AlphaBlendMagickPixelPacket(image,p+i,indexes+i,pixels,alpha);
4551 gamma=PerceptibleReciprocal(alpha[0]);
4552 pixel->red+=gamma*pixels[0].red;
4553 pixel->green+=gamma*pixels[0].green;
4554 pixel->blue+=gamma*pixels[0].blue;
4555 pixel->index+=gamma*pixels[0].index;
4556 pixel->opacity+=pixels[0].opacity;
4560 pixel->green*=gamma;
4562 pixel->index*=gamma;
4563 pixel->opacity*=gamma;
4566 case BackgroundInterpolatePixel:
4571 index=(IndexPacket) 0;
4572 SetMagickPixelPacket(image,&image->background_color,&index,pixel);
4575 case BilinearInterpolatePixel:
4582 p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,2,2,exception);
4588 indexes=GetCacheViewVirtualIndexQueue(image_view);
4589 for (i=0; i < 4L; i++)
4591 GetMagickPixelPacket(image,pixels+i);
4592 AlphaBlendMagickPixelPacket(image,p+i,indexes+i,pixels+i,alpha+i);
4596 epsilon.x=1.0-delta.x;
4597 epsilon.y=1.0-delta.y;
4598 gamma=((epsilon.y*(epsilon.x*alpha[0]+delta.x*alpha[1])+delta.y*
4599 (epsilon.x*alpha[2]+delta.x*alpha[3])));
4600 gamma=PerceptibleReciprocal(gamma);
4601 pixel->red=gamma*(epsilon.y*(epsilon.x*pixels[0].red+delta.x*
4602 pixels[1].red)+delta.y*(epsilon.x*pixels[2].red+delta.x*pixels[3].red));
4603 pixel->green=gamma*(epsilon.y*(epsilon.x*pixels[0].green+delta.x*
4604 pixels[1].green)+delta.y*(epsilon.x*pixels[2].green+delta.x*
4606 pixel->blue=gamma*(epsilon.y*(epsilon.x*pixels[0].blue+delta.x*
4607 pixels[1].blue)+delta.y*(epsilon.x*pixels[2].blue+delta.x*
4609 if (image->colorspace == CMYKColorspace)
4610 pixel->index=gamma*(epsilon.y*(epsilon.x*pixels[0].index+delta.x*
4611 pixels[1].index)+delta.y*(epsilon.x*pixels[2].index+delta.x*
4613 gamma=((epsilon.y*(epsilon.x+delta.x)+delta.y*(epsilon.x+delta.x)));
4614 gamma=PerceptibleReciprocal(gamma);
4615 pixel->opacity=gamma*(epsilon.y*(epsilon.x*pixels[0].opacity+delta.x*
4616 pixels[1].opacity)+delta.y*(epsilon.x*pixels[2].opacity+delta.x*
4617 pixels[3].opacity));
4620 case BlendInterpolatePixel:
4622 p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,2,2,exception);
4628 indexes=GetCacheViewVirtualIndexQueue(image_view);
4629 for (i=0; i < 4L; i++)
4631 GetMagickPixelPacket(image,pixels+i);
4632 AlphaBlendMagickPixelPacket(image,p+i,indexes+i,pixels+i,alpha+i);
4635 for (i=0; i <= 1L; i++)
4637 if ((y-y_offset) >= 0.75)
4639 alpha[i]=alpha[i+2];
4640 pixels[i]=pixels[i+2];
4643 if ((y-y_offset) > 0.25)
4646 alpha[i]+=alpha[i+2];
4647 pixels[i].red+=pixels[i+2].red;
4648 pixels[i].green+=pixels[i+2].green;
4649 pixels[i].blue+=pixels[i+2].blue;
4650 pixels[i].opacity+=pixels[i+2].opacity;
4651 pixels[i].index+=pixels[i+2].index;
4654 if ((x-x_offset) >= 0.75)
4657 pixels[0]=pixels[1];
4660 if ((x-x_offset) > 0.25)
4664 pixels[0].red+=pixels[1].red;
4665 pixels[0].green+=pixels[1].green;
4666 pixels[0].blue+=pixels[1].blue;
4667 pixels[0].opacity+=pixels[1].opacity;
4668 pixels[0].index+=pixels[1].index;
4671 alpha[0]=PerceptibleReciprocal(alpha[0]);
4672 pixel->red=alpha[0]*pixels[0].red;
4673 pixel->green=alpha[0]*pixels[0].green;
4674 pixel->blue=alpha[0]*pixels[0].blue;
4675 pixel->index=alpha[0]*pixels[0].index;
4676 pixel->opacity=gamma*pixels[0].opacity;
4679 case CatromInterpolatePixel:
4680 case BicubicInterpolatePixel:
4686 p=GetCacheViewVirtualPixels(image_view,x_offset-1,y_offset-1,4,4,
4693 indexes=GetCacheViewVirtualIndexQueue(image_view);
4694 for (i=0; i < 16L; i++)
4696 GetMagickPixelPacket(image,pixels+i);
4697 AlphaBlendMagickPixelPacket(image,p+i,indexes+i,pixels+i,alpha+i);
4699 CatromWeights((MagickRealType) (x-x_offset),&cx);
4700 CatromWeights((MagickRealType) (y-y_offset),&cy);
4701 pixel->red=(cy[0]*(cx[0]*pixels[0].red+cx[1]*pixels[1].red+cx[2]*
4702 pixels[2].red+cx[3]*pixels[3].red)+cy[1]*(cx[0]*pixels[4].red+cx[1]*
4703 pixels[5].red+cx[2]*pixels[6].red+cx[3]*pixels[7].red)+cy[2]*(cx[0]*
4704 pixels[8].red+cx[1]*pixels[9].red+cx[2]*pixels[10].red+cx[3]*
4705 pixels[11].red)+cy[3]*(cx[0]*pixels[12].red+cx[1]*pixels[13].red+cx[2]*
4706 pixels[14].red+cx[3]*pixels[15].red));
4707 pixel->green=(cy[0]*(cx[0]*pixels[0].green+cx[1]*pixels[1].green+cx[2]*
4708 pixels[2].green+cx[3]*pixels[3].green)+cy[1]*(cx[0]*pixels[4].green+
4709 cx[1]*pixels[5].green+cx[2]*pixels[6].green+cx[3]*pixels[7].green)+
4710 cy[2]*(cx[0]*pixels[8].green+cx[1]*pixels[9].green+cx[2]*
4711 pixels[10].green+cx[3]*pixels[11].green)+cy[3]*(cx[0]*pixels[12].green+
4712 cx[1]*pixels[13].green+cx[2]*pixels[14].green+cx[3]*pixels[15].green));
4713 pixel->blue=(cy[0]*(cx[0]*pixels[0].blue+cx[1]*pixels[1].blue+cx[2]*
4714 pixels[2].blue+cx[3]*pixels[3].blue)+cy[1]*(cx[0]*pixels[4].blue+cx[1]*
4715 pixels[5].blue+cx[2]*pixels[6].blue+cx[3]*pixels[7].blue)+cy[2]*(cx[0]*
4716 pixels[8].blue+cx[1]*pixels[9].blue+cx[2]*pixels[10].blue+cx[3]*
4717 pixels[11].blue)+cy[3]*(cx[0]*pixels[12].blue+cx[1]*pixels[13].blue+
4718 cx[2]*pixels[14].blue+cx[3]*pixels[15].blue));
4719 pixel->opacity=(cy[0]*(cx[0]*pixels[0].opacity+cx[1]*pixels[1].opacity+
4720 cx[2]*pixels[2].opacity+cx[3]*pixels[3].opacity)+cy[1]*(cx[0]*
4721 pixels[4].opacity+cx[1]*pixels[5].opacity+cx[2]*pixels[6].opacity+
4722 cx[3]*pixels[7].opacity)+cy[2]*(cx[0]*pixels[8].opacity+cx[1]*
4723 pixels[9].opacity+cx[2]*pixels[10].opacity+cx[3]*pixels[11].opacity)+
4724 cy[3]*(cx[0]*pixels[12].opacity+cx[1]*pixels[13].opacity+cx[2]*
4725 pixels[14].opacity+cx[3]*pixels[15].opacity));
4728 case FilterInterpolatePixel:
4747 geometry.x=x_offset-1;
4748 geometry.y=y_offset-1;
4749 excerpt_image=ExcerptImage(image,&geometry,exception);
4750 if (excerpt_image == (
Image *) NULL)
4755 filter_image=ResizeImage(excerpt_image,1,1,image->filter,image->blur,
4757 excerpt_image=DestroyImage(excerpt_image);
4758 if (filter_image == (
Image *) NULL)
4760 filter_view=AcquireVirtualCacheView(filter_image,exception);
4761 p=GetCacheViewVirtualPixels(filter_view,0,0,1,1,exception);
4764 indexes=GetVirtualIndexQueue(filter_image);
4765 SetMagickPixelPacket(image,p,indexes,pixel);
4767 filter_view=DestroyCacheView(filter_view);
4768 filter_image=DestroyImage(filter_image);
4771 case IntegerInterpolatePixel:
4773 p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,1,1,exception);
4779 indexes=GetCacheViewVirtualIndexQueue(image_view);
4780 SetMagickPixelPacket(image,p,indexes,pixel);
4783 case MeshInterpolatePixel:
4789 p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,2,2,
4796 indexes=GetCacheViewVirtualIndexQueue(image_view);
4797 for (i=0; i < 4L; i++)
4799 GetMagickPixelPacket(image,pixels+i);
4800 AlphaBlendMagickPixelPacket(image,p+i,indexes+i,pixels+i,alpha+i);
4804 luma.x=fabs((
double) (MagickPixelLuma(pixels+0)-
4805 MagickPixelLuma(pixels+3)));
4806 luma.y=fabs((
double) (MagickPixelLuma(pixels+1)-
4807 MagickPixelLuma(pixels+2)));
4808 if (luma.x < luma.y)
4813 if (delta.x <= delta.y)
4818 delta.y=1.0-delta.y;
4819 gamma=MeshInterpolate(&delta,alpha[2],alpha[3],alpha[0]);
4820 gamma=PerceptibleReciprocal(gamma);
4821 pixel->red=gamma*MeshInterpolate(&delta,pixels[2].red,
4822 pixels[3].red,pixels[0].red);
4823 pixel->green=gamma*MeshInterpolate(&delta,pixels[2].green,
4824 pixels[3].green,pixels[0].green);
4825 pixel->blue=gamma*MeshInterpolate(&delta,pixels[2].blue,
4826 pixels[3].blue,pixels[0].blue);
4827 if (image->colorspace == CMYKColorspace)
4828 pixel->index=gamma*MeshInterpolate(&delta,pixels[2].index,
4829 pixels[3].index,pixels[0].index);
4830 gamma=MeshInterpolate(&delta,1.0,1.0,1.0);
4831 pixel->opacity=gamma*MeshInterpolate(&delta,pixels[2].opacity,
4832 pixels[3].opacity,pixels[0].opacity);
4839 delta.x=1.0-delta.x;
4840 gamma=MeshInterpolate(&delta,alpha[1],alpha[0],alpha[3]);
4841 gamma=PerceptibleReciprocal(gamma);
4842 pixel->red=gamma*MeshInterpolate(&delta,pixels[1].red,
4843 pixels[0].red,pixels[3].red);
4844 pixel->green=gamma*MeshInterpolate(&delta,pixels[1].green,
4845 pixels[0].green,pixels[3].green);
4846 pixel->blue=gamma*MeshInterpolate(&delta,pixels[1].blue,
4847 pixels[0].blue,pixels[3].blue);
4848 if (image->colorspace == CMYKColorspace)
4849 pixel->index=gamma*MeshInterpolate(&delta,pixels[1].index,
4850 pixels[0].index,pixels[3].index);
4851 gamma=MeshInterpolate(&delta,1.0,1.0,1.0);
4852 pixel->opacity=gamma*MeshInterpolate(&delta,pixels[1].opacity,
4853 pixels[0].opacity,pixels[3].opacity);
4861 if (delta.x <= (1.0-delta.y))
4866 gamma=MeshInterpolate(&delta,alpha[0],alpha[1],alpha[2]);
4867 gamma=PerceptibleReciprocal(gamma);
4868 pixel->red=gamma*MeshInterpolate(&delta,pixels[0].red,
4869 pixels[1].red,pixels[2].red);
4870 pixel->green=gamma*MeshInterpolate(&delta,pixels[0].green,
4871 pixels[1].green,pixels[2].green);
4872 pixel->blue=gamma*MeshInterpolate(&delta,pixels[0].blue,
4873 pixels[1].blue,pixels[2].blue);
4874 if (image->colorspace == CMYKColorspace)
4875 pixel->index=gamma*MeshInterpolate(&delta,pixels[0].index,
4876 pixels[1].index,pixels[2].index);
4877 gamma=MeshInterpolate(&delta,1.0,1.0,1.0);
4878 pixel->opacity=gamma*MeshInterpolate(&delta,pixels[0].opacity,
4879 pixels[1].opacity,pixels[2].opacity);
4886 delta.x=1.0-delta.x;
4887 delta.y=1.0-delta.y;
4888 gamma=MeshInterpolate(&delta,alpha[3],alpha[2],alpha[1]);
4889 gamma=PerceptibleReciprocal(gamma);
4890 pixel->red=gamma*MeshInterpolate(&delta,pixels[3].red,
4891 pixels[2].red,pixels[1].red);
4892 pixel->green=gamma*MeshInterpolate(&delta,pixels[3].green,
4893 pixels[2].green,pixels[1].green);
4894 pixel->blue=gamma*MeshInterpolate(&delta,pixels[3].blue,
4895 pixels[2].blue,pixels[1].blue);
4896 if (image->colorspace == CMYKColorspace)
4897 pixel->index=gamma*MeshInterpolate(&delta,pixels[3].index,
4898 pixels[2].index,pixels[1].index);
4899 gamma=MeshInterpolate(&delta,1.0,1.0,1.0);
4900 pixel->opacity=gamma*MeshInterpolate(&delta,pixels[3].opacity,
4901 pixels[2].opacity,pixels[1].opacity);
4906 case NearestNeighborInterpolatePixel:
4908 p=GetCacheViewVirtualPixels(image_view,CastDoubleToLong(floor(x+0.5)),
4909 CastDoubleToLong(floor(y+0.5)),1,1,exception);
4915 indexes=GetCacheViewVirtualIndexQueue(image_view);
4916 SetMagickPixelPacket(image,p,indexes,pixel);
4919 case SplineInterpolatePixel:
4925 p=GetCacheViewVirtualPixels(image_view,x_offset-1,y_offset-1,4,4,
4932 indexes=GetCacheViewVirtualIndexQueue(image_view);
4933 for (i=0; i < 16L; i++)
4935 GetMagickPixelPacket(image,pixels+i);
4936 AlphaBlendMagickPixelPacket(image,p+i,indexes+i,pixels+i,alpha+i);
4938 SplineWeights((MagickRealType) (x-x_offset),&cx);
4939 SplineWeights((MagickRealType) (y-y_offset),&cy);
4940 pixel->red=(cy[0]*(cx[0]*pixels[0].red+cx[1]*pixels[1].red+cx[2]*
4941 pixels[2].red+cx[3]*pixels[3].red)+cy[1]*(cx[0]*pixels[4].red+cx[1]*
4942 pixels[5].red+cx[2]*pixels[6].red+cx[3]*pixels[7].red)+cy[2]*(cx[0]*
4943 pixels[8].red+cx[1]*pixels[9].red+cx[2]*pixels[10].red+cx[3]*
4944 pixels[11].red)+cy[3]*(cx[0]*pixels[12].red+cx[1]*pixels[13].red+cx[2]*
4945 pixels[14].red+cx[3]*pixels[15].red));
4946 pixel->green=(cy[0]*(cx[0]*pixels[0].green+cx[1]*pixels[1].green+cx[2]*
4947 pixels[2].green+cx[3]*pixels[3].green)+cy[1]*(cx[0]*pixels[4].green+
4948 cx[1]*pixels[5].green+cx[2]*pixels[6].green+cx[3]*pixels[7].green)+
4949 cy[2]*(cx[0]*pixels[8].green+cx[1]*pixels[9].green+cx[2]*
4950 pixels[10].green+cx[3]*pixels[11].green)+cy[3]*(cx[0]*pixels[12].green+
4951 cx[1]*pixels[13].green+cx[2]*pixels[14].green+cx[3]*pixels[15].green));
4952 pixel->blue=(cy[0]*(cx[0]*pixels[0].blue+cx[1]*pixels[1].blue+cx[2]*
4953 pixels[2].blue+cx[3]*pixels[3].blue)+cy[1]*(cx[0]*pixels[4].blue+cx[1]*
4954 pixels[5].blue+cx[2]*pixels[6].blue+cx[3]*pixels[7].blue)+cy[2]*(cx[0]*
4955 pixels[8].blue+cx[1]*pixels[9].blue+cx[2]*pixels[10].blue+cx[3]*
4956 pixels[11].blue)+cy[3]*(cx[0]*pixels[12].blue+cx[1]*pixels[13].blue+
4957 cx[2]*pixels[14].blue+cx[3]*pixels[15].blue));
4958 pixel->opacity=(cy[0]*(cx[0]*pixels[0].opacity+cx[1]*pixels[1].opacity+
4959 cx[2]*pixels[2].opacity+cx[3]*pixels[3].opacity)+cy[1]*(cx[0]*
4960 pixels[4].opacity+cx[1]*pixels[5].opacity+cx[2]*pixels[6].opacity+cx[3]*
4961 pixels[7].opacity)+cy[2]*(cx[0]*pixels[8].opacity+cx[1]*
4962 pixels[9].opacity+cx[2]*pixels[10].opacity+cx[3]*pixels[11].opacity)+
4963 cy[3]*(cx[0]*pixels[12].opacity+cx[1]*pixels[13].opacity+cx[2]*
4964 pixels[14].opacity+cx[3]*pixels[15].opacity));