/*
* 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); )