Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(116)

Unified Diff: src/core/SkColorSpace_A2B.h

Issue 2444553002: Refactored SkColorSpace_A2B to allow arbitrary ordering of elements (Closed)
Patch Set: responding to comments Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « gm/labpcsdemo.cpp ('k') | src/core/SkColorSpace_A2B.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/core/SkColorSpace_A2B.h
diff --git a/src/core/SkColorSpace_A2B.h b/src/core/SkColorSpace_A2B.h
index a0bd4a03197332754b10769608ed4d74400351e6..844800588ba85085222421061834e3eda977bd94 100644
--- a/src/core/SkColorSpace_A2B.h
+++ b/src/core/SkColorSpace_A2B.h
@@ -10,6 +10,8 @@
#include "SkColorSpace_Base.h"
+#include <vector>
+
// An alternative SkColorSpace that represents all the color space data that
// is stored in an A2B0 ICC tag. This allows us to use alternative profile
// connection spaces (CIELAB instead of just CIEXYZ), use color-lookup-tables
@@ -18,9 +20,8 @@
// the potential to allow conversion from input color spaces with a different
// number of channels such as CMYK (4) or GRAY (1), but that is not supported yet.
//
-// Evaluation is done: A-curve => CLUT => M-curve => Matrix => B-curve
-//
-// There are also multi-processing-elements in the A2B0 tag which allow you to
+// Currently AtoBType A2B0 tag types are supported. There are also lut8Type,
+// lut16Type and MPET (multi-processing-elements) A2B0 tags which allow you to
// combine these 3 primitives (TRC, CLUT, matrix) in any order/quantitiy,
// but support for that is not implemented.
class SkColorSpace_A2B : public SkColorSpace_Base {
@@ -55,21 +56,72 @@ public:
return false;
}
- SkGammaNamed aCurveNamed() const { return fACurveNamed; }
-
- const SkGammas* aCurve() const { return fACurve.get(); }
-
- const SkColorLookUpTable* colorLUT() const { return fColorLUT.get(); }
+ Type type() const override { return Type::kA2B; }
- SkGammaNamed mCurveNamed() const { return fMCurveNamed; }
+ class Element {
+ public:
+ explicit Element(SkGammaNamed gammaNamed)
+ : fType(Type::kGammaNamed)
+ , fGammaNamed(gammaNamed)
+ , fMatrix(SkMatrix44::kUninitialized_Constructor)
+ {}
+
+ explicit Element(sk_sp<SkGammas> gammas)
+ : fType(Type::kGammas)
+ , fGammas(std::move(gammas))
+ , fMatrix(SkMatrix44::kUninitialized_Constructor)
+ {}
+
+ explicit Element(sk_sp<SkColorLookUpTable> colorLUT)
+ : fType(Type::kCLUT)
+ , fCLUT(std::move(colorLUT))
+ , fMatrix(SkMatrix44::kUninitialized_Constructor)
+ {}
+
+ explicit Element(const SkMatrix44& matrix)
+ : fType(Type::kMatrix)
+ , fMatrix(matrix)
+ {}
- const SkGammas* mCurve() const { return fMCurve.get(); }
-
- const SkMatrix44& matrix() const { return fMatrix; }
-
- SkGammaNamed bCurveNamed() const { return fBCurveNamed; }
+ enum class Type {
+ kGammaNamed,
+ kGammas,
+ kCLUT,
+ kMatrix
+ };
+
+ Type type() const { return fType; }
+
+ SkGammaNamed gammaNamed() const {
+ SkASSERT(Type::kGammaNamed == fType);
+ return fGammaNamed;
+ }
+
+ const SkGammas& gammas() const {
+ SkASSERT(Type::kGammas == fType);
+ return *fGammas;
+ }
+
+ const SkColorLookUpTable& colorLUT() const {
+ SkASSERT(Type::kCLUT == fType);
+ return *fCLUT;
+ }
+
+ const SkMatrix44& matrix() const {
+ SkASSERT(Type::kMatrix == fType);
+ return fMatrix;
+ }
+
+ private:
+ Type fType;
+ SkGammaNamed fGammaNamed;
+ sk_sp<SkGammas> fGammas;
+ sk_sp<SkColorLookUpTable> fCLUT;
+ SkMatrix44 fMatrix;
+ };
+ const Element& element(size_t i) const { return fElements[i]; }
- const SkGammas* bCurve() const { return fBCurve.get(); }
+ size_t count() const { return fElements.size(); }
// the intermediate profile connection space that this color space
// represents the transformation to
@@ -80,26 +132,12 @@ public:
PCS pcs() const { return fPCS; }
- Type type() const override { return Type::kA2B; }
-
private:
- SkColorSpace_A2B(SkGammaNamed aCurveNamed, sk_sp<SkGammas> aCurve,
- sk_sp<SkColorLookUpTable> colorLUT,
- SkGammaNamed mCurveNamed, sk_sp<SkGammas> mCurve,
- const SkMatrix44& matrix,
- SkGammaNamed bCurveNamed, sk_sp<SkGammas> bCurve,
- PCS pcs, sk_sp<SkData> profileData);
-
- const SkGammaNamed fACurveNamed;
- sk_sp<SkGammas> fACurve;
- sk_sp<SkColorLookUpTable> fColorLUT;
- const SkGammaNamed fMCurveNamed;
- sk_sp<SkGammas> fMCurve;
- SkMatrix44 fMatrix;
- const SkGammaNamed fBCurveNamed;
- sk_sp<SkGammas> fBCurve;
- PCS fPCS;
-
+ SkColorSpace_A2B(PCS pcs, sk_sp<SkData> profileData, std::vector<Element> elements);
+
+ PCS fPCS;
+ std::vector<Element> fElements;
+
friend class SkColorSpace;
typedef SkColorSpace_Base INHERITED;
};
« no previous file with comments | « gm/labpcsdemo.cpp ('k') | src/core/SkColorSpace_A2B.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698