18 #ifndef MAGICKCORE_GEM_PRIVATE_H
19 #define MAGICKCORE_GEM_PRIVATE_H
23 #if defined(__cplusplus) || defined(c_plusplus)
30 #define CIEEpsilon (216.0/24389.0)
31 #define CIEK (24389.0/27.0)
43 ConvertHCLToRGB(
const double,
const double,
const double,
double *,
double *,
47 ConvertHSBToRGB(
const double,
const double,
const double,
double *,
double *,
49 ConvertHSIToRGB(
const double,
const double,
const double,
double *,
double *,
51 ConvertHSVToRGB(
const double,
const double,
const double,
double *,
double *,
53 ConvertHWBToRGB(
const double,
const double,
const double,
double *,
double *,
59 ConvertRGBToHCL(
const double,
const double,
const double,
double *,
double *,
63 ConvertRGBToHSB(
const double,
const double,
const double,
double *,
double *,
65 ConvertRGBToHSI(
const double,
const double,
const double,
double *,
double *,
67 ConvertRGBToHSV(
const double,
const double,
const double,
double *,
double *,
69 ConvertRGBToHWB(
const double,
const double,
const double,
double *,
double *,
77 double *X,
double *Y,
double *Z)
84 assert(X != (
double *) NULL);
85 assert(Y != (
double *) NULL);
86 assert(Z != (
double *) NULL);
93 x=(116.0*x-16.0)/
CIEK;
101 z=(116.0*z-16.0)/
CIEK;
108 double *X,
double *Y,
double *Z)
110 assert(X != (
double *) NULL);
111 assert(Y != (
double *) NULL);
112 assert(Z != (
double *) NULL);
114 *Y=(double) pow((L+16.0)/116.0,3.0);
120 *Z=(*X*(((52.0*L/(u+13.0*L*(4.0*
D65X/(
D65X+15.0*
D65Y+3.0*
D65Z))))-1.0)/3.0))-
125 const double blue,
double *X,
double *Y,
double *Z)
135 assert(X != (
double *) NULL);
136 assert(Y != (
double *) NULL);
137 assert(Z != (
double *) NULL);
141 *X=0.4124564*r+0.3575761*g+0.1804375*b;
142 *Y=0.2126729*r+0.7151522*g+0.0721750*b;
143 *Z=0.0193339*r+0.1191920*g+0.9503041*b;
147 double *L,
double *a,
double *b)
154 assert(L != (
double *) NULL);
155 assert(a != (
double *) NULL);
156 assert(b != (
double *) NULL);
158 x=pow(X/
D65X,1.0/3.0);
162 y=pow(Y/
D65Y,1.0/3.0);
166 z=pow(Z/
D65Z,1.0/3.0);
169 *L=((116.0*y)-16.0)/100.0;
170 *a=(500.0*(x-y))/255.0+0.5;
171 *b=(200.0*(y-z))/255.0+0.5;
175 double *L,
double *u,
double *v)
180 assert(L != (
double *) NULL);
181 assert(u != (
double *) NULL);
182 assert(v != (
double *) NULL);
184 *L=(double) (116.0*pow(Y/
D65Y,1.0/3.0)-16.0);
196 double *red,
double *green,
double *blue)
203 assert(red != (
double *) NULL);
204 assert(green != (
double *) NULL);
205 assert(blue != (
double *) NULL);
206 r=3.2404542*X-1.5371385*Y-0.4985314*Z;
207 g=(-0.9692660)*X+1.8760108*Y+0.0415560*Z;
208 b=0.0556434*X-0.2040259*Y+1.0572252*Z;
214 #if defined(__cplusplus) || defined(c_plusplus)
MagickExport MagickRealType EncodePixelGamma(const MagickRealType pixel)
Definition: pixel.c:446
#define D65X
Definition: gem-private.h:27
MagickPrivate void ConvertLCHabToRGB(const double, const double, const double, double *, double *, double *)
MagickPrivate void ConvertHSIToRGB(const double, const double, const double, double *, double *, double *)
#define CIEK
Definition: gem-private.h:31
#define CIEEpsilon
Definition: gem-private.h:30
MagickPrivate double GenerateDifferentialNoise(RandomInfo *, const Quantum, const NoiseType, const double)
Definition: gem.c:1455
#define D65Z
Definition: gem-private.h:29
MagickPrivate size_t GetOptimalKernelWidth1D(const double, const double)
#define D65Y
Definition: gem-private.h:28
MagickPrivate void ConvertRGBToHSB(const double, const double, const double, double *, double *, double *)
NoiseType
Definition: fx.h:27
MagickExport MagickRealType DecodePixelGamma(const MagickRealType pixel)
Definition: pixel.c:319
static double PerceptibleReciprocal(const double x)
Definition: pixel-accessor.h:224
MagickPrivate size_t GetOptimalKernelWidth2D(const double, const double)
Definition: gem.c:1635
MagickPrivate void ConvertLCHuvToRGB(const double, const double, const double, double *, double *, double *)
static void ConvertLuvToXYZ(const double L, const double u, const double v, double *X, double *Y, double *Z)
Definition: gem-private.h:107
MagickPrivate void ConvertRGBToHSV(const double, const double, const double, double *, double *, double *)
static void ConvertXYZToLuv(const double X, const double Y, const double Z, double *L, double *u, double *v)
Definition: gem-private.h:174
MagickPrivate void ConvertRGBToHSI(const double, const double, const double, double *, double *, double *)
#define QuantumScale
Definition: magick-type.h:115
MagickPrivate void ConvertHWBToRGB(const double, const double, const double, double *, double *, double *)
static void ConvertXYZToLab(const double X, const double Y, const double Z, double *L, double *a, double *b)
Definition: gem-private.h:146
static void ConvertRGBToXYZ(const double red, const double green, const double blue, double *X, double *Y, double *Z)
Definition: gem-private.h:124
unsigned short Quantum
Definition: magick-type.h:82
MagickPrivate void ConvertHSVToRGB(const double, const double, const double, double *, double *, double *)
static void ConvertLabToXYZ(const double L, const double a, const double b, double *X, double *Y, double *Z)
Definition: gem-private.h:76
MagickPrivate size_t GetOptimalKernelWidth(const double, const double)
MagickPrivate void ConvertHCLToRGB(const double, const double, const double, double *, double *, double *)
MagickPrivate void ConvertRGBToHWB(const double, const double, const double, double *, double *, double *)
MagickPrivate void ConvertHCLpToRGB(const double, const double, const double, double *, double *, double *)
static void ConvertXYZToRGB(const double X, const double Y, const double Z, double *red, double *green, double *blue)
Definition: gem-private.h:195
MagickPrivate void ConvertRGBToLCHab(const double, const double, const double, double *, double *, double *)
#define MagickPrivate
Definition: method-attribute.h:81
MagickPrivate void ConvertHSBToRGB(const double, const double, const double, double *, double *, double *)
MagickPrivate void ConvertRGBToHCL(const double, const double, const double, double *, double *, double *)
MagickPrivate void ConvertRGBToLCHuv(const double, const double, const double, double *, double *, double *)
Definition: gem.c:1375
#define QuantumRange
Definition: magick-type.h:83
MagickPrivate void ConvertRGBToHCLp(const double, const double, const double, double *, double *, double *)