• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2017 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/gm.h"
9 #include "include/core/SkBitmap.h"
10 #include "include/core/SkCanvas.h"
11 #include "include/core/SkColorPriv.h"
12 #include "include/core/SkData.h"
13 #include "include/core/SkEncodedImageFormat.h"
14 #include "include/core/SkImage.h"
15 #include "include/core/SkImageEncoder.h"
16 #include "include/core/SkRefCnt.h"
17 #include "include/core/SkSize.h"
18 #include "include/core/SkString.h"
19 #include "include/core/SkTypes.h"
20 
21 #include <utility>
22 
23 namespace skiagm {
24 
25 class ColorCubeGM : public GM {
26 public:
ColorCubeGM()27     ColorCubeGM() {}
28 
29 protected:
onShortName()30     SkString onShortName() override {
31         return SkString("jpg-color-cube");
32     }
33 
onISize()34     SkISize onISize() override {
35         return SkISize::Make(512, 512);
36     }
37 
onOnceBeforeDraw()38     void onOnceBeforeDraw() override {
39         SkBitmap bmp;
40         bmp.allocN32Pixels(512, 512, true);
41         int bX = 0, bY = 0;
42         for (int b = 0; b < 64; ++b) {
43             for (int r = 0; r < 64; ++r) {
44                 for (int g = 0; g < 64; ++g) {
45                     *bmp.getAddr32(bX + r, bY + g) = SkPackARGB32(255,
46                                                                   SkTPin(r * 4, 0, 255),
47                                                                   SkTPin(g * 4, 0, 255),
48                                                                   SkTPin(b * 4, 0, 255));
49                 }
50             }
51             bX += 64;
52             if (bX >= 512) {
53                 bX = 0;
54                 bY += 64;
55             }
56         }
57         auto jpegData = SkEncodeBitmap(bmp, SkEncodedImageFormat::kJPEG, 100);
58         fImage = SkImage::MakeFromEncoded(std::move(jpegData));
59     }
60 
onDraw(SkCanvas * canvas)61     void onDraw(SkCanvas* canvas) override {
62         canvas->drawImage(fImage, 0, 0);
63     }
64 
65 private:
66     sk_sp<SkImage> fImage;
67 
68     typedef GM INHERITED;
69 };
70 
71 DEF_GM( return new ColorCubeGM; )
72 }
73