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

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

Issue 2408133009: Add NewRGB() with float gamma to SkColorSpace public API
Patch Set: 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 unified diff | Download patch
« no previous file with comments | « src/codec/SkPngCodec.cpp ('k') | src/core/SkColorSpace_Base.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 "SkColorSpacePriv.h" 10 #include "SkColorSpacePriv.h"
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
131 color_space_almost_equal(toXYZD50.getFloat(2, 2), standard[8]) && 131 color_space_almost_equal(toXYZD50.getFloat(2, 2), standard[8]) &&
132 color_space_almost_equal(toXYZD50.getFloat(0, 3), 0.0f) && 132 color_space_almost_equal(toXYZD50.getFloat(0, 3), 0.0f) &&
133 color_space_almost_equal(toXYZD50.getFloat(1, 3), 0.0f) && 133 color_space_almost_equal(toXYZD50.getFloat(1, 3), 0.0f) &&
134 color_space_almost_equal(toXYZD50.getFloat(2, 3), 0.0f) && 134 color_space_almost_equal(toXYZD50.getFloat(2, 3), 0.0f) &&
135 color_space_almost_equal(toXYZD50.getFloat(3, 0), 0.0f) && 135 color_space_almost_equal(toXYZD50.getFloat(3, 0), 0.0f) &&
136 color_space_almost_equal(toXYZD50.getFloat(3, 1), 0.0f) && 136 color_space_almost_equal(toXYZD50.getFloat(3, 1), 0.0f) &&
137 color_space_almost_equal(toXYZD50.getFloat(3, 2), 0.0f) && 137 color_space_almost_equal(toXYZD50.getFloat(3, 2), 0.0f) &&
138 color_space_almost_equal(toXYZD50.getFloat(3, 3), 1.0f); 138 color_space_almost_equal(toXYZD50.getFloat(3, 3), 1.0f);
139 } 139 }
140 140
141 sk_sp<SkColorSpace> SkColorSpace_Base::NewRGB(const float values[3], const SkMat rix44& toXYZD50) { 141 sk_sp<SkColorSpace> SkColorSpace::NewRGB(const float values[3], const SkMatrix44 & toXYZD50) {
142 if (0.0f > values[0] || 0.0f > values[1] || 0.0f > values[2]) { 142 if (0.0f > values[0] || 0.0f > values[1] || 0.0f > values[2]) {
143 return nullptr; 143 return nullptr;
144 } 144 }
145 145
146 SkGammaNamed gammaNamed = kNonStandard_SkGammaNamed; 146 SkGammaNamed gammaNamed = kNonStandard_SkGammaNamed;
147 if (color_space_almost_equal(2.2f, values[0]) && 147 if (color_space_almost_equal(2.2f, values[0]) &&
148 color_space_almost_equal(2.2f, values[1]) && 148 color_space_almost_equal(2.2f, values[1]) &&
149 color_space_almost_equal(2.2f, values[2])) { 149 color_space_almost_equal(2.2f, values[2])) {
150 gammaNamed = k2Dot2Curve_SkGammaNamed; 150 gammaNamed = k2Dot2Curve_SkGammaNamed;
151 } else if (color_space_almost_equal(1.0f, values[0]) && 151 } else if (color_space_almost_equal(1.0f, values[0]) &&
(...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after
553 } 553 }
554 554
555 float gammas[3]; 555 float gammas[3];
556 gammas[0] = *(((const float*) data) + 0); 556 gammas[0] = *(((const float*) data) + 0);
557 gammas[1] = *(((const float*) data) + 1); 557 gammas[1] = *(((const float*) data) + 1);
558 gammas[2] = *(((const float*) data) + 2); 558 gammas[2] = *(((const float*) data) + 2);
559 data = SkTAddOffset<const void>(data, 3 * sizeof(float)); 559 data = SkTAddOffset<const void>(data, 3 * sizeof(float));
560 560
561 SkMatrix44 toXYZ(SkMatrix44::kUninitialized_Constructor); 561 SkMatrix44 toXYZ(SkMatrix44::kUninitialized_Constructor);
562 toXYZ.set3x4RowMajorf((const float*) data); 562 toXYZ.set3x4RowMajorf((const float*) data);
563 return SkColorSpace_Base::NewRGB(gammas, toXYZ); 563 return SkColorSpace::NewRGB(gammas, toXYZ);
564 } 564 }
565 case ColorSpaceHeader::kTransferFn_Flag: { 565 case ColorSpaceHeader::kTransferFn_Flag: {
566 if (length < 19 * sizeof(float)) { 566 if (length < 19 * sizeof(float)) {
567 return nullptr; 567 return nullptr;
568 } 568 }
569 569
570 SkColorSpaceTransferFn transferFn; 570 SkColorSpaceTransferFn transferFn;
571 transferFn.fA = *(((const float*) data) + 0); 571 transferFn.fA = *(((const float*) data) + 0);
572 transferFn.fB = *(((const float*) data) + 1); 572 transferFn.fB = *(((const float*) data) + 1);
573 transferFn.fC = *(((const float*) data) + 2); 573 transferFn.fC = *(((const float*) data) + 2);
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
619 return false; 619 return false;
620 } 620 }
621 621
622 // It is unlikely that we will reach this case. 622 // It is unlikely that we will reach this case.
623 sk_sp<SkData> srcData = src->serialize(); 623 sk_sp<SkData> srcData = src->serialize();
624 sk_sp<SkData> dstData = dst->serialize(); 624 sk_sp<SkData> dstData = dst->serialize();
625 return srcData->size() == dstData->size() && 625 return srcData->size() == dstData->size() &&
626 0 == memcmp(srcData->data(), dstData->data(), srcData->size() ); 626 0 == memcmp(srcData->data(), dstData->data(), srcData->size() );
627 } 627 }
628 } 628 }
OLDNEW
« no previous file with comments | « src/codec/SkPngCodec.cpp ('k') | src/core/SkColorSpace_Base.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698