Index: tests/CodecTest.cpp |
diff --git a/tests/CodecTest.cpp b/tests/CodecTest.cpp |
index a5df7e3b50a9e00291966f1a578b637bef7f7cce..a6b44eb9a7506187e5e248f74e2482b8351662da 100644 |
--- a/tests/CodecTest.cpp |
+++ b/tests/CodecTest.cpp |
@@ -11,6 +11,7 @@ |
#include "SkCodec.h" |
#include "SkCodecImageGenerator.h" |
#include "SkData.h" |
+#include "SkImageEncoder.h" |
#include "SkFrontBufferedStream.h" |
#include "SkMD5.h" |
#include "SkRandom.h" |
@@ -1042,3 +1043,34 @@ DEF_TEST(Codec_jpeg_rewind, r) { |
SkCodec::Result result = codec->getPixels(codec->getInfo(), pixelStorage.get(), rowBytes); |
REPORTER_ASSERT(r, SkCodec::kSuccess == result); |
} |
+ |
+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); |
+ |
+ // 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()); |
+ |
+ SkBitmap bm2; |
+ bm2.allocPixels(codec->getInfo()); |
+ result = codec->getPixels(codec->getInfo(), bm2.getPixels(), bm2.rowBytes()); |
+ REPORTER_ASSERT(r, SkCodec::kSuccess == result); |
+ |
+ SkMD5::Digest d1, d2; |
+ md5(bm1, &d1); |
+ md5(bm2, &d2); |
+ REPORTER_ASSERT(r, d1 == d2); |
+} |