Index: tests/EncodeTest.cpp |
diff --git a/tests/EncodeTest.cpp b/tests/EncodeTest.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e100670343345249d52c4b9d21ab02ccaeee5b97 |
--- /dev/null |
+++ b/tests/EncodeTest.cpp |
@@ -0,0 +1,43 @@ |
+/* |
+ * Copyright 2016 Google Inc. |
+ * |
+ * Use of this source code is governed by a BSD-style license that can be |
+ * found in the LICENSE file. |
+ */ |
+ |
+#include "Resources.h" |
+#include "SkCodec.h" |
+#include "SkImageEncoder.h" |
+#include "Test.h" |
+ |
+static inline bool almost_equal(uint8_t a, uint8_t b) { |
+ return SkTAbs((int) a - (int) b) <= 30; |
mtklein_C
2016/08/15 15:11:37
That's a pretty generous definition of almost equa
msarett
2016/08/15 19:31:08
Acknowledged.
|
+} |
+ |
+DEF_TEST(Encode, r) { |
+ SkBitmap orig; |
+ bool result = GetResourceAsBitmap("mandrill_512_q075.jpg", &orig); |
+ REPORTER_ASSERT(r, result); |
+ sk_sp<SkData> pngData(SkImageEncoder::EncodeData(orig, SkImageEncoder::kPNG_Type, 100)); |
+ sk_sp<SkData> jpegData(SkImageEncoder::EncodeData(orig, SkImageEncoder::kJPEG_Type, 100)); |
mtklein_C
2016/08/15 15:11:37
Does the quality setting cause us to go down any d
msarett
2016/08/15 19:31:08
The jpeg library handles the quality, so the code
|
+ SkAutoTDelete<SkCodec> pngCodec = SkCodec::NewFromData(pngData.get()); |
+ SkAutoTDelete<SkCodec> jpegCodec = SkCodec::NewFromData(jpegData.get()); |
+ |
+ SkImageInfo info = pngCodec->getInfo().makeColorType(kN32_SkColorType); |
+ SkBitmap pngBitmap, jpegBitmap; |
+ pngBitmap.allocPixels(info); |
+ jpegBitmap.allocPixels(info); |
+ pngCodec->getPixels(info, pngBitmap.getPixels(), pngBitmap.rowBytes()); |
+ jpegCodec->getPixels(info, jpegBitmap.getPixels(), jpegBitmap.rowBytes()); |
+ |
+ for (int y = 0; y < pngBitmap.height(); y++) { |
+ for (int x = 0; x < pngBitmap.width(); x++) { |
+ SkPMColor pngPixel = *pngBitmap.getAddr32(x, y); |
+ SkPMColor jpegPixel = *jpegBitmap.getAddr32(x, y); |
+ REPORTER_ASSERT(r, almost_equal(SkGetPackedR32(pngPixel), SkGetPackedR32(jpegPixel))); |
+ REPORTER_ASSERT(r, almost_equal(SkGetPackedG32(pngPixel), SkGetPackedG32(jpegPixel))); |
+ REPORTER_ASSERT(r, almost_equal(SkGetPackedB32(pngPixel), SkGetPackedB32(jpegPixel))); |
+ REPORTER_ASSERT(r, almost_equal(SkGetPackedA32(pngPixel), SkGetPackedA32(jpegPixel))); |
mtklein_C
2016/08/15 15:11:37
Sort of silly to test JPEG's alpha?
msarett
2016/08/15 19:31:08
Acknowledged.
|
+ } |
+ } |
+} |