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

Side by Side Diff: src/core/SkColorSpace.cpp

Issue 2038823002: Add SkDefaultXform as a catch-all to handle color conversions (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Include SkColorSpace_Base Created 4 years, 6 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 unified diff | Download patch
« no previous file with comments | « no previous file | src/core/SkColorSpaceXform.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2016 Google Inc. 2 * Copyright 2016 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "SkColorSpace.h" 8 #include "SkColorSpace.h"
9 #include "SkColorSpace_Base.h" 9 #include "SkColorSpace_Base.h"
10 #include "SkEndian.h" 10 #include "SkEndian.h"
(...skipping 657 matching lines...) Expand 10 before | Expand all | Expand 10 after
668 668
669 return true; 669 return true;
670 } 670 }
671 671
672 bool load_matrix(SkMatrix44* toXYZ, const uint8_t* src, size_t len) { 672 bool load_matrix(SkMatrix44* toXYZ, const uint8_t* src, size_t len) {
673 if (len < 48) { 673 if (len < 48) {
674 SkColorSpacePrintf("Matrix tag is too small (%d bytes).", len); 674 SkColorSpacePrintf("Matrix tag is too small (%d bytes).", len);
675 return false; 675 return false;
676 } 676 }
677 677
678 // For this matrix to behave like our "to XYZ D50" matrices, it needs to be scaled.
679 constexpr float scale = 65535.0 / 32768.0;
678 float array[16]; 680 float array[16];
679 array[ 0] = SkFixedToFloat(read_big_endian_int(src)); 681 array[ 0] = scale * SkFixedToFloat(read_big_endian_int(src));
680 array[ 1] = SkFixedToFloat(read_big_endian_int(src + 4)); 682 array[ 1] = scale * SkFixedToFloat(read_big_endian_int(src + 4));
681 array[ 2] = SkFixedToFloat(read_big_endian_int(src + 8)); 683 array[ 2] = scale * SkFixedToFloat(read_big_endian_int(src + 8));
682 array[ 3] = SkFixedToFloat(read_big_endian_int(src + 36)); // translate R 684 array[ 3] = scale * SkFixedToFloat(read_big_endian_int(src + 36)); // transl ate R
683 array[ 4] = SkFixedToFloat(read_big_endian_int(src + 12)); 685 array[ 4] = scale * SkFixedToFloat(read_big_endian_int(src + 12));
684 array[ 5] = SkFixedToFloat(read_big_endian_int(src + 16)); 686 array[ 5] = scale * SkFixedToFloat(read_big_endian_int(src + 16));
685 array[ 6] = SkFixedToFloat(read_big_endian_int(src + 20)); 687 array[ 6] = scale * SkFixedToFloat(read_big_endian_int(src + 20));
686 array[ 7] = SkFixedToFloat(read_big_endian_int(src + 40)); // translate G 688 array[ 7] = scale * SkFixedToFloat(read_big_endian_int(src + 40)); // transl ate G
687 array[ 8] = SkFixedToFloat(read_big_endian_int(src + 24)); 689 array[ 8] = scale * SkFixedToFloat(read_big_endian_int(src + 24));
688 array[ 9] = SkFixedToFloat(read_big_endian_int(src + 28)); 690 array[ 9] = scale * SkFixedToFloat(read_big_endian_int(src + 28));
689 array[10] = SkFixedToFloat(read_big_endian_int(src + 32)); 691 array[10] = scale * SkFixedToFloat(read_big_endian_int(src + 32));
690 array[11] = SkFixedToFloat(read_big_endian_int(src + 44)); // translate B 692 array[11] = scale * SkFixedToFloat(read_big_endian_int(src + 44)); // transl ate B
691 array[12] = 0.0f; 693 array[12] = 0.0f;
692 array[13] = 0.0f; 694 array[13] = 0.0f;
693 array[14] = 0.0f; 695 array[14] = 0.0f;
694 array[15] = 1.0f; 696 array[15] = 1.0f;
695 toXYZ->setColMajorf(array); 697 toXYZ->setColMajorf(array);
696 return true; 698 return true;
697 } 699 }
698 700
699 bool load_a2b0(SkColorLookUpTable* colorLUT, SkGammaCurve* gammas, SkMatrix44* t oXYZ, 701 bool load_a2b0(SkColorLookUpTable* colorLUT, SkGammaCurve* gammas, SkMatrix44* t oXYZ,
700 const uint8_t* src, size_t len) { 702 const uint8_t* src, size_t len) {
(...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after
1092 ptr32[4] = SkEndian_SwapBE32(0x000116cc); 1094 ptr32[4] = SkEndian_SwapBE32(0x000116cc);
1093 ptr += kTAG_XYZ_Bytes; 1095 ptr += kTAG_XYZ_Bytes;
1094 1096
1095 // Write copyright tag 1097 // Write copyright tag
1096 memcpy(ptr, gEmptyTextTag, sizeof(gEmptyTextTag)); 1098 memcpy(ptr, gEmptyTextTag, sizeof(gEmptyTextTag));
1097 1099
1098 // TODO (msarett): Should we try to hold onto the data so we can return imme diately if 1100 // TODO (msarett): Should we try to hold onto the data so we can return imme diately if
1099 // the client calls again? 1101 // the client calls again?
1100 return SkData::MakeFromMalloc(profile.release(), kICCProfileSize); 1102 return SkData::MakeFromMalloc(profile.release(), kICCProfileSize);
1101 } 1103 }
OLDNEW
« no previous file with comments | « no previous file | src/core/SkColorSpaceXform.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698