Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(13)

Side by Side Diff: include/codec/SkEncodedInfo.h

Issue 1820073002: Add SkEncodedInfo to report properties of encoded image data (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Order of param eval bug Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « include/codec/SkCodec.h ('k') | src/codec/SkBmpCodec.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /*
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
8 #ifndef SkEncodedInfo_DEFINED
9 #define SkEncodedInfo_DEFINED
10
11 #include "SkImageInfo.h"
12
13 struct SkEncodedInfo {
14 public:
15
16 enum Alpha {
17 kOpaque_Alpha,
18 kUnpremul_Alpha,
19
20 // Each pixel is either fully opaque or fully transparent.
21 // There is no difference between requesting kPremul or kUnpremul.
22 kBinary_Alpha,
23
24 // Allows us to have a default constructor. Should be treated as
25 // invalid.
26 kUnknown_Alpha,
27 };
28
29 /*
30 * We strive to make the number of components per pixel obvious through
31 * our naming conventions.
32 * Ex: kRGB has 3 components. kRGBA has 4 components.
33 *
34 * This sometimes results in redundant Alpha and Color information.
35 * Ex: kRGB images must also be kOpaque.
36 */
37 enum Color {
38 // PNG, WBMP
39 kGray_Color,
40
41 // PNG
42 kGrayAlpha_Color,
43
44 // PNG, GIF, BMP
45 kPalette_Color,
46
47 // PNG, RAW
48 kRGB_Color,
49 kRGBA_Color,
50
51 // BMP
52 kBGR_Color,
53 kBGRX_Color,
54 kBGRA_Color,
55
56 // JPEG, WEBP
57 kYUV_Color,
58
59 // WEBP
60 kYUVA_Color,
61
62 // JPEG
63 // Photoshop actually writes inverted CMYK data into JPEGs, where zero
64 // represents 100% ink coverage. For this reason, we treat CMYK JPEGs
65 // as having inverted CMYK. libjpeg-turbo warns that this may break
66 // other applications, but the CMYK JPEGs we see on the web expect to
67 // be treated as inverted CMYK.
68 kInvertedCMYK_Color,
69 kYCCK_Color,
70
71 // Allows us to have a default constructor. Should be treated as
72 // invalid.
73 kUnknown_Color,
74 };
75
76 static SkEncodedInfo Make(Color color, Alpha alpha, int bitsPerComponent) {
77 SkASSERT(1 == bitsPerComponent ||
78 2 == bitsPerComponent ||
79 4 == bitsPerComponent ||
80 8 == bitsPerComponent ||
81 16 == bitsPerComponent);
82
83 switch (color) {
84 case kGray_Color:
85 SkASSERT(kOpaque_Alpha == alpha);
86 break;
87 case kGrayAlpha_Color:
88 SkASSERT(kOpaque_Alpha != alpha);
89 break;
90 case kPalette_Color:
91 SkASSERT(16 != bitsPerComponent);
92 break;
93 case kRGB_Color:
94 case kBGR_Color:
95 case kBGRX_Color:
96 SkASSERT(kOpaque_Alpha == alpha);
97 SkASSERT(bitsPerComponent >= 8);
98 break;
99 case kYUV_Color:
100 case kInvertedCMYK_Color:
101 case kYCCK_Color:
102 SkASSERT(kOpaque_Alpha == alpha);
103 SkASSERT(8 == bitsPerComponent);
104 break;
105 case kRGBA_Color:
106 SkASSERT(kOpaque_Alpha != alpha);
107 SkASSERT(bitsPerComponent >= 8);
108 break;
109 case kBGRA_Color:
110 case kYUVA_Color:
111 SkASSERT(kOpaque_Alpha != alpha);
112 SkASSERT(8 == bitsPerComponent);
113 break;
114 default:
115 SkASSERT(false);
116 break;
117 }
118
119 return SkEncodedInfo(color, alpha, bitsPerComponent);
120 }
121
122 /*
123 * Returns an SkImageInfo with Skia color and alpha types that are the
124 * closest possible match to the encoded info.
125 */
126 SkImageInfo makeImageInfo(int width, int height) const {
127 switch (fColor) {
128 case kGray_Color:
129 SkASSERT(kOpaque_Alpha == fAlpha);
130 return SkImageInfo::Make(width, height, kGray_8_SkColorType, kOp aque_SkAlphaType);
131 case kGrayAlpha_Color:
132 SkASSERT(kOpaque_Alpha != fAlpha);
133 return SkImageInfo::Make(width, height, kN32_SkColorType,
134 kUnpremul_SkAlphaType);
135 case kPalette_Color: {
136 SkAlphaType alphaType = (kOpaque_Alpha == fAlpha) ? kOpaque_SkAl phaType :
137 kUnpremul_SkAlphaType;
138 return SkImageInfo::Make(width, height, kIndex_8_SkColorType, al phaType);
139 }
140 case kRGB_Color:
141 case kBGR_Color:
142 case kBGRX_Color:
143 case kYUV_Color:
144 case kInvertedCMYK_Color:
145 case kYCCK_Color:
146 SkASSERT(kOpaque_Alpha == fAlpha);
147 return SkImageInfo::Make(width, height, kN32_SkColorType, kOpaqu e_SkAlphaType);
148 case kRGBA_Color:
149 case kBGRA_Color:
150 case kYUVA_Color:
151 SkASSERT(kOpaque_Alpha != fAlpha);
152 return SkImageInfo::Make(width, height, kN32_SkColorType, kUnpre mul_SkAlphaType);
153 default:
154 SkASSERT(false);
155 return SkImageInfo::MakeUnknown();
156 }
157 }
158
159 SkEncodedInfo()
160 : fColor(kUnknown_Color)
161 , fAlpha(kUnknown_Alpha)
162 , fBitsPerComponent(0)
163 {}
164
165 private:
166
167 SkEncodedInfo(Color color, Alpha alpha, uint8_t bitsPerComponent)
168 : fColor(color)
169 , fAlpha(alpha)
170 , fBitsPerComponent(bitsPerComponent)
171 {}
172
173 Color fColor;
174 Alpha fAlpha;
175 uint8_t fBitsPerComponent;
176 };
177
178 #endif
OLDNEW
« no previous file with comments | « include/codec/SkCodec.h ('k') | src/codec/SkBmpCodec.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698