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

Side by Side Diff: include/core/SkImageInfo.h

Issue 517123002: Add gamma/sRGB tags to SkImageInfo (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years, 3 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 | « gyp/tests.gypi ('k') | src/core/SkImageInfo.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2013 Google Inc. 2 * Copyright 2013 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #ifndef SkImageInfo_DEFINED 8 #ifndef SkImageInfo_DEFINED
9 #define SkImageInfo_DEFINED 9 #define SkImageInfo_DEFINED
10 10
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 * alphaType for this colorType, return it in canonical. 128 * alphaType for this colorType, return it in canonical.
129 */ 129 */
130 bool SkColorTypeValidateAlphaType(SkColorType colorType, SkAlphaType alphaType, 130 bool SkColorTypeValidateAlphaType(SkColorType colorType, SkAlphaType alphaType,
131 SkAlphaType* canonical = NULL); 131 SkAlphaType* canonical = NULL);
132 132
133 /////////////////////////////////////////////////////////////////////////////// 133 ///////////////////////////////////////////////////////////////////////////////
134 134
135 /** 135 /**
136 * Describe an image's dimensions and pixel type. 136 * Describe an image's dimensions and pixel type.
137 */ 137 */
138 struct SkImageInfo { 138 struct SK_API SkImageInfo {
139 public:
140 SkImageInfo() {}
141
139 int fWidth; 142 int fWidth;
140 int fHeight; 143 int fHeight;
141 SkColorType fColorType; 144 SkColorType fColorType;
142 SkAlphaType fAlphaType; 145 SkAlphaType fAlphaType;
143 146
147 /*
148 * Return an info with the specified attributes, tagged as sRGB. Note that if the requested
149 * color type does not make sense with sRGB (e.g. kAlpha_8) then the sRGB r equest is ignored.
150 *
151 * You can call isSRGB() on the returned info to determine if the request w as fulfilled.
152 */
153 static SkImageInfo MakeSRGB(int width, int height, SkColorType ct, SkAlphaTy pe at);
154
155 /*
156 * Return an info with the specified attributes, tagged with a specific gam ma.
157 * Note that if the requested gamma is unsupported for the requested color type, then the gamma
158 * value will be set to 1.0 (the default).
159 *
160 * You can call gamma() to query the resulting gamma value.
161 */
162 static SkImageInfo MakeWithGamma(int width, int height, SkColorType ct, SkAl phaType at,
163 float gamma);
164
144 static SkImageInfo Make(int width, int height, SkColorType ct, SkAlphaType a t) { 165 static SkImageInfo Make(int width, int height, SkColorType ct, SkAlphaType a t) {
145 SkImageInfo info = { 166 return MakeWithGamma(width, height, ct, at, 1);
146 width, height, ct, at
147 };
148 return info;
149 } 167 }
150 168
151 /** 169 /**
152 * Sets colortype to the native ARGB32 type. 170 * Sets colortype to the native ARGB32 type.
153 */ 171 */
154 static SkImageInfo MakeN32(int width, int height, SkAlphaType at) { 172 static SkImageInfo MakeN32(int width, int height, SkAlphaType at) {
155 SkImageInfo info = { 173 return SkImageInfo(width, height, kN32_SkColorType, at, kExponential_Pro file, 1);
156 width, height, kN32_SkColorType, at
157 };
158 return info;
159 } 174 }
160 175
161 /** 176 /**
162 * Sets colortype to the native ARGB32 type, and the alphatype to premul. 177 * Sets colortype to the native ARGB32 type, and the alphatype to premul.
163 */ 178 */
164 static SkImageInfo MakeN32Premul(int width, int height) { 179 static SkImageInfo MakeN32Premul(int width, int height) {
165 SkImageInfo info = { 180 return SkImageInfo(width, height, kN32_SkColorType, kPremul_SkAlphaType,
166 width, height, kN32_SkColorType, kPremul_SkAlphaType 181 kExponential_Profile, 1);
167 };
168 return info;
169 } 182 }
170 183
171 /** 184 /**
172 * Sets colortype to the native ARGB32 type, and the alphatype to premul. 185 * Sets colortype to the native ARGB32 type, and the alphatype to premul.
173 */ 186 */
174 static SkImageInfo MakeN32Premul(const SkISize& size) { 187 static SkImageInfo MakeN32Premul(const SkISize& size) {
175 return MakeN32Premul(size.width(), size.height()); 188 return MakeN32Premul(size.width(), size.height());
176 } 189 }
177 190
178 static SkImageInfo MakeA8(int width, int height) { 191 static SkImageInfo MakeA8(int width, int height) {
179 SkImageInfo info = { 192 return SkImageInfo(width, height, kAlpha_8_SkColorType, kPremul_SkAlphaT ype,
180 width, height, kAlpha_8_SkColorType, kPremul_SkAlphaType 193 kUnknown_Profile, 0);
181 };
182 return info;
183 } 194 }
184 195
185 static SkImageInfo MakeUnknown(int width, int height) { 196 static SkImageInfo MakeUnknown(int width, int height) {
186 SkImageInfo info = { 197 return SkImageInfo(width, height, kUnknown_SkColorType, kIgnore_SkAlphaT ype,
187 width, height, kUnknown_SkColorType, kIgnore_SkAlphaType 198 kUnknown_Profile, 0);
188 };
189 return info;
190 } 199 }
191 200
192 static SkImageInfo MakeUnknown() { 201 static SkImageInfo MakeUnknown() {
193 SkImageInfo info = { 202 return SkImageInfo(0, 0, kUnknown_SkColorType, kIgnore_SkAlphaType, kUnk nown_Profile, 0);
194 0, 0, kUnknown_SkColorType, kIgnore_SkAlphaType
195 };
196 return info;
197 } 203 }
198 204
199 int width() const { return fWidth; } 205 int width() const { return fWidth; }
200 int height() const { return fHeight; } 206 int height() const { return fHeight; }
201 SkColorType colorType() const { return fColorType; } 207 SkColorType colorType() const { return fColorType; }
202 SkAlphaType alphaType() const { return fAlphaType; } 208 SkAlphaType alphaType() const { return fAlphaType; }
203 209
204 bool isEmpty() const { return fWidth <= 0 || fHeight <= 0; } 210 bool isEmpty() const { return fWidth <= 0 || fHeight <= 0; }
205 211
206 bool isOpaque() const { 212 bool isOpaque() const {
(...skipping 22 matching lines...) Expand all
229 return (size_t)this->minRowBytes64(); 235 return (size_t)this->minRowBytes64();
230 } 236 }
231 237
232 bool operator==(const SkImageInfo& other) const { 238 bool operator==(const SkImageInfo& other) const {
233 return 0 == memcmp(this, &other, sizeof(other)); 239 return 0 == memcmp(this, &other, sizeof(other));
234 } 240 }
235 bool operator!=(const SkImageInfo& other) const { 241 bool operator!=(const SkImageInfo& other) const {
236 return 0 != memcmp(this, &other, sizeof(other)); 242 return 0 != memcmp(this, &other, sizeof(other));
237 } 243 }
238 244
245 // DEPRECATED : use the static Unflatten
239 void unflatten(SkReadBuffer&); 246 void unflatten(SkReadBuffer&);
240 void flatten(SkWriteBuffer&) const; 247 void flatten(SkWriteBuffer&) const;
248
249 static SkImageInfo Unflatten(SkReadBuffer&);
241 250
242 int64_t getSafeSize64(size_t rowBytes) const { 251 int64_t getSafeSize64(size_t rowBytes) const {
243 if (0 == fHeight) { 252 if (0 == fHeight) {
244 return 0; 253 return 0;
245 } 254 }
246 return sk_64_mul(fHeight - 1, rowBytes) + fWidth * this->bytesPerPixel() ; 255 return sk_64_mul(fHeight - 1, rowBytes) + fWidth * this->bytesPerPixel() ;
247 } 256 }
248 257
249 size_t getSafeSize(size_t rowBytes) const { 258 size_t getSafeSize(size_t rowBytes) const {
250 return (size_t)this->getSafeSize64(rowBytes); 259 return (size_t)this->getSafeSize64(rowBytes);
251 } 260 }
252 261
253 bool validRowBytes(size_t rowBytes) const { 262 bool validRowBytes(size_t rowBytes) const {
254 uint64_t rb = sk_64_mul(fWidth, this->bytesPerPixel()); 263 uint64_t rb = sk_64_mul(fWidth, this->bytesPerPixel());
255 return rowBytes >= rb; 264 return rowBytes >= rb;
256 } 265 }
257 266
258 SkDEBUGCODE(void validate() const;) 267 SkDEBUGCODE(void validate() const;)
268
269 /**
270 * If the Info was tagged to be sRGB, return true, else return false.
271 */
272 bool isSRGB() const { return kSRGB_Profile == fProfile; }
273
274 /**
275 * If this was tagged with an explicit gamma value, return that value, else return 0.
276 * If this was tagged as sRGB, return 0.
277 */
278 float gamma() const { return fGamma; }
279
280 private:
281 enum Profile {
282 kUnknown_Profile,
283 kSRGB_Profile,
284 kExponential_Profile,
285 };
286
287 uint32_t fProfile;
288 float fGamma;
289
290 SkImageInfo(int width, int height, SkColorType ct, SkAlphaType at, Profile p , float g)
291 : fWidth(width)
292 , fHeight(height)
293 , fColorType(ct)
294 , fAlphaType(at)
295 , fProfile(p)
296 , fGamma(g)
297 {}
259 }; 298 };
260 299
261 #endif 300 #endif
OLDNEW
« no previous file with comments | « gyp/tests.gypi ('k') | src/core/SkImageInfo.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698