Index: dm/DMSrcSink.cpp |
diff --git a/dm/DMSrcSink.cpp b/dm/DMSrcSink.cpp |
index 5ca66c50e207c4809f41396e907d354d4d78a17d..22dd5679e3ec8d8f2486d108081e013c30a58dd8 100644 |
--- a/dm/DMSrcSink.cpp |
+++ b/dm/DMSrcSink.cpp |
@@ -140,15 +140,27 @@ Error ImageSrc::draw(SkCanvas* canvas) const { |
SkISize ImageSrc::size() const { |
SkAutoTUnref<SkData> encoded(SkData::NewFromFileName(fPath.c_str())); |
- SkBitmap bitmap; |
- if (!encoded || !SkImageDecoder::DecodeMemory(encoded->data(), |
- encoded->size(), |
- &bitmap, |
- kUnknown_SkColorType, |
- SkImageDecoder::kDecodeBounds_Mode)) { |
- return SkISize::Make(0,0); |
+ if (FLAGS_codec) { |
+ SkAutoTDelete<SkCodec> codec(SkCodec::NewFromData(encoded)); |
+ if (!codec) { |
+ return SkISize::Make(0,0); |
+ } |
+ SkImageInfo info; |
+ if (!codec->getInfo(&info)) { |
+ return SkISize::Make(0,0); |
+ } |
+ return info.dimensions(); |
+ } else { |
+ SkBitmap bitmap; |
+ if (!encoded || !SkImageDecoder::DecodeMemory(encoded->data(), |
+ encoded->size(), |
+ &bitmap, |
+ kUnknown_SkColorType, |
+ SkImageDecoder::kDecodeBounds_Mode)) { |
+ return SkISize::Make(0,0); |
+ } |
+ return bitmap.dimensions(); |
} |
- return bitmap.dimensions(); |
} |
Name ImageSrc::name() const { |