| Index: src/core/SkColorSpace.h
|
| diff --git a/src/core/SkColorSpace.h b/src/core/SkColorSpace.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..7e81b5f335c8ec53cf6352feeef6aaf735125588
|
| --- /dev/null
|
| +++ b/src/core/SkColorSpace.h
|
| @@ -0,0 +1,87 @@
|
| +/*
|
| + * 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 SkColorSpace_DEFINED
|
| +#define SkColorSpace_DEFINED
|
| +
|
| +// Some terms
|
| +//
|
| +// PCS : Profile Connection Space : where color number values have an absolute meaning.
|
| +// Part of the work float is to convert colors to and from this space...
|
| +// src_linear_unit_floats --> PCS --> PCS' --> dst_linear_unit_floats
|
| +//
|
| +// Some nice documents
|
| +//
|
| +// http://www.cambridgeincolour.com/tutorials/color-space-conversion.htm
|
| +// https://www.w3.org/Graphics/Color/srgb
|
| +// http://www.poynton.com/notes/colour_and_gamma/ColorFAQ.html
|
| +//
|
| +
|
| +#include "SkRefCnt.h"
|
| +
|
| +struct SkFloat3 {
|
| + float fVec[3];
|
| +
|
| + void dump() const;
|
| +};
|
| +
|
| +struct SkFloat3x3 {
|
| + float fMat[9];
|
| +
|
| + void dump() const;
|
| +};
|
| +
|
| +struct SkPM4f;
|
| +void SkApply3x3ToPM4f(const SkFloat3x3&, const SkPM4f src[], SkPM4f dst[], int count);
|
| +
|
| +class SkColorSpace : public SkRefCnt {
|
| +public:
|
| + enum Named {
|
| + kUnknown_Named,
|
| + kDevice_Named,
|
| + kSRGB_Named,
|
| + };
|
| +
|
| + /**
|
| + * Return a colorspace instance, given a 3x3 transform from linear_RGB to D50_XYZ
|
| + * and the src-gamma, return a ColorSpace
|
| + */
|
| + static SkColorSpace* NewRGB(const SkFloat3x3& toXYZD50, const SkFloat3& gamma);
|
| +
|
| + static SkColorSpace* NewNamed(Named);
|
| + static SkColorSpace* NewICC(const void*, size_t);
|
| +
|
| + SkFloat3 gamma() const { return fGamma; }
|
| + Named named() const { return fNamed; }
|
| + uint32_t uniqueID() const { return fUniqueID; }
|
| +
|
| + enum Result {
|
| + kFailure_Result,
|
| + kIdentity_Result,
|
| + kNormal_Result,
|
| + };
|
| +
|
| + /**
|
| + * Given a src and dst colorspace, return the 3x3 matrix that will convert src_linear_RGB
|
| + * values into dst_linear_RGB values.
|
| + */
|
| + static Result Concat(const SkColorSpace* src, const SkColorSpace* dst, SkFloat3x3* result);
|
| +
|
| + static void Test();
|
| + void dump() const;
|
| +
|
| +protected:
|
| + SkColorSpace(const SkFloat3x3& toXYZ, const SkFloat3& gamma, Named);
|
| +
|
| +private:
|
| + const SkFloat3x3 fToXYZD50;
|
| + const SkFloat3 fGamma;
|
| + const uint32_t fUniqueID;
|
| + const Named fNamed;
|
| +};
|
| +
|
| +#endif
|
|
|