Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(455)

Unified Diff: src/ports/SkImageDecoder_WIC.cpp

Issue 14363003: Updates to skimage tool to use it for testing. (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Change getFormatName to use a switch statement. Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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:
« no previous file with comments | « src/ports/SkImageDecoder_CG.cpp ('k') | tools/picture_utils.cpp » ('j') | tools/skimage_main.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698