blob: 5a3359f20e3c3996b8d76d35e4b3e4ee9193bd6a [file] [log] [blame]
msarett36c38cb2016-08-15 18:52:17 -07001/*
2 * Copyright 2011 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 */
Hal Canarya70ae1a2019-01-08 15:04:23 -05007
Ben Wagner7fde8e12019-05-01 17:28:53 -04008#include "gm/gm.h"
Kevin Lubickf48d2b02023-04-11 18:37:34 -04009
Ben Wagner7fde8e12019-05-01 17:28:53 -040010#include "include/core/SkBitmap.h"
Mike Kleinc0bd9f92019-04-23 12:05:21 -050011#include "include/core/SkCanvas.h"
12#include "include/core/SkData.h"
13#include "include/core/SkFont.h"
14#include "include/core/SkImage.h"
Ben Wagner7fde8e12019-05-01 17:28:53 -040015#include "include/core/SkPaint.h"
16#include "include/core/SkRefCnt.h"
17#include "include/core/SkSize.h"
Kevin Lubickf48d2b02023-04-11 18:37:34 -040018#include "include/core/SkStream.h"
Ben Wagner7fde8e12019-05-01 17:28:53 -040019#include "include/core/SkString.h"
Kevin Lubickf48d2b02023-04-11 18:37:34 -040020#include "include/encode/SkJpegEncoder.h"
21#include "include/encode/SkPngEncoder.h"
Kevin Lubick8b741882023-10-06 11:41:38 -040022#include "tools/DecodeUtils.h"
Mike Kleinc0bd9f92019-04-23 12:05:21 -050023#include "tools/Resources.h"
Kevin Lubickbca43ec2023-10-30 10:11:22 -040024#include "tools/fonts/FontToolUtils.h"
msarett36c38cb2016-08-15 18:52:17 -070025
26namespace skiagm {
27
28class EncodeGM : public GM {
29public:
30 EncodeGM() {}
31
32protected:
Leandro Lovisolo24fa2112023-08-15 19:05:17 +000033 SkString getName() const override { return SkString("encode"); }
msarett36c38cb2016-08-15 18:52:17 -070034
Leandro Lovisolo8f023882023-08-15 21:13:52 +000035 SkISize getISize() override { return SkISize::Make(1024, 600); }
msarett36c38cb2016-08-15 18:52:17 -070036
37 void onDraw(SkCanvas* canvas) override {
38 SkBitmap orig;
Kevin Lubick8b741882023-10-06 11:41:38 -040039 ToolUtils::GetResourceAsBitmap("images/mandrill_512_q075.jpg", &orig);
Kevin Lubickf48d2b02023-04-11 18:37:34 -040040 SkDynamicMemoryWStream stream;
41 SkASSERT_RELEASE(SkPngEncoder::Encode(&stream, orig.pixmap(), {}));
42 sk_sp<SkData> pngData = stream.detachAsData();
43 stream.reset();
44
45 SkASSERT_RELEASE(SkJpegEncoder::Encode(&stream, orig.pixmap(), {}));
46 sk_sp<SkData> jpgData = stream.detachAsData();
msarett36c38cb2016-08-15 18:52:17 -070047
Kevin Lubick77472bf2023-03-24 07:11:17 -040048 sk_sp<SkImage> pngImage = SkImages::DeferredFromEncodedData(pngData);
49 sk_sp<SkImage> jpgImage = SkImages::DeferredFromEncodedData(jpgData);
msarett36c38cb2016-08-15 18:52:17 -070050 canvas->drawImage(pngImage.get(), 0.0f, 0.0f);
Leon Scroggins III0098ccb2018-09-24 15:24:31 -040051 canvas->drawImage(jpgImage.get(), 512.0f, 0.0f);
msarett36c38cb2016-08-15 18:52:17 -070052
Kevin Lubickbca43ec2023-10-30 10:11:22 -040053 SkFont font = ToolUtils::DefaultPortableFont();
Hal Canarya70ae1a2019-01-08 15:04:23 -050054 font.setEdging(SkFont::Edging::kAlias);
55 canvas->drawString("Images should look identical.", 450.0f, 550.0f, font, SkPaint());
msarett36c38cb2016-08-15 18:52:17 -070056 }
57
58private:
John Stiles7571f9e2020-09-02 22:42:33 -040059 using INHERITED = GM;
msarett36c38cb2016-08-15 18:52:17 -070060};
61
62DEF_GM( return new EncodeGM; )
John Stilesa6841be2020-08-06 14:11:56 -040063} // namespace skiagm
Mike Reed43798692017-10-17 18:04:32 +000064
65///////////
66
67#if 0
68DEF_SIMPLE_GM(jpeg_orientation, canvas, 1000, 1000) {
69 static sk_sp<SkImage> imgs[8];
70 if (!imgs[0]) {
71 for (int i = 0; i < 8; ++i) {
72 SkString path;
73 path.printf("/skia/orientation/Landscape_%d.jpg", i + 1);
74 auto stream = SkStream::MakeFromFile(path.c_str());
75 auto data = SkData::MakeFromStream(stream.get(), stream->getLength());
Kevin Lubick77472bf2023-03-24 07:11:17 -040076 imgs[i] = SkImages::DeferredFromEncodedData(data, nullptr);
Mike Reed43798692017-10-17 18:04:32 +000077 }
78 }
79 canvas->scale(0.25, 0.25);
80 for (int i = 0; i < 8; ++i) {
81 SkImage* img = imgs[i].get();
82 canvas->drawImage(img, 0, 0, nullptr);
83 canvas->translate(0, img->height());
84 if (i == 3) {
85 canvas->translate(img->width(), -4*img->height());
86 }
87 }
88}
89#endif