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