aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkColorSpace.cpp
diff options
context:
space:
mode:
authorGravatar msarett <msarett@google.com>2016-06-06 12:02:31 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-06-06 12:02:31 -0700
commitdc27a648d2ff23b2e96232c00c15976c46e1d48d (patch)
tree72f73f54e604ccaebe4f2ecebb965c91efb76dc7 /src/core/SkColorSpace.cpp
parent53180c9866f2af22d30a01e05f85645db388b0cf (diff)
Add SkDefaultXform as a catch-all to handle color conversions
I'd like to start optimizing the common case for color xforms, but before doing that, I think it makes sense to have correct code to support all xforms. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2038823002 Review-Url: https://codereview.chromium.org/2038823002
Diffstat (limited to 'src/core/SkColorSpace.cpp')
-rw-r--r--src/core/SkColorSpace.cpp26
1 files changed, 14 insertions, 12 deletions
diff --git a/src/core/SkColorSpace.cpp b/src/core/SkColorSpace.cpp
index 1652de37a8..6bc897c8a9 100644
--- a/src/core/SkColorSpace.cpp
+++ b/src/core/SkColorSpace.cpp
@@ -719,19 +719,21 @@ bool load_matrix(SkMatrix44* toXYZ, const uint8_t* src, size_t len) {
return false;
}
+ // For this matrix to behave like our "to XYZ D50" matrices, it needs to be scaled.
+ constexpr float scale = 65535.0 / 32768.0;
float array[16];
- array[ 0] = SkFixedToFloat(read_big_endian_int(src));
- array[ 1] = SkFixedToFloat(read_big_endian_int(src + 4));
- array[ 2] = SkFixedToFloat(read_big_endian_int(src + 8));
- array[ 3] = SkFixedToFloat(read_big_endian_int(src + 36)); // translate R
- array[ 4] = SkFixedToFloat(read_big_endian_int(src + 12));
- array[ 5] = SkFixedToFloat(read_big_endian_int(src + 16));
- array[ 6] = SkFixedToFloat(read_big_endian_int(src + 20));
- array[ 7] = SkFixedToFloat(read_big_endian_int(src + 40)); // translate G
- array[ 8] = SkFixedToFloat(read_big_endian_int(src + 24));
- array[ 9] = SkFixedToFloat(read_big_endian_int(src + 28));
- array[10] = SkFixedToFloat(read_big_endian_int(src + 32));
- array[11] = SkFixedToFloat(read_big_endian_int(src + 44)); // translate B
+ array[ 0] = scale * SkFixedToFloat(read_big_endian_int(src));
+ array[ 1] = scale * SkFixedToFloat(read_big_endian_int(src + 4));
+ array[ 2] = scale * SkFixedToFloat(read_big_endian_int(src + 8));
+ array[ 3] = scale * SkFixedToFloat(read_big_endian_int(src + 36)); // translate R
+ array[ 4] = scale * SkFixedToFloat(read_big_endian_int(src + 12));
+ array[ 5] = scale * SkFixedToFloat(read_big_endian_int(src + 16));
+ array[ 6] = scale * SkFixedToFloat(read_big_endian_int(src + 20));
+ array[ 7] = scale * SkFixedToFloat(read_big_endian_int(src + 40)); // translate G
+ array[ 8] = scale * SkFixedToFloat(read_big_endian_int(src + 24));
+ array[ 9] = scale * SkFixedToFloat(read_big_endian_int(src + 28));
+ array[10] = scale * SkFixedToFloat(read_big_endian_int(src + 32));
+ array[11] = scale * SkFixedToFloat(read_big_endian_int(src + 44)); // translate B
array[12] = 0.0f;
array[13] = 0.0f;
array[14] = 0.0f;