Chromium Code Reviews| 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.
|
| + } |
| + } |
| +} |