blob: 50db941dee757277deda42987c6d96b26791d440 [file] [log] [blame]
Brian Osmanb433c562017-09-12 16:04:28 -04001/*
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 */
Ben Wagner7fde8e12019-05-01 17:28:53 -04007
Mike Kleinc0bd9f92019-04-23 12:05:21 -05008#include "gm/gm.h"
Ben Wagner7fde8e12019-05-01 17:28:53 -04009#include "include/core/SkBitmap.h"
Mike Kleinc0bd9f92019-04-23 12:05:21 -050010#include "include/core/SkCanvas.h"
11#include "include/core/SkColorPriv.h"
12#include "include/core/SkData.h"
Ben Wagner7fde8e12019-05-01 17:28:53 -040013#include "include/core/SkEncodedImageFormat.h"
Mike Kleinc0bd9f92019-04-23 12:05:21 -050014#include "include/core/SkImage.h"
15#include "include/core/SkImageEncoder.h"
Ben Wagner7fde8e12019-05-01 17:28:53 -040016#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>
Brian Osmanb433c562017-09-12 16:04:28 -040022
23namespace skiagm {
24
25class ColorCubeGM : public GM {
26public:
27 ColorCubeGM() {}
28
29protected:
30 SkString onShortName() override {
31 return SkString("jpg-color-cube");
32 }
33
34 SkISize onISize() override {
35 return SkISize::Make(512, 512);
36 }
37
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 }
Leon Scroggins III0098ccb2018-09-24 15:24:31 -040057 auto jpegData = SkEncodeBitmap(bmp, SkEncodedImageFormat::kJPEG, 100);
58 fImage = SkImage::MakeFromEncoded(std::move(jpegData));
Brian Osmanb433c562017-09-12 16:04:28 -040059 }
60
61 void onDraw(SkCanvas* canvas) override {
62 canvas->drawImage(fImage, 0, 0);
63 }
64
65private:
66 sk_sp<SkImage> fImage;
67
68 typedef GM INHERITED;
69};
70
71DEF_GM( return new ColorCubeGM; )
72}