color_tools.hpp

Back to Orphans

pastel/gfx/color/

#ifndef PASTELGFX_COLOR_TOOLS_HPP
#define PASTELGFX_COLOR_TOOLS_HPP

#include "pastel/gfx/color/color_tools.h"

#include "pastel/sys/math/constants.h"
#include "pastel/sys/math_functions.h"
#include "pastel/sys/random/random_uniform.h"
#include "pastel/sys/vector/vector_tools.h"

namespace Pastel
{

    inline Color randomRgbColor()
    {
        return Color(random<real32>(), random<real32>(), random<real32>());
    }

    // Grayscale conversion

    inline Color lumaWeights()
    {
        return Color(0.299, 0.587, 0.114);
    }

    inline real32 luma(const Color& rgb)
    {
        return dot(rgb, lumaWeights());
    }

    // Gamut compression

    inline Color fitColorBlack(const Color& rgb)
    {
        if (anyLess(rgb, 0))
        {
            return Color(0);
        }

        real32 maxComponent = max(rgb);

        if (maxComponent > 1)
        {
            // If the max component is greater
            // than 1, scale the rgb such
            // that max component becomes 1.

            return rgb / maxComponent;
        }

        return rgb;
    }

    inline Color fitColor(const Color& rgb)
    {
        Color clampedZero = max(rgb, 0);
        real32 maxComponent = max(clampedZero);

        if (maxComponent > 1)
        {
            // If the max component is greater
            // than 1, scale the rgb such
            // that max component becomes 1.

            return clampedZero / maxComponent;
        }

        return clampedZero;
    }

    inline Color fitNegativeColor(const Color& rgb)
    {
        return max(rgb, 0);
    }

}

#endif