/* * 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 "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, kRGBA_F16_ColorFormat, kRGBA_F32_ColorFormat, }; /** * Apply the color conversion to a |src| buffer, storing the output in the |dst| buffer. * * F16 and F32 are only supported as dst color formats, and only when the dst 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| * Must be kRGBA_8888 or kBGRA_8888 * @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 * */ bool apply(ColorFormat dstFormat, void* dst, ColorFormat srcFormat, const void* src, int count, SkAlphaType alphaType) const; virtual ~SkColorSpaceXform() {} protected: SkColorSpaceXform() {} }; #endif