blob: b0834283458abb38ff6759bd12ec680f275df9ec [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 */
7#include "gm.h"
8#include "sk_tool_utils.h"
9#include "SkCanvas.h"
Mike Reed5dd202d2018-02-06 23:05:36 +000010#include "SkColorPriv.h"
Brian Osmanb433c562017-09-12 16:04:28 -040011#include "SkData.h"
12#include "SkImage.h"
13#include "SkImageEncoder.h"
14
15namespace skiagm {
16
17class ColorCubeGM : public GM {
18public:
19 ColorCubeGM() {}
20
21protected:
22 SkString onShortName() override {
23 return SkString("jpg-color-cube");
24 }
25
26 SkISize onISize() override {
27 return SkISize::Make(512, 512);
28 }
29
30 void onOnceBeforeDraw() override {
31 SkBitmap bmp;
32 bmp.allocN32Pixels(512, 512, true);
33 int bX = 0, bY = 0;
34 for (int b = 0; b < 64; ++b) {
35 for (int r = 0; r < 64; ++r) {
36 for (int g = 0; g < 64; ++g) {
37 *bmp.getAddr32(bX + r, bY + g) = SkPackARGB32(255,
38 SkTPin(r * 4, 0, 255),
39 SkTPin(g * 4, 0, 255),
40 SkTPin(b * 4, 0, 255));
41 }
42 }
43 bX += 64;
44 if (bX >= 512) {
45 bX = 0;
46 bY += 64;
47 }
48 }
49 auto jpegData(sk_tool_utils::EncodeImageToData(bmp, SkEncodedImageFormat::kJPEG, 100));
50 fImage = SkImage::MakeFromEncoded(jpegData);
51 }
52
53 void onDraw(SkCanvas* canvas) override {
54 canvas->drawImage(fImage, 0, 0);
55 }
56
57private:
58 sk_sp<SkImage> fImage;
59
60 typedef GM INHERITED;
61};
62
63DEF_GM( return new ColorCubeGM; )
64}