/* * Copyright 2016 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef SkColorSpaceXform_DEFINED #define SkColorSpaceXform_DEFINED #include "../private/SkNoncopyable.h" #include "SkImageInfo.h" class SkColorSpace; class SK_API SkColorSpaceXform : SkNoncopyable { public: /** * Create an object to handle color space conversions. * * @param srcSpace The encoded color space. * @param dstSpace The destination color space. * */ static std::unique_ptr New(SkColorSpace* srcSpace, SkColorSpace* dstSpace); enum ColorFormat { kRGBA_8888_ColorFormat, kBGRA_8888_ColorFormat, // Unsigned, big-endian, 16-bit integer kRGB_U16_BE_ColorFormat, // Src only kRGBA_U16_BE_ColorFormat, // Src only kRGBA_F16_ColorFormat, kRGBA_F32_ColorFormat, kBGR_565_ColorFormat, // Dst only, kOpaque only }; /** * Apply the color conversion to a |src| buffer, storing the output in the |dst| buffer. * * F16 and F32 are only supported when the color space is linear. This function will return * false in unsupported cases. * * @param dst Stored in the format described by |dstColorFormat| * @param src Stored in the format described by |srcColorFormat| * @param len Number of pixels in the buffers * @param dstColorFormat Describes color format of |dst| * @param srcColorFormat Describes color format of |src| * @param alphaType Describes alpha properties of the |dst| (and |src|) * kUnpremul preserves input alpha values * kPremul performs a premultiplication and also preserves alpha values * kOpaque optimization hint, |dst| alphas set to 1 * */ virtual bool apply(ColorFormat dstFormat, void* dst, ColorFormat srcFormat, const void* src, int count, SkAlphaType alphaType) const = 0; virtual ~SkColorSpaceXform() {} enum AlphaOp { kPreserve_AlphaOp, // just transfer src-alpha to dst-alpha kPremul_AlphaOp, // like kPreserve, but multiplies RGB by it kSrcIsOpaque_AlphaOp, // src alphas are all 1, this is a perf hint }; static bool Apply(SkColorSpace* dstCS, ColorFormat dstFormat, void* dst, SkColorSpace* srcCS, ColorFormat srcFormat, const void* src, int count, AlphaOp); protected: SkColorSpaceXform() {} }; #endif