18#ifndef MAGICKCORE_COLOR_PRIVATE_H
19#define MAGICKCORE_COLOR_PRIVATE_H
21#include "magick/image.h"
22#include "magick/image-private.h"
23#include "magick/color.h"
24#include "magick/colorspace-private.h"
25#include "magick/exception-private.h"
26#include "magick/pixel-accessor.h"
28#if defined(__cplusplus) || defined(c_plusplus)
32extern MagickPrivate MagickBooleanType
35static inline double GetFuzzyColorDistance(
const Image *p,
const Image *q)
40 fuzz=(double) MagickMax(MagickMax(p->fuzz,q->fuzz),(
double)
45static inline MagickBooleanType IsColorEqual(
const PixelPacket *p,
54 green=(double) p->green;
55 blue=(double) p->blue;
56 if ((AbsolutePixelValue(red-(
double) q->red) < MagickEpsilon) &&
57 (AbsolutePixelValue(green-(
double) q->green) < MagickEpsilon) &&
58 (AbsolutePixelValue(blue-(
double) q->blue) < MagickEpsilon))
70 alpha=p->matte == MagickFalse ? (double) OpaqueOpacity : (double) p->opacity;
71 beta=q->matte == MagickFalse ? (double) OpaqueOpacity : (double) q->opacity;
72 if (AbsolutePixelValue(alpha-beta) >= MagickEpsilon)
74 if ((AbsolutePixelValue(alpha-(
double) TransparentOpacity) < MagickEpsilon) ||
75 (AbsolutePixelValue(beta-(
double) TransparentOpacity) < MagickEpsilon))
77 if (AbsolutePixelValue(p->red-q->red) >= MagickEpsilon)
79 if (AbsolutePixelValue(p->green-q->green) >= MagickEpsilon)
81 if (AbsolutePixelValue(p->blue-q->blue) >= MagickEpsilon)
83 if (p->colorspace == CMYKColorspace)
85 if (AbsolutePixelValue(p->index-q->index) >= MagickEpsilon)
93 if (IssRGBCompatibleColorspace(pixel->colorspace) == MagickFalse)
95 if ((AbsolutePixelValue(pixel->red-pixel->green) < MagickEpsilon) &&
96 (AbsolutePixelValue(pixel->green-pixel->blue) < MagickEpsilon))
101static inline MagickRealType MagickPixelIntensity(
104 if (IsGrayColorspace(pixel->colorspace) != MagickFalse)
106 return(0.212656*pixel->red+0.715158*pixel->green+0.072186*pixel->blue);
109static inline Quantum MagickPixelIntensityToQuantum(
112 if (IsGrayColorspace(pixel->colorspace) != MagickFalse)
113 return(ClampToQuantum(pixel->red));
114 return(ClampToQuantum(0.212656*pixel->red+0.715158*pixel->green+
115 0.072186*pixel->blue));
125 if (IsGrayColorspace(pixel->colorspace) != MagickFalse)
127 if (pixel->colorspace == sRGBColorspace)
128 return(0.212656*pixel->red+0.715158*pixel->green+0.072186*pixel->blue);
129 red=EncodePixelGamma(pixel->red);
130 green=EncodePixelGamma(pixel->green);
131 blue=EncodePixelGamma(pixel->blue);
132 return(0.212656*red+0.715158*green+0.072186*blue);
135static inline MagickRealType MagickPixelLuminance(
143 if (IsGrayColorspace(pixel->colorspace) != MagickFalse)
145 if (pixel->colorspace != sRGBColorspace)
146 return(0.212656*pixel->red+0.715158*pixel->green+0.072186*pixel->blue);
147 red=DecodePixelGamma(pixel->red);
148 green=DecodePixelGamma(pixel->green);
149 blue=DecodePixelGamma(pixel->blue);
150 return(0.212656*red+0.715158*green+0.072186*blue);
153#if defined(__cplusplus) || defined(c_plusplus)