blob: 4c879003943c52e1ca7baf6bb29319f805486b3e [file] [log] [blame]
msarettbe36d592016-06-13 11:25:03 -07001/*
2 * Copyright 2016 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
Mike Kleinc0bd9f92019-04-23 12:05:21 -05008#include "gm/gm.h"
9#include "include/codec/SkCodec.h"
Ben Wagner6a34f3a2019-05-01 10:59:30 -040010#include "include/core/SkBitmap.h"
11#include "include/core/SkCanvas.h"
Mike Kleinc0bd9f92019-04-23 12:05:21 -050012#include "include/core/SkImage.h"
Ben Wagner6a34f3a2019-05-01 10:59:30 -040013#include "include/core/SkImageInfo.h"
14#include "include/core/SkRefCnt.h"
15#include "include/core/SkScalar.h"
16#include "include/core/SkSize.h"
17#include "include/core/SkStream.h"
18#include "include/core/SkString.h"
Kevin Lubick8b741882023-10-06 11:41:38 -040019#include "tools/DecodeUtils.h"
Mike Kleinc0bd9f92019-04-23 12:05:21 -050020#include "tools/Resources.h"
msarettbe36d592016-06-13 11:25:03 -070021
Ben Wagner6a34f3a2019-05-01 10:59:30 -040022#include <memory>
23
msarettbe36d592016-06-13 11:25:03 -070024namespace skiagm {
25
26class BitmapImageGM : public GM {
27public:
28 BitmapImageGM() {}
29
30protected:
Leandro Lovisolo24fa2112023-08-15 19:05:17 +000031 SkString getName() const override { return SkString("bitmap-image-srgb-legacy"); }
msarettbe36d592016-06-13 11:25:03 -070032
Leandro Lovisolo8f023882023-08-15 21:13:52 +000033 SkISize getISize() override { return SkISize::Make(2 * kSize, 2 * kSize); }
msarettbe36d592016-06-13 11:25:03 -070034
Chris Dalton50e24d72019-02-07 16:20:09 -070035 DrawResult onDraw(SkCanvas* canvas, SkString* errorMsg) override {
msarettbe36d592016-06-13 11:25:03 -070036 // Create image.
Hal Canaryc465d132017-12-08 10:21:31 -050037 const char* path = "images/mandrill_512_q075.jpg";
Kevin Lubick8b741882023-10-06 11:41:38 -040038 sk_sp<SkImage> image = ToolUtils::GetResourceAsImage(path);
msarettbe36d592016-06-13 11:25:03 -070039 if (!image) {
Chris Dalton50e24d72019-02-07 16:20:09 -070040 *errorMsg = "Couldn't load images/mandrill_512_q075.jpg. "
41 "Did you forget to set the resource path?";
42 return DrawResult::kFail;
msarettbe36d592016-06-13 11:25:03 -070043 }
44
45 // Create matching bitmap.
Mike Reedede7bac2017-07-23 15:30:02 -040046 std::unique_ptr<SkCodec> codec(SkCodec::MakeFromStream(GetResourceAsStream(path)));
Mike Reed844beb52021-01-25 15:36:09 -050047 auto [codecImage, _] = codec->getImage();
msarettbe36d592016-06-13 11:25:03 -070048
49 // The GM will be displayed in a 2x2 grid.
Matt Saretta9da22d2016-12-08 08:32:44 -050050 // The top two squares show an sRGB image, then bitmap, drawn to a legacy canvas.
msarettbe36d592016-06-13 11:25:03 -070051 SkImageInfo linearInfo = SkImageInfo::MakeN32(2*kSize, kSize, kOpaque_SkAlphaType);
Matt Saretta9da22d2016-12-08 08:32:44 -050052 SkBitmap legacyBMCanvas;
53 legacyBMCanvas.allocPixels(linearInfo);
54 SkCanvas legacyCanvas(legacyBMCanvas);
Mike Reed07c5f522021-01-23 12:23:23 -050055 legacyCanvas.drawImage(image, 0.0f, 0.0f);
Matt Saretta9da22d2016-12-08 08:32:44 -050056 legacyCanvas.translate(SkScalar(kSize), 0.0f);
Mike Reed844beb52021-01-25 15:36:09 -050057 legacyCanvas.drawImage(codecImage, 0.0f, 0.0f);
Mike Reed568f0ae2021-01-24 08:57:23 -050058 canvas->drawImage(legacyBMCanvas.asImage(), 0.0f, 0.0f);
msarettbe36d592016-06-13 11:25:03 -070059 canvas->translate(0.0f, SkScalar(kSize));
60
61 // The bottom two squares show an sRGB image, then bitmap, drawn to a srgb canvas.
62 SkImageInfo srgbInfo = SkImageInfo::MakeS32(2*kSize, kSize, kOpaque_SkAlphaType);
63 SkBitmap srgbBMCanvas;
64 srgbBMCanvas.allocPixels(srgbInfo);
65 SkCanvas srgbCanvas(srgbBMCanvas);
Mike Reed07c5f522021-01-23 12:23:23 -050066 srgbCanvas.drawImage(image, 0.0f, 0.0f);
msarettbe36d592016-06-13 11:25:03 -070067 srgbCanvas.translate(SkScalar(kSize), 0.0f);
Mike Reed844beb52021-01-25 15:36:09 -050068 srgbCanvas.drawImage(codecImage, 0.0f, 0.0f);
Mike Reed568f0ae2021-01-24 08:57:23 -050069 canvas->drawImage(srgbBMCanvas.asImage(), 0.0f, 0.0f);
Chris Dalton50e24d72019-02-07 16:20:09 -070070 return DrawResult::kOk;
msarettbe36d592016-06-13 11:25:03 -070071 }
72
73private:
Brian Salomon9fa47cc2021-10-08 18:48:26 -040074 inline static constexpr int kSize = 512;
msarettbe36d592016-06-13 11:25:03 -070075
John Stiles7571f9e2020-09-02 22:42:33 -040076 using INHERITED = GM;
msarettbe36d592016-06-13 11:25:03 -070077};
78
79//////////////////////////////////////////////////////////////////////////////
80
Hal Canarye964c182019-01-23 10:22:01 -050081DEF_GM( return new BitmapImageGM; )
msarettbe36d592016-06-13 11:25:03 -070082
John Stilesa6841be2020-08-06 14:11:56 -040083} // namespace skiagm