74 lines
2.3 KiB
C
74 lines
2.3 KiB
C
|
/*
|
||
|
* 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 SkICC_DEFINED
|
||
|
#define SkICC_DEFINED
|
||
|
|
||
|
#include "SkRefCnt.h"
|
||
|
|
||
|
struct SkColorSpaceTransferFn;
|
||
|
class SkColorSpace;
|
||
|
class SkData;
|
||
|
class SkMatrix44;
|
||
|
|
||
|
class SK_API SkICC : public SkRefCnt {
|
||
|
public:
|
||
|
|
||
|
/**
|
||
|
* Parse an ICC profile.
|
||
|
*
|
||
|
* Returns nullptr if the data is not a valid ICC profile or if the profile
|
||
|
* input space is not RGB.
|
||
|
*/
|
||
|
static sk_sp<SkICC> Make(const void*, size_t);
|
||
|
|
||
|
/**
|
||
|
* If the gamut can be represented as transformation into XYZ D50, returns
|
||
|
* true and sets the proper values in |toXYZD50|.
|
||
|
*
|
||
|
* If not, returns false. This indicates that the ICC data is too complex
|
||
|
* to isolate a simple gamut transformation.
|
||
|
*/
|
||
|
bool toXYZD50(SkMatrix44* toXYZD50) const;
|
||
|
|
||
|
/**
|
||
|
* If the transfer function can be represented as coefficients to the standard
|
||
|
* equation, returns true and sets |fn| to the proper values.
|
||
|
*
|
||
|
* If not, returns false. This indicates one of the following:
|
||
|
* (1) The R, G, and B transfer functions are not the same.
|
||
|
* (2) The transfer function is represented as a table that we have not managed
|
||
|
* to match to a standard curve.
|
||
|
* (3) The ICC data is too complex to isolate a single transfer function.
|
||
|
*/
|
||
|
bool isNumericalTransferFn(SkColorSpaceTransferFn* fn) const;
|
||
|
|
||
|
/**
|
||
|
* If the transfer function can be approximated as coefficients to the standard
|
||
|
* equation, returns true and sets |fn| to the proper values.
|
||
|
*
|
||
|
* If not, returns false. This indicates one of the following:
|
||
|
* (1) The R, G, and B transfer functions are not the same.
|
||
|
* (2) The transfer function is represented as a table that is not increasing with
|
||
|
* end points at zero and one.
|
||
|
* (3) The ICC data is too complex to isolate a single transfer function.
|
||
|
*/
|
||
|
bool approximateNumericalTransferFn(SkColorSpaceTransferFn* fn) const;
|
||
|
|
||
|
/**
|
||
|
* Write an ICC profile with transfer function |fn| and gamut |toXYZD50|.
|
||
|
*/
|
||
|
static sk_sp<SkData> WriteToICC(const SkColorSpaceTransferFn& fn, const SkMatrix44& toXYZD50);
|
||
|
|
||
|
private:
|
||
|
SkICC(sk_sp<SkColorSpace> colorSpace);
|
||
|
|
||
|
sk_sp<SkColorSpace> fColorSpace;
|
||
|
};
|
||
|
|
||
|
#endif
|