diff options
Diffstat (limited to 'gm/filterbitmap.cpp')
-rw-r--r-- | gm/filterbitmap.cpp | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/gm/filterbitmap.cpp b/gm/filterbitmap.cpp index 51a8064d80..5c63910a78 100644 --- a/gm/filterbitmap.cpp +++ b/gm/filterbitmap.cpp @@ -9,6 +9,7 @@ #include "Resources.h" #include "SkGradientShader.h" +#include "SkImageDecoder.h" #include "SkStream.h" #include "SkTypeface.h" @@ -195,17 +196,26 @@ protected: } void makeBitmap() override { - if (!GetResourceAsBitmap(fFilename.c_str(), &fBM)) { - fBM.allocN32Pixels(1, 1); - fBM.eraseARGB(255, 255, 0 , 0); // red == bad - } - fSize = fBM.height(); - - if (fConvertToG8) { - SkBitmap tmp; - fBM.copyTo(&tmp, kGray_8_SkColorType); - fBM = tmp; - } + SkImageDecoder* codec = nullptr; + SkString resourcePath = GetResourcePath(fFilename.c_str()); + SkFILEStream stream(resourcePath.c_str()); + if (stream.isValid()) { + codec = SkImageDecoder::Factory(&stream); + } + if (codec) { + stream.rewind(); + codec->decode(&stream, &fBM, kN32_SkColorType, SkImageDecoder::kDecodePixels_Mode); + delete codec; + } else { + fBM.allocN32Pixels(1, 1); + *(fBM.getAddr32(0,0)) = 0xFF0000FF; // red == bad + } + fSize = fBM.height(); + if (fConvertToG8) { + SkBitmap tmp; + fBM.copyTo(&tmp, kGray_8_SkColorType); + fBM = tmp; + } } private: const bool fConvertToG8; |