blob: 10a1d86c84be6b55a5f58465cbe5e1c17f1b493f [file] [log] [blame]
humper@google.comb0889472013-07-09 21:37:14 +00001/*
2 * Copyright 2013 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#include "gm.h"
9
10#include "SkImageDecoder.h"
11#include "SkStream.h"
12
13class ScaleBitmapGM : public skiagm::GM {
skia.committer@gmail.com9e1ec1a2013-07-10 07:00:58 +000014
humper@google.comb0889472013-07-09 21:37:14 +000015public:
skia.committer@gmail.com9e1ec1a2013-07-10 07:00:58 +000016
humper@google.comb0889472013-07-09 21:37:14 +000017 ScaleBitmapGM(const char filename[], float scale)
18 : fFilename(filename), fScale(scale)
19 {
20 this->setBGColor(0xFFDDDDDD);
21 fName.printf("scalebitmap_%s_%f", filename, scale);
skia.committer@gmail.com9e1ec1a2013-07-10 07:00:58 +000022
humper@google.comb0889472013-07-09 21:37:14 +000023 SkString path(skiagm::GM::gResourcePath);
24 path.append("/");
25 path.append(fFilename);
26
27 SkImageDecoder *codec = NULL;
28 SkFILEStream stream(path.c_str());
29 if (stream.isValid()) {
30 codec = SkImageDecoder::Factory(&stream);
31 }
32 if (codec) {
33 stream.rewind();
34 codec->decode(&stream, &fBM, SkBitmap::kARGB_8888_Config,
35 SkImageDecoder::kDecodePixels_Mode);
36 SkDELETE(codec);
37 } else {
reed@google.comeb9a46c2014-01-25 16:46:20 +000038 fBM.allocN32Pixels(1, 1);
humper@google.comb0889472013-07-09 21:37:14 +000039 *(fBM.getAddr32(0,0)) = 0xFF0000FF; // red == bad
40 }
41 fSize = fBM.height();
42 }
43
44protected:
skia.committer@gmail.com9e1ec1a2013-07-10 07:00:58 +000045
46
humper@google.comb0889472013-07-09 21:37:14 +000047 SkBitmap fBM;
48 SkString fName;
49 SkString fFilename;
50 int fSize;
51 float fScale;
skia.committer@gmail.com9e1ec1a2013-07-10 07:00:58 +000052
53
humper@google.comb0889472013-07-09 21:37:14 +000054 virtual SkString onShortName() SK_OVERRIDE {
55 return fName;
56 }
57
58 virtual SkISize onISize() SK_OVERRIDE {
59 return SkISize::Make(fBM.width() * fScale, fBM.height() * fScale);
60 }
61
62 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
63 SkBitmap dst;
reed@google.comeb9a46c2014-01-25 16:46:20 +000064 dst.allocN32Pixels(fBM.width() * fScale, fBM.height() * fScale);
humper@google.comb0889472013-07-09 21:37:14 +000065 fBM.scale(&dst);
skia.committer@gmail.com9e1ec1a2013-07-10 07:00:58 +000066
humper@google.comb0889472013-07-09 21:37:14 +000067 canvas->drawBitmap(dst, 0, 0);
68 }
69
70private:
71 typedef skiagm::GM INHERITED;
72};
73
74class ScaleBitmapMipmapGM: public ScaleBitmapGM {
75 SkMatrix fMatrix;
skia.committer@gmail.com9e1ec1a2013-07-10 07:00:58 +000076
humper@google.comb0889472013-07-09 21:37:14 +000077public:
78 ScaleBitmapMipmapGM(const char filename[], float scale)
79 : INHERITED(filename, scale)
80 {
81 fName.printf("scalebitmap_mipmap_%s_%f", filename, scale);
82 fBM.buildMipMap();
83 fMatrix.setScale(scale, scale);
84 }
85protected:
86 virtual void onDraw(SkCanvas *canvas) SK_OVERRIDE {
87 SkPaint paint;
skia.committer@gmail.com9e1ec1a2013-07-10 07:00:58 +000088
humper@google.comb0889472013-07-09 21:37:14 +000089 paint.setFilterBitmap(true);
90 canvas->drawBitmapMatrix(fBM, fMatrix, &paint);
91 }
92private:
skia.committer@gmail.com9e1ec1a2013-07-10 07:00:58 +000093 typedef ScaleBitmapGM INHERITED;
humper@google.comb0889472013-07-09 21:37:14 +000094};
95
96//////////////////////////////////////////////////////////////////////////////
97
98DEF_GM( return new ScaleBitmapGM("mandrill_128.png", 2); )
99DEF_GM( return new ScaleBitmapGM("mandrill_64.png", 4); )
100DEF_GM( return new ScaleBitmapGM("mandrill_32.png", 8); )
101DEF_GM( return new ScaleBitmapGM("mandrill_16.png", 16); )
102
103DEF_GM( return new ScaleBitmapGM("nature.jpg", 0.5f); )
104DEF_GM( return new ScaleBitmapGM("nature.jpg", 0.25f); )
105DEF_GM( return new ScaleBitmapGM("nature.jpg", 0.125f); )
106DEF_GM( return new ScaleBitmapGM("nature.jpg", 0.0625f); )
107
108DEF_GM( return new ScaleBitmapMipmapGM("nature.jpg", 0.5f); )
109DEF_GM( return new ScaleBitmapMipmapGM("nature.jpg", 0.25f); )
110DEF_GM( return new ScaleBitmapMipmapGM("nature.jpg", 0.125f); )
111DEF_GM( return new ScaleBitmapMipmapGM("nature.jpg", 0.0625f); )