This source file includes following definitions.
- ConvertCMYKToRGB
- ConvertRGBToCMYK
- IsCMYKColorspace
- IsGrayColorspace
- IsRGBColorspace
- IssRGBColorspace
- IssRGBCompatibleColorspace
#ifndef _MAGICKCORE_COLORSPACE_PRIVATE_H
#define _MAGICKCORE_COLORSPACE_PRIVATE_H
#include "magick/image.h"
#include "magick/image-private.h"
#include "magick/pixel.h"
#include "magick/pixel-accessor.h"
#if defined(__cplusplus) || defined(c_plusplus)
extern "C" {
#endif
static inline void ConvertCMYKToRGB(MagickPixelPacket *pixel)
{
pixel->red=((QuantumRange-(QuantumScale*pixel->red*(QuantumRange-
pixel->index)+pixel->index)));
pixel->green=((QuantumRange-(QuantumScale*pixel->green*(QuantumRange-
pixel->index)+pixel->index)));
pixel->blue=((QuantumRange-(QuantumScale*pixel->blue*(QuantumRange-
pixel->index)+pixel->index)));
}
static inline void ConvertRGBToCMYK(MagickPixelPacket *pixel)
{
MagickRealType
black,
blue,
cyan,
green,
magenta,
red,
yellow;
if (pixel->colorspace != sRGBColorspace)
{
red=QuantumScale*pixel->red;
green=QuantumScale*pixel->green;
blue=QuantumScale*pixel->blue;
}
else
{
red=QuantumScale*DecodePixelGamma(pixel->red);
green=QuantumScale*DecodePixelGamma(pixel->green);
blue=QuantumScale*DecodePixelGamma(pixel->blue);
}
if ((fabs((double) red) < MagickEpsilon) &&
(fabs((double) green) < MagickEpsilon) &&
(fabs((double) blue) < MagickEpsilon))
{
pixel->index=(MagickRealType) QuantumRange;
return;
}
cyan=(MagickRealType) (1.0-red);
magenta=(MagickRealType) (1.0-green);
yellow=(MagickRealType) (1.0-blue);
black=cyan;
if (magenta < black)
black=magenta;
if (yellow < black)
black=yellow;
cyan=(MagickRealType) ((cyan-black)/(1.0-black));
magenta=(MagickRealType) ((magenta-black)/(1.0-black));
yellow=(MagickRealType) ((yellow-black)/(1.0-black));
pixel->colorspace=CMYKColorspace;
pixel->red=QuantumRange*cyan;
pixel->green=QuantumRange*magenta;
pixel->blue=QuantumRange*yellow;
pixel->index=QuantumRange*black;
}
static inline MagickBooleanType IsCMYKColorspace(
const ColorspaceType colorspace)
{
if (colorspace == CMYKColorspace)
return(MagickTrue);
return(MagickFalse);
}
static inline MagickBooleanType IsGrayColorspace(
const ColorspaceType colorspace)
{
if ((colorspace == GRAYColorspace) || (colorspace == Rec601LumaColorspace) ||
(colorspace == Rec709LumaColorspace))
return(MagickTrue);
return(MagickFalse);
}
static inline MagickBooleanType IsRGBColorspace(const ColorspaceType colorspace)
{
if ((colorspace == RGBColorspace) || (colorspace == scRGBColorspace))
return(MagickTrue);
return(MagickFalse);
}
static inline MagickBooleanType IssRGBColorspace(
const ColorspaceType colorspace)
{
if ((colorspace == sRGBColorspace) || (colorspace == TransparentColorspace))
return(MagickTrue);
return(MagickFalse);
}
static inline MagickBooleanType IssRGBCompatibleColorspace(
const ColorspaceType colorspace)
{
if ((colorspace == sRGBColorspace) || (colorspace == RGBColorspace) ||
(colorspace == scRGBColorspace) ||
(colorspace == TransparentColorspace) ||
(IsGrayColorspace(colorspace) != MagickFalse))
return(MagickTrue);
return(MagickFalse);
}
#if defined(__cplusplus) || defined(c_plusplus)
}
#endif
#endif