diff options
author | reed <reed@google.com> | 2016-08-22 07:41:46 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-08-22 07:41:46 -0700 |
commit | ccebcec4aca71fd17626b45f27fbe613bfa18b64 (patch) | |
tree | 74593bae0dde80a1b4c9cab8336e82b69ae6ac30 | |
parent | 35bb74b444bc4a9ed2f437d97c6a943012990fe3 (diff) |
'F' will toggle filtering for the --picture sample
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2263203002
TBR=
Review-Url: https://codereview.chromium.org/2263203002
-rw-r--r-- | samplecode/DecodeFile.h | 11 | ||||
-rw-r--r-- | samplecode/SamplePictFile.cpp | 26 |
2 files changed, 28 insertions, 9 deletions
diff --git a/samplecode/DecodeFile.h b/samplecode/DecodeFile.h index 3995238bd0..801d67ce97 100644 --- a/samplecode/DecodeFile.h +++ b/samplecode/DecodeFile.h @@ -8,9 +8,11 @@ #include "SkBitmap.h" #include "SkCodec.h" #include "SkData.h" +#include "SkImage.h" -inline bool decode_file(const char* filename, SkBitmap* bitmap, - SkColorType colorType = kN32_SkColorType, bool requireUnpremul = false) { +static inline bool decode_file(const char* filename, SkBitmap* bitmap, + SkColorType colorType = kN32_SkColorType, + bool requireUnpremul = false) { SkASSERT(kIndex_8_SkColorType != colorType); sk_sp<SkData> data(SkData::MakeFromFileName(filename)); SkAutoTDelete<SkCodec> codec(SkCodec::NewFromData(data.get())); @@ -29,3 +31,8 @@ inline bool decode_file(const char* filename, SkBitmap* bitmap, return SkCodec::kSuccess == codec->getPixels(info, bitmap->getPixels(), bitmap->rowBytes()); } + +static inline sk_sp<SkImage> decode_file(const char filename[]) { + sk_sp<SkData> data(SkData::MakeFromFileName(filename)); + return data ? SkImage::MakeFromEncoded(data) : nullptr; +} diff --git a/samplecode/SamplePictFile.cpp b/samplecode/SamplePictFile.cpp index c1958c8973..85483288c7 100644 --- a/samplecode/SamplePictFile.cpp +++ b/samplecode/SamplePictFile.cpp @@ -55,9 +55,14 @@ public: fCount = 0; } - virtual ~PictFileView() { + ~PictFileView() override { + this->freePictures(); + } + + void freePictures() { for (int i = 0; i < kBBoxTypeCount; ++i) { SkSafeUnref(fPictures[i]); + fPictures[i] = nullptr; } } @@ -94,6 +99,12 @@ protected: case 'n': fCount += 1; this->inval(nullptr); return true; case 'p': fCount -= 1; this->inval(nullptr); return true; case 's': fCount = 0; this->inval(nullptr); return true; + case 'F': + fFilterQuality = (kNone_SkFilterQuality == fFilterQuality) ? + kHigh_SkFilterQuality : kNone_SkFilterQuality; + this->freePictures(); + this->inval(nullptr); + return true; default: break; } } @@ -148,18 +159,19 @@ private: BBoxType fBBox; SkSize fTileSize; int fCount; + SkFilterQuality fFilterQuality = kNone_SkFilterQuality; sk_sp<SkPicture> LoadPicture(const char path[], BBoxType bbox) { sk_sp<SkPicture> pic; - SkBitmap bm; - if (decode_file(path, &bm)) { - bm.setImmutable(); + if (sk_sp<SkImage> img = decode_file(path)) { SkPictureRecorder recorder; - SkCanvas* can = recorder.beginRecording(SkIntToScalar(bm.width()), - SkIntToScalar(bm.height()), + SkCanvas* can = recorder.beginRecording(SkIntToScalar(img->width()), + SkIntToScalar(img->height()), nullptr, 0); - can->drawBitmap(bm, 0, 0, nullptr); + SkPaint paint; + paint.setFilterQuality(fFilterQuality); + can->drawImage(img, 0, 0, &paint); pic = recorder.finishRecordingAsPicture(); } else { SkFILEStream stream(path); |