18 #ifndef MAGICKCORE_GEM_PRIVATE_H
19 #define MAGICKCORE_GEM_PRIVATE_H
24 #if defined(__cplusplus) || defined(c_plusplus)
31 #define CIEEpsilon (216.0/24389.0)
32 #define CIEK (24389.0/27.0)
35 double *X,
double *Y,
double *Z)
42 assert(X != (
double *) NULL);
43 assert(Y != (
double *) NULL);
44 assert(Z != (
double *) NULL);
51 x=(116.0*x-16.0)/
CIEK;
59 z=(116.0*z-16.0)/
CIEK;
66 double *L,
double *u,
double *v)
71 assert(L != (
double *) NULL);
72 assert(u != (
double *) NULL);
73 assert(v != (
double *) NULL);
75 *L=(double) (116.0*pow(Y/
D65Y,1.0/3.0)-16.0);
87 const Quantum blue,
double *X,
double *Y,
double *Z)
94 assert(X != (
double *) NULL);
95 assert(Y != (
double *) NULL);
96 assert(Z != (
double *) NULL);
100 *X=0.4124564*r+0.3575761*g+0.1804375*b;
101 *Y=0.2126729*r+0.7151522*g+0.0721750*b;
102 *Z=0.0193339*r+0.1191920*g+0.9503041*b;
106 double *L,
double *a,
double *b)
113 assert(L != (
double *) NULL);
114 assert(a != (
double *) NULL);
115 assert(b != (
double *) NULL);
117 x=pow(X/
D65X,1.0/3.0);
121 y=pow(Y/
D65Y,1.0/3.0);
125 z=pow(Z/
D65Z,1.0/3.0);
128 *L=((116.0*y)-16.0)/100.0;
129 *a=(500.0*(x-y))/255.0+0.5;
130 *b=(200.0*(y-z))/255.0+0.5;
134 double *X,
double *Y,
double *Z)
139 assert(X != (
double *) NULL);
140 assert(Y != (
double *) NULL);
141 assert(Z != (
double *) NULL);
143 *Y=(double) pow((L+16.0)/116.0,3.0);
147 3.0*
D65Z))))-1.0)/3.0)-(-1.0/3.0));
148 *X=gamma*((*Y*((39.0*L/(v+13.0*L*(9.0*
D65Y/(
D65X+15.0*
D65Y+3.0*
D65Z))))-5.0))+
150 *Z=(*X*(((52.0f*L/(u+13.0*L*(4.0*
D65X/(
D65X+15.0*
D65Y+3.0*
D65Z))))-1.0)/3.0))-
162 assert(red != (
Quantum *) NULL);
163 assert(green != (
Quantum *) NULL);
164 assert(blue != (
Quantum *) NULL);
165 r=3.2404542*X-1.5371385*Y-0.4985314*Z;
166 g=(-0.9692660)*X+1.8760108*Y+0.0415560*Z;
167 b=0.0556434*X-0.2040259*Y+1.0572252*Z;
173 #if defined(__cplusplus) || defined(c_plusplus)
static void ConvertXYZToLab(const double X, const double Y, const double Z, double *L, double *a, double *b)
Definition: gem-private.h:105
static void ConvertXYZToRGB(const double X, const double Y, const double Z, Quantum *red, Quantum *green, Quantum *blue)
Definition: gem-private.h:154
#define CIEEpsilon
Definition: gem-private.h:31
static void ConvertRGBToXYZ(const Quantum red, const Quantum green, const Quantum blue, double *X, double *Y, double *Z)
Definition: gem-private.h:86
static void ConvertLabToXYZ(const double L, const double a, const double b, double *X, double *Y, double *Z)
Definition: gem-private.h:34
#define D65Z
Definition: gem-private.h:30
#define D65Y
Definition: gem-private.h:29
#define D65X
Definition: gem-private.h:28
static void ConvertLuvToXYZ(const double L, const double u, const double v, double *X, double *Y, double *Z)
Definition: gem-private.h:133
static void ConvertXYZToLuv(const double X, const double Y, const double Z, double *L, double *u, double *v)
Definition: gem-private.h:65
#define CIEK
Definition: gem-private.h:32
MagickDoubleType MagickRealType
Definition: magick-type.h:129
#define QuantumRange
Definition: magick-type.h:90
unsigned short Quantum
Definition: magick-type.h:89
#define QuantumScale
Definition: magick-type.h:124
static double PerceptibleReciprocal(const double x)
Definition: pixel-accessor.h:124
MagickExport MagickRealType EncodePixelGamma(const MagickRealType pixel)
Definition: pixel.c:342
MagickExport MagickRealType DecodePixelGamma(const MagickRealType pixel)
Definition: pixel.c:246
static Quantum ClampToQuantum(const MagickRealType quantum)
Definition: quantum.h:88