| Index: src/ports/SkImageDecoder_WIC.cpp
|
| diff --git a/src/ports/SkImageDecoder_WIC.cpp b/src/ports/SkImageDecoder_WIC.cpp
|
| index 17d75ccaca93d972437f1b7397370698b3ca3f16..cea7de21879842c3a9c9207823070cc3f106074e 100644
|
| --- a/src/ports/SkImageDecoder_WIC.cpp
|
| +++ b/src/ports/SkImageDecoder_WIC.cpp
|
| @@ -29,10 +29,39 @@
|
| #endif
|
|
|
| class SkImageDecoder_WIC : public SkImageDecoder {
|
| +public:
|
| + SkImageDecoder_WIC()
|
| + : fFormat(kUnknown_Format) {}
|
| +
|
| protected:
|
| virtual bool onDecode(SkStream* stream, SkBitmap* bm, Mode mode);
|
| +
|
| +private:
|
| + Format fFormat;
|
| };
|
|
|
| +struct FormatConversion {
|
| + GUID fGuidFormat;
|
| + SkImageDecoder::Format fFormat;
|
| +};
|
| +
|
| +static const FormatConversion gFormatConversions[] = {
|
| + { GUID_ContainerFormatBmp, SkImageDecoder::kBMP_Format },
|
| + { GUID_ContainerFormatGif, SkImageDecoder::kGIF_Format },
|
| + { GUID_ContainerFormatIco, SkImageDecoder::kICO_Format },
|
| + { GUID_ContainerFormatJpeg, SkImageDecoder::kJPEG_Format },
|
| + { GUID_ContainerFormatPng, SkImageDecoder::kPNG_Format },
|
| +};
|
| +
|
| +static SkImageDecoder::Format GuidContainerFormat_to_Format(REFGUID guid) {
|
| + for (size_t i = 0; i < SK_ARRAY_COUNT(gFormatConversions); i++) {
|
| + if (IsEqualGUID(guid, gFormatConversions[i].fGuidFormat)) {
|
| + return gFormatConversions[i].fFormat;
|
| + }
|
| + }
|
| + return SkImageDecoder::kUnknown_Format;
|
| +}
|
| +
|
| bool SkImageDecoder_WIC::onDecode(SkStream* stream, SkBitmap* bm, Mode mode) {
|
| //Initialize COM.
|
| SkAutoCoInitialize scopedCo;
|
| @@ -149,6 +178,17 @@ bool SkImageDecoder_WIC::onDecode(SkStream* stream, SkBitmap* bm, Mode mode) {
|
| bm->computeAndSetOpaquePredicate();
|
| }
|
|
|
| + //Get the format
|
| + if (SUCCEEDED(hr)) {
|
| + GUID format;
|
| + HRESULT result = piBitmapDecoder->GetContainerFormat(&format);
|
| + if (SUCCEEDED(result)) {
|
| + fFormat = GuidContainerFormat_to_Format(format);
|
| + } else {
|
| + fFormat = kUnknown_Format;
|
| + }
|
| + }
|
| +
|
| return SUCCEEDED(hr);
|
| }
|
|
|
| @@ -194,9 +234,6 @@ bool SkImageEncoder_WIC::onEncode(SkWStream* stream
|
| case kBMP_Type:
|
| type = GUID_ContainerFormatBmp;
|
| break;
|
| - case kGIF_Type:
|
| - type = GUID_ContainerFormatGif;
|
| - break;
|
| case kICO_Type:
|
| type = GUID_ContainerFormatIco;
|
| break;
|
| @@ -348,7 +385,6 @@ bool SkImageEncoder_WIC::onEncode(SkWStream* stream
|
| static SkImageEncoder* sk_imageencoder_wic_factory(SkImageEncoder::Type t) {
|
| switch (t) {
|
| case SkImageEncoder::kBMP_Type:
|
| - case SkImageEncoder::kGIF_Type:
|
| case SkImageEncoder::kICO_Type:
|
| case SkImageEncoder::kJPEG_Type:
|
| case SkImageEncoder::kPNG_Type:
|
|
|