Index: tests/CodecTest.cpp |
diff --git a/tests/CodecTest.cpp b/tests/CodecTest.cpp |
index 8023ff219d5873632db3708054a850fe4e8d3025..fcbfadd0680bc25225fd1f0bb1f94d85dc779a60 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); |
+} |