aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/CodecTest.cpp
diff options
context:
space:
mode:
authorGravatar Matt Sarett <msarett@google.com>2017-03-15 17:50:08 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-03-21 00:05:30 +0000
commit0e032be6b25a943ae85f51aaf7309311da7fea44 (patch)
tree2739329310ce623c816b678d56c9e54b7d20b54e /tests/CodecTest.cpp
parent29dd456c8993da208568ca1658579df03ff4375d (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.cpp41
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)));
+ }
+ }
+}