diff options
Diffstat (limited to 'tests/CodecTest.cpp')
| -rw-r--r-- | tests/CodecTest.cpp | 44 |
1 files changed, 30 insertions, 14 deletions
diff --git a/tests/CodecTest.cpp b/tests/CodecTest.cpp index 8023ff219d..fcbfadd068 100644 --- a/tests/CodecTest.cpp +++ b/tests/CodecTest.cpp @@ -1074,29 +1074,22 @@ DEF_TEST(Codec_ColorXform, r) { check_color_xform(r, "mandrill_512.png"); } -DEF_TEST(Codec_Png565, r) { - // Create an arbitrary 565 bitmap. - const char* path = "mandrill_512_q075.jpg"; - SkAutoTDelete<SkStream> stream(resource(path)); - SkAutoTDelete<SkCodec> codec(SkCodec::NewFromStream(stream.release())); - SkImageInfo info565 = codec->getInfo().makeColorType(kRGB_565_SkColorType); - SkBitmap bm1; - bm1.allocPixels(info565); - SkCodec::Result result = codec->getPixels(info565, bm1.getPixels(), bm1.rowBytes()); - REPORTER_ASSERT(r, SkCodec::kSuccess == result); +static void check_round_trip(skiatest::Reporter* r, const SkBitmap& bm1) { + SkColorType origColorType = bm1.colorType(); + SkAlphaType origAlphaType = bm1.alphaType(); // Encode the image to png. sk_sp<SkData> data = sk_sp<SkData>(SkImageEncoder::EncodeData(bm1, SkImageEncoder::kPNG_Type, 100)); // Prepare to decode. The codec should recognize that the PNG is 565. - codec.reset(SkCodec::NewFromData(data.get())); - REPORTER_ASSERT(r, kRGB_565_SkColorType == codec->getInfo().colorType()); - REPORTER_ASSERT(r, kOpaque_SkAlphaType == codec->getInfo().alphaType()); + SkAutoTDelete<SkCodec> codec(SkCodec::NewFromData(data.get())); + REPORTER_ASSERT(r, origColorType == codec->getInfo().colorType()); + REPORTER_ASSERT(r, origAlphaType == codec->getInfo().alphaType()); SkBitmap bm2; bm2.allocPixels(codec->getInfo()); - result = codec->getPixels(codec->getInfo(), bm2.getPixels(), bm2.rowBytes()); + SkCodec::Result result = codec->getPixels(codec->getInfo(), bm2.getPixels(), bm2.rowBytes()); REPORTER_ASSERT(r, SkCodec::kSuccess == result); SkMD5::Digest d1, d2; @@ -1104,3 +1097,26 @@ DEF_TEST(Codec_Png565, r) { md5(bm2, &d2); REPORTER_ASSERT(r, d1 == d2); } + +DEF_TEST(Codec_PngRoundTrip, r) { + // Create an arbitrary 565 bitmap. + const char* path = "mandrill_512_q075.jpg"; + SkAutoTDelete<SkStream> stream(resource(path)); + SkAutoTDelete<SkCodec> codec(SkCodec::NewFromStream(stream.release())); + SkImageInfo info565 = codec->getInfo().makeColorType(kRGB_565_SkColorType); + SkBitmap bm1; + bm1.allocPixels(info565); + SkCodec::Result result = codec->getPixels(info565, bm1.getPixels(), bm1.rowBytes()); + REPORTER_ASSERT(r, SkCodec::kSuccess == result); + check_round_trip(r, bm1); + + // Create an arbitrary gray bitmap. + path = "grayscale.jpg"; + stream.reset(resource(path)); + codec.reset(SkCodec::NewFromStream(stream.release())); + SkBitmap bm2; + bm2.allocPixels(codec->getInfo()); + result = codec->getPixels(codec->getInfo(), bm2.getPixels(), bm2.rowBytes()); + REPORTER_ASSERT(r, SkCodec::kSuccess == result); + check_round_trip(r, bm2); +} |
