diff options
author | 2016-06-06 12:02:31 -0700 | |
---|---|---|
committer | 2016-06-06 12:02:31 -0700 | |
commit | dc27a648d2ff23b2e96232c00c15976c46e1d48d (patch) | |
tree | 72f73f54e604ccaebe4f2ecebb965c91efb76dc7 /src/core/SkColorSpace.cpp | |
parent | 53180c9866f2af22d30a01e05f85645db388b0cf (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.cpp | 26 |
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; |