OLD | NEW |
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 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
135 sk_sp<SkColorSpace> SkColorSpace::NewNamed(Named named) { | 135 sk_sp<SkColorSpace> SkColorSpace::NewNamed(Named named) { |
136 static SkOnce sRGBOnce; | 136 static SkOnce sRGBOnce; |
137 static SkColorSpace* sRGB; | 137 static SkColorSpace* sRGB; |
138 static SkOnce adobeRGBOnce; | 138 static SkOnce adobeRGBOnce; |
139 static SkColorSpace* adobeRGB; | 139 static SkColorSpace* adobeRGB; |
140 | 140 |
141 switch (named) { | 141 switch (named) { |
142 case kSRGB_Named: { | 142 case kSRGB_Named: { |
143 sRGBOnce([] { | 143 sRGBOnce([] { |
144 SkMatrix44 srgbToxyzD50(SkMatrix44::kUninitialized_Constructor); | 144 SkMatrix44 srgbToxyzD50(SkMatrix44::kUninitialized_Constructor); |
145 srgbToxyzD50.set3x3ColMajorf(gSRGB_toXYZD50); | 145 srgbToxyzD50.set3x3RowMajorf(gSRGB_toXYZD50); |
146 sRGB = new SkColorSpace_Base(kSRGB_GammaNamed, srgbToxyzD50, kSR
GB_Named); | 146 sRGB = new SkColorSpace_Base(kSRGB_GammaNamed, srgbToxyzD50, kSR
GB_Named); |
147 }); | 147 }); |
148 return sk_ref_sp(sRGB); | 148 return sk_ref_sp(sRGB); |
149 } | 149 } |
150 case kAdobeRGB_Named: { | 150 case kAdobeRGB_Named: { |
151 adobeRGBOnce([] { | 151 adobeRGBOnce([] { |
152 SkMatrix44 adobergbToxyzD50(SkMatrix44::kUninitialized_Construct
or); | 152 SkMatrix44 adobergbToxyzD50(SkMatrix44::kUninitialized_Construct
or); |
153 adobergbToxyzD50.set3x3ColMajorf(gAdobeRGB_toXYZD50); | 153 adobergbToxyzD50.set3x3RowMajorf(gAdobeRGB_toXYZD50); |
154 adobeRGB = new SkColorSpace_Base(k2Dot2Curve_GammaNamed, adoberg
bToxyzD50, | 154 adobeRGB = new SkColorSpace_Base(k2Dot2Curve_GammaNamed, adoberg
bToxyzD50, |
155 kAdobeRGB_Named); | 155 kAdobeRGB_Named); |
156 }); | 156 }); |
157 return sk_ref_sp(adobeRGB); | 157 return sk_ref_sp(adobeRGB); |
158 } | 158 } |
159 default: | 159 default: |
160 break; | 160 break; |
161 } | 161 } |
162 return nullptr; | 162 return nullptr; |
163 } | 163 } |
(...skipping 726 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
890 const ICCTag* b = ICCTag::Find(tags.get(), tagCount, kTAG_bXYZ); | 890 const ICCTag* b = ICCTag::Find(tags.get(), tagCount, kTAG_bXYZ); |
891 if (r && g && b) { | 891 if (r && g && b) { |
892 float toXYZ[9]; | 892 float toXYZ[9]; |
893 if (!load_xyz(&toXYZ[0], r->addr((const uint8_t*) base), r->fLen
gth) || | 893 if (!load_xyz(&toXYZ[0], r->addr((const uint8_t*) base), r->fLen
gth) || |
894 !load_xyz(&toXYZ[3], g->addr((const uint8_t*) base), g->fLen
gth) || | 894 !load_xyz(&toXYZ[3], g->addr((const uint8_t*) base), g->fLen
gth) || |
895 !load_xyz(&toXYZ[6], b->addr((const uint8_t*) base), b->fLen
gth)) | 895 !load_xyz(&toXYZ[6], b->addr((const uint8_t*) base), b->fLen
gth)) |
896 { | 896 { |
897 return_null("Need valid rgb tags for XYZ space"); | 897 return_null("Need valid rgb tags for XYZ space"); |
898 } | 898 } |
899 SkMatrix44 mat(SkMatrix44::kUninitialized_Constructor); | 899 SkMatrix44 mat(SkMatrix44::kUninitialized_Constructor); |
900 mat.set3x3ColMajorf(toXYZ); | 900 mat.set3x3RowMajorf(toXYZ); |
901 | 901 |
902 // It is not uncommon to see missing or empty gamma tags. This
indicates | 902 // It is not uncommon to see missing or empty gamma tags. This
indicates |
903 // that we should use unit gamma. | 903 // that we should use unit gamma. |
904 SkGammaCurve curves[3]; | 904 SkGammaCurve curves[3]; |
905 r = ICCTag::Find(tags.get(), tagCount, kTAG_rTRC); | 905 r = ICCTag::Find(tags.get(), tagCount, kTAG_rTRC); |
906 g = ICCTag::Find(tags.get(), tagCount, kTAG_gTRC); | 906 g = ICCTag::Find(tags.get(), tagCount, kTAG_gTRC); |
907 b = ICCTag::Find(tags.get(), tagCount, kTAG_bTRC); | 907 b = ICCTag::Find(tags.get(), tagCount, kTAG_bTRC); |
908 if (!r || !load_gammas(&curves[0], 1, r->addr((const uint8_t*) b
ase), r->fLength)) | 908 if (!r || !load_gammas(&curves[0], 1, r->addr((const uint8_t*) b
ase), r->fLength)) |
909 { | 909 { |
910 SkColorSpacePrintf("Failed to read R gamma tag.\n"); | 910 SkColorSpacePrintf("Failed to read R gamma tag.\n"); |
(...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1350 | 1350 |
1351 uint32_t profileSize = *((uint32_t*) data); | 1351 uint32_t profileSize = *((uint32_t*) data); |
1352 data = SkTAddOffset<const void>(data, sizeof(uint32_t)); | 1352 data = SkTAddOffset<const void>(data, sizeof(uint32_t)); |
1353 length -= sizeof(uint32_t); | 1353 length -= sizeof(uint32_t); |
1354 if (length < profileSize) { | 1354 if (length < profileSize) { |
1355 return nullptr; | 1355 return nullptr; |
1356 } | 1356 } |
1357 | 1357 |
1358 return NewICC(data, profileSize); | 1358 return NewICC(data, profileSize); |
1359 } | 1359 } |
OLD | NEW |