xref: /aosp_15_r20/external/skia/include/private/SkEncodedInfo.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker /*
2*c8dee2aaSAndroid Build Coastguard Worker  * Copyright 2016 Google Inc.
3*c8dee2aaSAndroid Build Coastguard Worker  *
4*c8dee2aaSAndroid Build Coastguard Worker  * Use of this source code is governed by a BSD-style license that can be
5*c8dee2aaSAndroid Build Coastguard Worker  * found in the LICENSE file.
6*c8dee2aaSAndroid Build Coastguard Worker  */
7*c8dee2aaSAndroid Build Coastguard Worker 
8*c8dee2aaSAndroid Build Coastguard Worker #ifndef SkEncodedInfo_DEFINED
9*c8dee2aaSAndroid Build Coastguard Worker #define SkEncodedInfo_DEFINED
10*c8dee2aaSAndroid Build Coastguard Worker 
11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkAlphaType.h"
12*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkColorSpace.h"
13*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkColorType.h"
14*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkData.h"
15*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkImageInfo.h"
16*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRefCnt.h"
17*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkTypes.h"
18*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkTo.h"
19*c8dee2aaSAndroid Build Coastguard Worker #include "modules/skcms/skcms.h"
20*c8dee2aaSAndroid Build Coastguard Worker 
21*c8dee2aaSAndroid Build Coastguard Worker #include <cstdint>
22*c8dee2aaSAndroid Build Coastguard Worker #include <memory>
23*c8dee2aaSAndroid Build Coastguard Worker #include <utility>
24*c8dee2aaSAndroid Build Coastguard Worker 
25*c8dee2aaSAndroid Build Coastguard Worker struct SkEncodedInfo {
26*c8dee2aaSAndroid Build Coastguard Worker public:
27*c8dee2aaSAndroid Build Coastguard Worker     class ICCProfile {
28*c8dee2aaSAndroid Build Coastguard Worker     public:
29*c8dee2aaSAndroid Build Coastguard Worker         static std::unique_ptr<ICCProfile> Make(sk_sp<SkData>);
30*c8dee2aaSAndroid Build Coastguard Worker         static std::unique_ptr<ICCProfile> Make(const skcms_ICCProfile&);
31*c8dee2aaSAndroid Build Coastguard Worker 
profileSkEncodedInfo32*c8dee2aaSAndroid Build Coastguard Worker         const skcms_ICCProfile* profile() const { return &fProfile; }
dataSkEncodedInfo33*c8dee2aaSAndroid Build Coastguard Worker         sk_sp<SkData> data() const { return fData; }
34*c8dee2aaSAndroid Build Coastguard Worker     private:
35*c8dee2aaSAndroid Build Coastguard Worker         ICCProfile(const skcms_ICCProfile&, sk_sp<SkData> = nullptr);
36*c8dee2aaSAndroid Build Coastguard Worker 
37*c8dee2aaSAndroid Build Coastguard Worker         skcms_ICCProfile fProfile;
38*c8dee2aaSAndroid Build Coastguard Worker         sk_sp<SkData>    fData;
39*c8dee2aaSAndroid Build Coastguard Worker     };
40*c8dee2aaSAndroid Build Coastguard Worker 
41*c8dee2aaSAndroid Build Coastguard Worker     enum Alpha {
42*c8dee2aaSAndroid Build Coastguard Worker         kOpaque_Alpha,
43*c8dee2aaSAndroid Build Coastguard Worker         kUnpremul_Alpha,
44*c8dee2aaSAndroid Build Coastguard Worker 
45*c8dee2aaSAndroid Build Coastguard Worker         // Each pixel is either fully opaque or fully transparent.
46*c8dee2aaSAndroid Build Coastguard Worker         // There is no difference between requesting kPremul or kUnpremul.
47*c8dee2aaSAndroid Build Coastguard Worker         kBinary_Alpha,
48*c8dee2aaSAndroid Build Coastguard Worker     };
49*c8dee2aaSAndroid Build Coastguard Worker 
50*c8dee2aaSAndroid Build Coastguard Worker     /*
51*c8dee2aaSAndroid Build Coastguard Worker      * We strive to make the number of components per pixel obvious through
52*c8dee2aaSAndroid Build Coastguard Worker      * our naming conventions.
53*c8dee2aaSAndroid Build Coastguard Worker      * Ex: kRGB has 3 components.  kRGBA has 4 components.
54*c8dee2aaSAndroid Build Coastguard Worker      *
55*c8dee2aaSAndroid Build Coastguard Worker      * This sometimes results in redundant Alpha and Color information.
56*c8dee2aaSAndroid Build Coastguard Worker      * Ex: kRGB images must also be kOpaque.
57*c8dee2aaSAndroid Build Coastguard Worker      */
58*c8dee2aaSAndroid Build Coastguard Worker     enum Color {
59*c8dee2aaSAndroid Build Coastguard Worker         // PNG, WBMP
60*c8dee2aaSAndroid Build Coastguard Worker         kGray_Color,
61*c8dee2aaSAndroid Build Coastguard Worker 
62*c8dee2aaSAndroid Build Coastguard Worker         // PNG
63*c8dee2aaSAndroid Build Coastguard Worker         kGrayAlpha_Color,
64*c8dee2aaSAndroid Build Coastguard Worker 
65*c8dee2aaSAndroid Build Coastguard Worker         // PNG with Skia-specific sBIT
66*c8dee2aaSAndroid Build Coastguard Worker         // Like kGrayAlpha, except this expects to be treated as
67*c8dee2aaSAndroid Build Coastguard Worker         // kAlpha_8_SkColorType, which ignores the gray component. If
68*c8dee2aaSAndroid Build Coastguard Worker         // decoded to full color (e.g. kN32), the gray component is respected
69*c8dee2aaSAndroid Build Coastguard Worker         // (so it can share code with kGrayAlpha).
70*c8dee2aaSAndroid Build Coastguard Worker         kXAlpha_Color,
71*c8dee2aaSAndroid Build Coastguard Worker 
72*c8dee2aaSAndroid Build Coastguard Worker         // PNG
73*c8dee2aaSAndroid Build Coastguard Worker         // 565 images may be encoded to PNG by specifying the number of
74*c8dee2aaSAndroid Build Coastguard Worker         // significant bits for each channel.  This is a strange 565
75*c8dee2aaSAndroid Build Coastguard Worker         // representation because the image is still encoded with 8 bits per
76*c8dee2aaSAndroid Build Coastguard Worker         // component.
77*c8dee2aaSAndroid Build Coastguard Worker         k565_Color,
78*c8dee2aaSAndroid Build Coastguard Worker 
79*c8dee2aaSAndroid Build Coastguard Worker         // PNG, GIF, BMP
80*c8dee2aaSAndroid Build Coastguard Worker         kPalette_Color,
81*c8dee2aaSAndroid Build Coastguard Worker 
82*c8dee2aaSAndroid Build Coastguard Worker         // PNG, RAW
83*c8dee2aaSAndroid Build Coastguard Worker         kRGB_Color,
84*c8dee2aaSAndroid Build Coastguard Worker         kRGBA_Color,
85*c8dee2aaSAndroid Build Coastguard Worker 
86*c8dee2aaSAndroid Build Coastguard Worker         // BMP
87*c8dee2aaSAndroid Build Coastguard Worker         kBGR_Color,
88*c8dee2aaSAndroid Build Coastguard Worker         kBGRX_Color,
89*c8dee2aaSAndroid Build Coastguard Worker         kBGRA_Color,
90*c8dee2aaSAndroid Build Coastguard Worker 
91*c8dee2aaSAndroid Build Coastguard Worker         // JPEG, WEBP
92*c8dee2aaSAndroid Build Coastguard Worker         kYUV_Color,
93*c8dee2aaSAndroid Build Coastguard Worker 
94*c8dee2aaSAndroid Build Coastguard Worker         // WEBP
95*c8dee2aaSAndroid Build Coastguard Worker         kYUVA_Color,
96*c8dee2aaSAndroid Build Coastguard Worker 
97*c8dee2aaSAndroid Build Coastguard Worker         // JPEG
98*c8dee2aaSAndroid Build Coastguard Worker         // Photoshop actually writes inverted CMYK data into JPEGs, where zero
99*c8dee2aaSAndroid Build Coastguard Worker         // represents 100% ink coverage.  For this reason, we treat CMYK JPEGs
100*c8dee2aaSAndroid Build Coastguard Worker         // as having inverted CMYK.  libjpeg-turbo warns that this may break
101*c8dee2aaSAndroid Build Coastguard Worker         // other applications, but the CMYK JPEGs we see on the web expect to
102*c8dee2aaSAndroid Build Coastguard Worker         // be treated as inverted CMYK.
103*c8dee2aaSAndroid Build Coastguard Worker         kInvertedCMYK_Color,
104*c8dee2aaSAndroid Build Coastguard Worker         kYCCK_Color,
105*c8dee2aaSAndroid Build Coastguard Worker     };
106*c8dee2aaSAndroid Build Coastguard Worker 
MakeSkEncodedInfo107*c8dee2aaSAndroid Build Coastguard Worker     static SkEncodedInfo Make(int width, int height, Color color, Alpha alpha,
108*c8dee2aaSAndroid Build Coastguard Worker             int bitsPerComponent) {
109*c8dee2aaSAndroid Build Coastguard Worker         return Make(width, height, color, alpha, bitsPerComponent, nullptr);
110*c8dee2aaSAndroid Build Coastguard Worker     }
111*c8dee2aaSAndroid Build Coastguard Worker 
MakeSkEncodedInfo112*c8dee2aaSAndroid Build Coastguard Worker     static SkEncodedInfo Make(int width, int height, Color color,
113*c8dee2aaSAndroid Build Coastguard Worker             Alpha alpha, int bitsPerComponent, std::unique_ptr<ICCProfile> profile) {
114*c8dee2aaSAndroid Build Coastguard Worker         return Make(width, height, color, alpha, /*bitsPerComponent*/ bitsPerComponent,
115*c8dee2aaSAndroid Build Coastguard Worker                 std::move(profile), /*colorDepth*/ bitsPerComponent);
116*c8dee2aaSAndroid Build Coastguard Worker     }
117*c8dee2aaSAndroid Build Coastguard Worker 
MakeSkEncodedInfo118*c8dee2aaSAndroid Build Coastguard Worker     static SkEncodedInfo Make(int width, int height, Color color,
119*c8dee2aaSAndroid Build Coastguard Worker             Alpha alpha, int bitsPerComponent, std::unique_ptr<ICCProfile> profile,
120*c8dee2aaSAndroid Build Coastguard Worker             int colorDepth) {
121*c8dee2aaSAndroid Build Coastguard Worker         SkASSERT(1 == bitsPerComponent ||
122*c8dee2aaSAndroid Build Coastguard Worker                  2 == bitsPerComponent ||
123*c8dee2aaSAndroid Build Coastguard Worker                  4 == bitsPerComponent ||
124*c8dee2aaSAndroid Build Coastguard Worker                  8 == bitsPerComponent ||
125*c8dee2aaSAndroid Build Coastguard Worker                  16 == bitsPerComponent);
126*c8dee2aaSAndroid Build Coastguard Worker 
127*c8dee2aaSAndroid Build Coastguard Worker         switch (color) {
128*c8dee2aaSAndroid Build Coastguard Worker             case kGray_Color:
129*c8dee2aaSAndroid Build Coastguard Worker                 SkASSERT(kOpaque_Alpha == alpha);
130*c8dee2aaSAndroid Build Coastguard Worker                 break;
131*c8dee2aaSAndroid Build Coastguard Worker             case kGrayAlpha_Color:
132*c8dee2aaSAndroid Build Coastguard Worker                 SkASSERT(kOpaque_Alpha != alpha);
133*c8dee2aaSAndroid Build Coastguard Worker                 break;
134*c8dee2aaSAndroid Build Coastguard Worker             case kPalette_Color:
135*c8dee2aaSAndroid Build Coastguard Worker                 SkASSERT(16 != bitsPerComponent);
136*c8dee2aaSAndroid Build Coastguard Worker                 break;
137*c8dee2aaSAndroid Build Coastguard Worker             case kRGB_Color:
138*c8dee2aaSAndroid Build Coastguard Worker             case kBGR_Color:
139*c8dee2aaSAndroid Build Coastguard Worker             case kBGRX_Color:
140*c8dee2aaSAndroid Build Coastguard Worker                 SkASSERT(kOpaque_Alpha == alpha);
141*c8dee2aaSAndroid Build Coastguard Worker                 SkASSERT(bitsPerComponent >= 8);
142*c8dee2aaSAndroid Build Coastguard Worker                 break;
143*c8dee2aaSAndroid Build Coastguard Worker             case kYUV_Color:
144*c8dee2aaSAndroid Build Coastguard Worker             case kInvertedCMYK_Color:
145*c8dee2aaSAndroid Build Coastguard Worker             case kYCCK_Color:
146*c8dee2aaSAndroid Build Coastguard Worker                 SkASSERT(kOpaque_Alpha == alpha);
147*c8dee2aaSAndroid Build Coastguard Worker                 SkASSERT(8 == bitsPerComponent);
148*c8dee2aaSAndroid Build Coastguard Worker                 break;
149*c8dee2aaSAndroid Build Coastguard Worker             case kRGBA_Color:
150*c8dee2aaSAndroid Build Coastguard Worker                 SkASSERT(bitsPerComponent >= 8);
151*c8dee2aaSAndroid Build Coastguard Worker                 break;
152*c8dee2aaSAndroid Build Coastguard Worker             case kBGRA_Color:
153*c8dee2aaSAndroid Build Coastguard Worker             case kYUVA_Color:
154*c8dee2aaSAndroid Build Coastguard Worker                 SkASSERT(8 == bitsPerComponent);
155*c8dee2aaSAndroid Build Coastguard Worker                 break;
156*c8dee2aaSAndroid Build Coastguard Worker             case kXAlpha_Color:
157*c8dee2aaSAndroid Build Coastguard Worker                 SkASSERT(kUnpremul_Alpha == alpha);
158*c8dee2aaSAndroid Build Coastguard Worker                 SkASSERT(8 == bitsPerComponent);
159*c8dee2aaSAndroid Build Coastguard Worker                 break;
160*c8dee2aaSAndroid Build Coastguard Worker             case k565_Color:
161*c8dee2aaSAndroid Build Coastguard Worker                 SkASSERT(kOpaque_Alpha == alpha);
162*c8dee2aaSAndroid Build Coastguard Worker                 SkASSERT(8 == bitsPerComponent);
163*c8dee2aaSAndroid Build Coastguard Worker                 break;
164*c8dee2aaSAndroid Build Coastguard Worker             default:
165*c8dee2aaSAndroid Build Coastguard Worker                 SkASSERT(false);
166*c8dee2aaSAndroid Build Coastguard Worker                 break;
167*c8dee2aaSAndroid Build Coastguard Worker         }
168*c8dee2aaSAndroid Build Coastguard Worker 
169*c8dee2aaSAndroid Build Coastguard Worker         return SkEncodedInfo(width,
170*c8dee2aaSAndroid Build Coastguard Worker                              height,
171*c8dee2aaSAndroid Build Coastguard Worker                              color,
172*c8dee2aaSAndroid Build Coastguard Worker                              alpha,
173*c8dee2aaSAndroid Build Coastguard Worker                              SkToU8(bitsPerComponent),
174*c8dee2aaSAndroid Build Coastguard Worker                              SkToU8(colorDepth),
175*c8dee2aaSAndroid Build Coastguard Worker                              std::move(profile));
176*c8dee2aaSAndroid Build Coastguard Worker     }
177*c8dee2aaSAndroid Build Coastguard Worker 
178*c8dee2aaSAndroid Build Coastguard Worker     /*
179*c8dee2aaSAndroid Build Coastguard Worker      * Returns a recommended SkImageInfo.
180*c8dee2aaSAndroid Build Coastguard Worker      *
181*c8dee2aaSAndroid Build Coastguard Worker      * TODO: Leave this up to the client.
182*c8dee2aaSAndroid Build Coastguard Worker      */
makeImageInfoSkEncodedInfo183*c8dee2aaSAndroid Build Coastguard Worker     SkImageInfo makeImageInfo() const {
184*c8dee2aaSAndroid Build Coastguard Worker         auto ct =  kGray_Color == fColor ? kGray_8_SkColorType   :
185*c8dee2aaSAndroid Build Coastguard Worker                  kXAlpha_Color == fColor ? kAlpha_8_SkColorType  :
186*c8dee2aaSAndroid Build Coastguard Worker                     k565_Color == fColor ? kRGB_565_SkColorType  :
187*c8dee2aaSAndroid Build Coastguard Worker                                            kN32_SkColorType      ;
188*c8dee2aaSAndroid Build Coastguard Worker         auto alpha = kOpaque_Alpha == fAlpha ? kOpaque_SkAlphaType
189*c8dee2aaSAndroid Build Coastguard Worker                                              : kUnpremul_SkAlphaType;
190*c8dee2aaSAndroid Build Coastguard Worker         sk_sp<SkColorSpace> cs = fProfile ? SkColorSpace::Make(*fProfile->profile())
191*c8dee2aaSAndroid Build Coastguard Worker                                           : nullptr;
192*c8dee2aaSAndroid Build Coastguard Worker         if (!cs) {
193*c8dee2aaSAndroid Build Coastguard Worker             cs = SkColorSpace::MakeSRGB();
194*c8dee2aaSAndroid Build Coastguard Worker         }
195*c8dee2aaSAndroid Build Coastguard Worker         return SkImageInfo::Make(fWidth, fHeight, ct, alpha, std::move(cs));
196*c8dee2aaSAndroid Build Coastguard Worker     }
197*c8dee2aaSAndroid Build Coastguard Worker 
widthSkEncodedInfo198*c8dee2aaSAndroid Build Coastguard Worker     int   width() const { return fWidth;  }
heightSkEncodedInfo199*c8dee2aaSAndroid Build Coastguard Worker     int  height() const { return fHeight; }
colorSkEncodedInfo200*c8dee2aaSAndroid Build Coastguard Worker     Color color() const { return fColor;  }
alphaSkEncodedInfo201*c8dee2aaSAndroid Build Coastguard Worker     Alpha alpha() const { return fAlpha;  }
opaqueSkEncodedInfo202*c8dee2aaSAndroid Build Coastguard Worker     bool opaque() const { return fAlpha == kOpaque_Alpha; }
profileSkEncodedInfo203*c8dee2aaSAndroid Build Coastguard Worker     const skcms_ICCProfile* profile() const {
204*c8dee2aaSAndroid Build Coastguard Worker         if (!fProfile) return nullptr;
205*c8dee2aaSAndroid Build Coastguard Worker         return fProfile->profile();
206*c8dee2aaSAndroid Build Coastguard Worker     }
profileDataSkEncodedInfo207*c8dee2aaSAndroid Build Coastguard Worker     sk_sp<SkData> profileData() const {
208*c8dee2aaSAndroid Build Coastguard Worker         if (!fProfile) return nullptr;
209*c8dee2aaSAndroid Build Coastguard Worker         return fProfile->data();
210*c8dee2aaSAndroid Build Coastguard Worker     }
211*c8dee2aaSAndroid Build Coastguard Worker 
bitsPerComponentSkEncodedInfo212*c8dee2aaSAndroid Build Coastguard Worker     uint8_t bitsPerComponent() const { return fBitsPerComponent; }
213*c8dee2aaSAndroid Build Coastguard Worker 
bitsPerPixelSkEncodedInfo214*c8dee2aaSAndroid Build Coastguard Worker     uint8_t bitsPerPixel() const {
215*c8dee2aaSAndroid Build Coastguard Worker         switch (fColor) {
216*c8dee2aaSAndroid Build Coastguard Worker             case kGray_Color:
217*c8dee2aaSAndroid Build Coastguard Worker                 return fBitsPerComponent;
218*c8dee2aaSAndroid Build Coastguard Worker             case kXAlpha_Color:
219*c8dee2aaSAndroid Build Coastguard Worker             case kGrayAlpha_Color:
220*c8dee2aaSAndroid Build Coastguard Worker                 return 2 * fBitsPerComponent;
221*c8dee2aaSAndroid Build Coastguard Worker             case kPalette_Color:
222*c8dee2aaSAndroid Build Coastguard Worker                 return fBitsPerComponent;
223*c8dee2aaSAndroid Build Coastguard Worker             case kRGB_Color:
224*c8dee2aaSAndroid Build Coastguard Worker             case kBGR_Color:
225*c8dee2aaSAndroid Build Coastguard Worker             case kYUV_Color:
226*c8dee2aaSAndroid Build Coastguard Worker             case k565_Color:
227*c8dee2aaSAndroid Build Coastguard Worker                 return 3 * fBitsPerComponent;
228*c8dee2aaSAndroid Build Coastguard Worker             case kRGBA_Color:
229*c8dee2aaSAndroid Build Coastguard Worker             case kBGRA_Color:
230*c8dee2aaSAndroid Build Coastguard Worker             case kBGRX_Color:
231*c8dee2aaSAndroid Build Coastguard Worker             case kYUVA_Color:
232*c8dee2aaSAndroid Build Coastguard Worker             case kInvertedCMYK_Color:
233*c8dee2aaSAndroid Build Coastguard Worker             case kYCCK_Color:
234*c8dee2aaSAndroid Build Coastguard Worker                 return 4 * fBitsPerComponent;
235*c8dee2aaSAndroid Build Coastguard Worker             default:
236*c8dee2aaSAndroid Build Coastguard Worker                 SkASSERT(false);
237*c8dee2aaSAndroid Build Coastguard Worker                 return 0;
238*c8dee2aaSAndroid Build Coastguard Worker         }
239*c8dee2aaSAndroid Build Coastguard Worker     }
240*c8dee2aaSAndroid Build Coastguard Worker 
241*c8dee2aaSAndroid Build Coastguard Worker     SkEncodedInfo(const SkEncodedInfo& orig) = delete;
242*c8dee2aaSAndroid Build Coastguard Worker     SkEncodedInfo& operator=(const SkEncodedInfo&) = delete;
243*c8dee2aaSAndroid Build Coastguard Worker 
244*c8dee2aaSAndroid Build Coastguard Worker     SkEncodedInfo(SkEncodedInfo&& orig) = default;
245*c8dee2aaSAndroid Build Coastguard Worker     SkEncodedInfo& operator=(SkEncodedInfo&&) = default;
246*c8dee2aaSAndroid Build Coastguard Worker 
247*c8dee2aaSAndroid Build Coastguard Worker     // Explicit copy method, to avoid accidental copying.
copySkEncodedInfo248*c8dee2aaSAndroid Build Coastguard Worker     SkEncodedInfo copy() const {
249*c8dee2aaSAndroid Build Coastguard Worker         auto copy = SkEncodedInfo::Make(
250*c8dee2aaSAndroid Build Coastguard Worker                 fWidth, fHeight, fColor, fAlpha, fBitsPerComponent, nullptr, fColorDepth);
251*c8dee2aaSAndroid Build Coastguard Worker         if (fProfile) {
252*c8dee2aaSAndroid Build Coastguard Worker             copy.fProfile = std::make_unique<ICCProfile>(*fProfile);
253*c8dee2aaSAndroid Build Coastguard Worker         }
254*c8dee2aaSAndroid Build Coastguard Worker         return copy;
255*c8dee2aaSAndroid Build Coastguard Worker     }
256*c8dee2aaSAndroid Build Coastguard Worker 
257*c8dee2aaSAndroid Build Coastguard Worker     // Return number of bits of R/G/B channel
getColorDepthSkEncodedInfo258*c8dee2aaSAndroid Build Coastguard Worker     uint8_t getColorDepth() const {
259*c8dee2aaSAndroid Build Coastguard Worker         return fColorDepth;
260*c8dee2aaSAndroid Build Coastguard Worker     }
261*c8dee2aaSAndroid Build Coastguard Worker 
262*c8dee2aaSAndroid Build Coastguard Worker private:
SkEncodedInfoSkEncodedInfo263*c8dee2aaSAndroid Build Coastguard Worker     SkEncodedInfo(int width, int height, Color color, Alpha alpha,
264*c8dee2aaSAndroid Build Coastguard Worker             uint8_t bitsPerComponent, uint8_t colorDepth, std::unique_ptr<ICCProfile> profile)
265*c8dee2aaSAndroid Build Coastguard Worker         : fWidth(width)
266*c8dee2aaSAndroid Build Coastguard Worker         , fHeight(height)
267*c8dee2aaSAndroid Build Coastguard Worker         , fColor(color)
268*c8dee2aaSAndroid Build Coastguard Worker         , fAlpha(alpha)
269*c8dee2aaSAndroid Build Coastguard Worker         , fBitsPerComponent(bitsPerComponent)
270*c8dee2aaSAndroid Build Coastguard Worker         , fColorDepth(colorDepth)
271*c8dee2aaSAndroid Build Coastguard Worker         , fProfile(std::move(profile))
272*c8dee2aaSAndroid Build Coastguard Worker     {}
273*c8dee2aaSAndroid Build Coastguard Worker 
274*c8dee2aaSAndroid Build Coastguard Worker     int                         fWidth;
275*c8dee2aaSAndroid Build Coastguard Worker     int                         fHeight;
276*c8dee2aaSAndroid Build Coastguard Worker     Color                       fColor;
277*c8dee2aaSAndroid Build Coastguard Worker     Alpha                       fAlpha;
278*c8dee2aaSAndroid Build Coastguard Worker     uint8_t                     fBitsPerComponent;
279*c8dee2aaSAndroid Build Coastguard Worker     uint8_t                     fColorDepth;
280*c8dee2aaSAndroid Build Coastguard Worker     std::unique_ptr<ICCProfile> fProfile;
281*c8dee2aaSAndroid Build Coastguard Worker };
282*c8dee2aaSAndroid Build Coastguard Worker 
283*c8dee2aaSAndroid Build Coastguard Worker #endif
284