Flutter Engine
The Flutter Engine
SkPngEncoder.h
Go to the documentation of this file.
1/*
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
8#ifndef SkPngEncoder_DEFINED
9#define SkPngEncoder_DEFINED
10
14
15// TODO(kjlubick) update clients to directly include this
16#include "include/encode/SkEncoder.h" // IWYU pragma: keep
17
18#include <memory>
19
20class GrDirectContext;
21class SkData;
22class SkImage;
23class SkPixmap;
24class SkWStream;
25struct skcms_ICCProfile;
26
27namespace SkPngEncoder {
28
29enum class FilterFlag : int {
30 kZero = 0x00,
31 kNone = 0x08,
32 kSub = 0x10,
33 kUp = 0x20,
34 kAvg = 0x40,
35 kPaeth = 0x80,
36 kAll = kNone | kSub | kUp | kAvg | kPaeth,
37};
38
39inline FilterFlag operator|(FilterFlag x, FilterFlag y) { return (FilterFlag)((int)x | (int)y); }
40
41struct Options {
42 /**
43 * Selects which filtering strategies to use.
44 *
45 * If a single filter is chosen, libpng will use that filter for every row.
46 *
47 * If multiple filters are chosen, libpng will use a heuristic to guess which filter
48 * will encode smallest, then apply that filter. This happens on a per row basis,
49 * different rows can use different filters.
50 *
51 * Using a single filter (or less filters) is typically faster. Trying all of the
52 * filters may help minimize the output file size.
53 *
54 * Our default value matches libpng's default.
55 */
57
58 /**
59 * Must be in [0, 9] where 9 corresponds to maximal compression. This value is passed
60 * directly to zlib. 0 is a special case to skip zlib entirely, creating dramatically
61 * larger pngs.
62 *
63 * Our default value matches libpng's default.
64 */
65 int fZLibLevel = 6;
66
67 /**
68 * Represents comments in the tEXt ancillary chunk of the png.
69 * The 2i-th entry is the keyword for the i-th comment,
70 * and the (2i + 1)-th entry is the text for the i-th comment.
71 */
73
74 /**
75 * An optional ICC profile to override the default behavior.
76 *
77 * The default behavior is to generate an ICC profile using a primary matrix and
78 * analytic transfer function. If the color space of |src| cannot be represented
79 * in this way (e.g, it is HLG or PQ), then no profile will be embedded.
80 */
81 const skcms_ICCProfile* fICCProfile = nullptr;
82 const char* fICCProfileDescription = nullptr;
83};
84
85/**
86 * Encode the |src| pixels to the |dst| stream.
87 * |options| may be used to control the encoding behavior.
88 *
89 * Returns true on success. Returns false on an invalid or unsupported |src|.
90 */
91SK_API bool Encode(SkWStream* dst, const SkPixmap& src, const Options& options);
92
93/**
94* Encode the provided image and return the resulting bytes. If the image was created as
95* a texture-backed image on a GPU context, that |ctx| must be provided so the pixels
96* can be read before being encoded. For raster-backed images, |ctx| can be nullptr.
97* |options| may be used to control the encoding behavior.
98*
99* Returns nullptr if the pixels could not be read or encoding otherwise fails.
100*/
102
103/**
104 * Create a png encoder that will encode the |src| pixels to the |dst| stream.
105 * |options| may be used to control the encoding behavior.
106 *
107 * The primary use of this is incremental encoding of the pixels.
108 *
109 * |dst| is unowned but must remain valid for the lifetime of the object.
110 *
111 * This returns nullptr on an invalid or unsupported |src|.
112 */
113SK_API std::unique_ptr<SkEncoder> Make(SkWStream* dst, const SkPixmap& src, const Options& options);
114
115} // namespace SkPngEncoder
116
117#endif
const char * options
#define SK_API
Definition: SkAPI.h:35
Definition: SkData.h:25
@ kUp
Definition: embedder.h:973
double y
double x
SK_API bool Encode(SkWStream *dst, const SkPixmap &src, const Options &options)
SK_API std::unique_ptr< SkEncoder > Make(SkWStream *dst, const SkPixmap &src, const Options &options)
FilterFlag operator|(FilterFlag x, FilterFlag y)
Definition: SkPngEncoder.h:39
dst
Definition: cp.py:12
sk_sp< SkDataTable > fComments
Definition: SkPngEncoder.h:72
const char * fICCProfileDescription
Definition: SkPngEncoder.h:82
const skcms_ICCProfile * fICCProfile
Definition: SkPngEncoder.h:81
FilterFlag fFilterFlags
Definition: SkPngEncoder.h:56