diff options
Diffstat (limited to 'gm')
-rw-r--r-- | gm/bicubicfilter.cpp | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/gm/bicubicfilter.cpp b/gm/bicubicfilter.cpp new file mode 100644 index 0000000000..c3f80df118 --- /dev/null +++ b/gm/bicubicfilter.cpp @@ -0,0 +1,84 @@ +/* + * Copyright 2013 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "gm.h" +#include "SkColor.h" +#include "SkBicubicImageFilter.h" + +namespace skiagm { + +class BicubicGM : public GM { +public: + BicubicGM() : fInitialized(false) { + this->setBGColor(0x00000000); + } + +protected: + virtual SkString onShortName() { + return SkString("bicubicfilter"); + } + + void make_checkerboard(int width, int height) { + SkASSERT(width % 2 == 0); + SkASSERT(height % 2 == 0); + fCheckerboard.setConfig(SkBitmap::kARGB_8888_Config, width, height); + fCheckerboard.allocPixels(); + SkAutoLockPixels lock(fCheckerboard); + for (int y = 0; y < height; y += 2) { + SkPMColor* s = fCheckerboard.getAddr32(0, y); + for (int x = 0; x < width; x += 2) { + *s++ = 0xFFFFFFFF; + *s++ = 0xFF000000; + } + s = fCheckerboard.getAddr32(0, y + 1); + for (int x = 0; x < width; x += 2) { + *s++ = 0xFF000000; + *s++ = 0xFFFFFFFF; + } + } + } + + virtual SkISize onISize() { + return make_isize(400, 300); + } + + virtual void onDraw(SkCanvas* canvas) { + if (!fInitialized) { + make_checkerboard(4, 4); + fInitialized = true; + } + SkScalar sk32 = SkIntToScalar(32); + canvas->clear(0x00000000); + SkPaint bilinearPaint, bicubicPaint; + SkSize scale = SkSize::Make(sk32, sk32); + canvas->save(); + canvas->scale(sk32, sk32); + bilinearPaint.setFilterBitmap(true); + canvas->drawBitmap(fCheckerboard, 0, 0, &bilinearPaint); + canvas->restore(); + SkAutoTUnref<SkImageFilter> bicubic(SkBicubicImageFilter::CreateMitchell(scale)); + bicubicPaint.setImageFilter(bicubic); + SkRect srcBounds; + fCheckerboard.getBounds(&srcBounds); + canvas->translate(SkIntToScalar(140), 0); + canvas->saveLayer(&srcBounds, &bicubicPaint); + canvas->drawBitmap(fCheckerboard, 0, 0); + canvas->restore(); + } + +private: + typedef GM INHERITED; + SkBitmap fCheckerboard; + bool fInitialized; +}; + +////////////////////////////////////////////////////////////////////////////// + +static GM* MyFactory(void*) { return new BicubicGM; } +static GMRegistry reg(MyFactory); + +} |