diff options
author | Matt Sarett <msarett@google.com> | 2017-03-15 17:50:08 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-03-21 00:05:30 +0000 |
commit | 0e032be6b25a943ae85f51aaf7309311da7fea44 (patch) | |
tree | 2739329310ce623c816b678d56c9e54b7d20b54e /tests/CodecTest.cpp | |
parent | 29dd456c8993da208568ca1658579df03ff4375d (diff) |
Add support for writing ICC profiles in png encodes
BUG=skia:
Change-Id: I99eb2f157f249ed09d724461ec4a1e31db70816a
Reviewed-on: https://skia-review.googlesource.com/9782
Reviewed-by: Leon Scroggins <scroggo@google.com>
Commit-Queue: Matt Sarett <msarett@google.com>
Diffstat (limited to 'tests/CodecTest.cpp')
-rw-r--r-- | tests/CodecTest.cpp | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/tests/CodecTest.cpp b/tests/CodecTest.cpp index 265b51e886..65e5475e54 100644 --- a/tests/CodecTest.cpp +++ b/tests/CodecTest.cpp @@ -13,9 +13,11 @@ #include "SkCodec.h" #include "SkCodecImageGenerator.h" #include "SkColorSpace_XYZ.h" +#include "SkColorSpacePriv.h" #include "SkData.h" #include "SkFrontBufferedStream.h" #include "SkImageEncoder.h" +#include "SkImageEncoderPriv.h" #include "SkMD5.h" #include "SkOSPath.h" #include "SkPngChunkReader.h" @@ -1527,3 +1529,42 @@ DEF_TEST(Codec_InvalidAnimated, r) { codec->incrementalDecode(); } } + +DEF_TEST(Codec_EncodeICC, r) { + // Test with sRGB color space. + SkBitmap srgbBitmap; + SkImageInfo srgbInfo = SkImageInfo::MakeS32(1, 1, kOpaque_SkAlphaType); + srgbBitmap.allocPixels(srgbInfo); + *srgbBitmap.getAddr32(0, 0) = 0; + SkPixmap pixmap; + srgbBitmap.peekPixels(&pixmap); + SkDynamicMemoryWStream srgbBuf; + SkEncodeOptions opts; + opts.fColorBehavior = SkEncodeOptions::ColorBehavior::kCorrect; + SkEncodeImageAsPNG(&srgbBuf, pixmap, opts); + sk_sp<SkData> srgbData = srgbBuf.detachAsData(); + std::unique_ptr<SkCodec> srgbCodec(SkCodec::NewFromData(srgbData)); + REPORTER_ASSERT(r, srgbCodec->getInfo().colorSpace() == SkColorSpace::MakeSRGB().get()); + + // Test with P3 color space. + SkDynamicMemoryWStream p3Buf; + sk_sp<SkColorSpace> p3 = SkColorSpace::MakeRGB(SkColorSpace::kSRGB_RenderTargetGamma, + SkColorSpace::kDCIP3_D65_Gamut); + pixmap.setColorSpace(p3); + SkEncodeImageAsPNG(&p3Buf, pixmap, opts); + sk_sp<SkData> p3Data = p3Buf.detachAsData(); + std::unique_ptr<SkCodec> p3Codec(SkCodec::NewFromData(p3Data)); + REPORTER_ASSERT(r, p3Codec->getInfo().colorSpace()->gammaCloseToSRGB()); + SkMatrix44 mat0(SkMatrix44::kUninitialized_Constructor); + SkMatrix44 mat1(SkMatrix44::kUninitialized_Constructor); + bool success = p3->toXYZD50(&mat0); + REPORTER_ASSERT(r, success); + success = p3Codec->getInfo().colorSpace()->toXYZD50(&mat1); + REPORTER_ASSERT(r, success); + + for (int i = 0; i < 4; i++) { + for (int j = 0; j < 4; j++) { + REPORTER_ASSERT(r, color_space_almost_equal(mat0.get(0, 0), mat1.get(0, 0))); + } + } +} |