/* * 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 "SkImageDecoder.h" #include "SkStream.h" class ScaleBitmapGM : public skiagm::GM { public: ScaleBitmapGM(const char filename[], float scale) : fFilename(filename), fScale(scale) { this->setBGColor(0xFFDDDDDD); fName.printf("scalebitmap_%s_%f", filename, scale); SkString path(skiagm::GM::gResourcePath); path.append("/"); path.append(fFilename); SkImageDecoder *codec = NULL; SkFILEStream stream(path.c_str()); if (stream.isValid()) { codec = SkImageDecoder::Factory(&stream); } if (codec) { stream.rewind(); codec->decode(&stream, &fBM, SkBitmap::kARGB_8888_Config, SkImageDecoder::kDecodePixels_Mode); SkDELETE(codec); } else { fBM.setConfig(SkBitmap::kARGB_8888_Config, 1, 1); fBM.allocPixels(); *(fBM.getAddr32(0,0)) = 0xFF0000FF; // red == bad } fSize = fBM.height(); } protected: SkBitmap fBM; SkString fName; SkString fFilename; int fSize; float fScale; virtual SkString onShortName() SK_OVERRIDE { return fName; } virtual SkISize onISize() SK_OVERRIDE { return SkISize::Make(fBM.width() * fScale, fBM.height() * fScale); } virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { SkBitmap dst; dst.setConfig(SkBitmap::kARGB_8888_Config, fBM.width() * fScale, fBM.height() * fScale); dst.allocPixels(); fBM.scale(&dst); canvas->drawBitmap(dst, 0, 0); } private: typedef skiagm::GM INHERITED; }; class ScaleBitmapMipmapGM: public ScaleBitmapGM { SkMatrix fMatrix; public: ScaleBitmapMipmapGM(const char filename[], float scale) : INHERITED(filename, scale) { fName.printf("scalebitmap_mipmap_%s_%f", filename, scale); fBM.buildMipMap(); fMatrix.setScale(scale, scale); } protected: virtual void onDraw(SkCanvas *canvas) SK_OVERRIDE { SkPaint paint; paint.setFilterBitmap(true); canvas->drawBitmapMatrix(fBM, fMatrix, &paint); } private: typedef ScaleBitmapGM INHERITED; }; ////////////////////////////////////////////////////////////////////////////// DEF_GM( return new ScaleBitmapGM("mandrill_128.png", 2); ) DEF_GM( return new ScaleBitmapGM("mandrill_64.png", 4); ) DEF_GM( return new ScaleBitmapGM("mandrill_32.png", 8); ) DEF_GM( return new ScaleBitmapGM("mandrill_16.png", 16); ) DEF_GM( return new ScaleBitmapGM("nature.jpg", 0.5f); ) DEF_GM( return new ScaleBitmapGM("nature.jpg", 0.25f); ) DEF_GM( return new ScaleBitmapGM("nature.jpg", 0.125f); ) DEF_GM( return new ScaleBitmapGM("nature.jpg", 0.0625f); ) DEF_GM( return new ScaleBitmapMipmapGM("nature.jpg", 0.5f); ) DEF_GM( return new ScaleBitmapMipmapGM("nature.jpg", 0.25f); ) DEF_GM( return new ScaleBitmapMipmapGM("nature.jpg", 0.125f); ) DEF_GM( return new ScaleBitmapMipmapGM("nature.jpg", 0.0625f); )