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

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

Issue 137753017: move all Config specific APIs into SkBitmapConfig.cpp -- Config is deprecated (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Created 6 years, 10 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 | Annotate | Revision Log
« no previous file with comments | « gyp/core.gypi ('k') | include/core/SkImageDecoder.h » ('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 2006 The Android Open Source Project 2 * Copyright 2006 The Android Open Source Project
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 SkBitmap_DEFINED 8 #ifndef SkBitmap_DEFINED
9 #define SkBitmap_DEFINED 9 #define SkBitmap_DEFINED
10 10
11 #include "SkColor.h" 11 #include "SkColor.h"
12 #include "SkColorTable.h" 12 #include "SkColorTable.h"
13 #include "SkImageInfo.h" 13 #include "SkImageInfo.h"
14 #include "SkPoint.h" 14 #include "SkPoint.h"
15 #include "SkRefCnt.h" 15 #include "SkRefCnt.h"
16 16
17 #define SK_SUPPORT_LEGACY_BITMAPCONFIG
18 //#define SK_SUPPORT_LEGACY_BITMAP_COMPUTESIZE
19
17 struct SkIRect; 20 struct SkIRect;
18 struct SkRect; 21 struct SkRect;
19 class SkPaint; 22 class SkPaint;
20 class SkPixelRef; 23 class SkPixelRef;
21 class SkPixelRefFactory; 24 class SkPixelRefFactory;
22 class SkRegion; 25 class SkRegion;
23 class SkString; 26 class SkString;
24 27
25 class GrTexture; 28 class GrTexture;
26 29
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 84
82 /////////////////////////////////////////////////////////////////////////// 85 ///////////////////////////////////////////////////////////////////////////
83 86
84 const SkImageInfo& info() const { return fInfo; } 87 const SkImageInfo& info() const { return fInfo; }
85 88
86 int width() const { return fInfo.fWidth; } 89 int width() const { return fInfo.fWidth; }
87 int height() const { return fInfo.fHeight; } 90 int height() const { return fInfo.fHeight; }
88 SkColorType colorType() const { return fInfo.fColorType; } 91 SkColorType colorType() const { return fInfo.fColorType; }
89 SkAlphaType alphaType() const { return fInfo.fAlphaType; } 92 SkAlphaType alphaType() const { return fInfo.fAlphaType; }
90 93
91 /** Return the number of bytes per pixel based on the config. If the config 94 /**
92 does not have at least 1 byte per (e.g. kA1_Config) then 0 is returned. 95 * Return the number of bytes per pixel based on the colorType.
93 */ 96 */
94 int bytesPerPixel() const { return fInfo.bytesPerPixel(); } 97 int bytesPerPixel() const { return fInfo.bytesPerPixel(); }
95 98
96 /** Return the rowbytes expressed as a number of pixels (like width and 99 /**
97 height). Note, for 1-byte per pixel configs like kA8_Config, this will 100 * Return the rowbytes expressed as a number of pixels (like width and
98 return the same as rowBytes(). Is undefined for configs that are less 101 * height).
99 than 1-byte per pixel (e.g. kA1_Config)
100 */ 102 */
101 int rowBytesAsPixels() const { 103 int rowBytesAsPixels() const {
102 return fRowBytes >> this->shiftPerPixel(); 104 return fRowBytes >> this->shiftPerPixel();
103 } 105 }
104 106
105 /** Return the shift amount per pixel (i.e. 0 for 1-byte per pixel, 1 for 107 /**
106 2-bytes per pixel configs, 2 for 4-bytes per pixel configs). Return 0 108 * Return the shift amount per pixel (i.e. 0 for 1-byte per pixel, 1 for
107 for configs that are not at least 1-byte per pixel (e.g. kA1_Config 109 * 2-bytes per pixel configs, 2 for 4-bytes per pixel configs).
108 or kNo_Config)
109 */ 110 */
110 int shiftPerPixel() const { return this->bytesPerPixel() >> 1; } 111 int shiftPerPixel() const { return this->bytesPerPixel() >> 1; }
111 112
112 /////////////////////////////////////////////////////////////////////////// 113 ///////////////////////////////////////////////////////////////////////////
113 114
114 /** Return true iff the bitmap has empty dimensions. 115 /** Return true iff the bitmap has empty dimensions.
115 * Hey! Before you use this, see if you really want to know drawsNothing() instead. 116 * Hey! Before you use this, see if you really want to know drawsNothing() instead.
116 */ 117 */
117 bool empty() const { return fInfo.isEmpty(); } 118 bool empty() const { return fInfo.isEmpty(); }
118 119
119 /** Return true iff the bitmap has no pixelref. Note: this can return true e ven if the 120 /** Return true iff the bitmap has no pixelref. Note: this can return true e ven if the
120 * dimensions of the bitmap are > 0 (see empty()). 121 * dimensions of the bitmap are > 0 (see empty()).
121 * Hey! Before you use this, see if you really want to know drawsNothing() instead. 122 * Hey! Before you use this, see if you really want to know drawsNothing() instead.
122 */ 123 */
123 bool isNull() const { return NULL == fPixelRef; } 124 bool isNull() const { return NULL == fPixelRef; }
124 125
125 /** Return true iff drawing this bitmap has no effect. 126 /** Return true iff drawing this bitmap has no effect.
126 */ 127 */
127 bool drawsNothing() const { return this->empty() || this->isNull(); } 128 bool drawsNothing() const { return this->empty() || this->isNull(); }
128 129
129 /** Return the config for the bitmap. */ 130 //#ifdef SK_SUPPORT_LEGACY_BITMAPCONFIG
131 SK_ATTR_DEPRECATED("use colorType()")
130 Config config() const; 132 Config config() const;
131 133
132 SK_ATTR_DEPRECATED("use config()") 134 SK_ATTR_DEPRECATED("use colorType()")
133 Config getConfig() const { return this->config(); } 135 Config getConfig() const { return this->config(); }
136 //#endif
134 137
135 /** Return the number of bytes between subsequent rows of the bitmap. */ 138 /** Return the number of bytes between subsequent rows of the bitmap. */
136 size_t rowBytes() const { return fRowBytes; } 139 size_t rowBytes() const { return fRowBytes; }
137 140
138 /** 141 /**
139 * Set the bitmap's alphaType, returning true on success. If false is 142 * Set the bitmap's alphaType, returning true on success. If false is
140 * returned, then the specified new alphaType is incompatible with the 143 * returned, then the specified new alphaType is incompatible with the
141 * Config, and the current alphaType is unchanged. 144 * ColorType, and the current alphaType is unchanged.
142 * 145 *
143 * Note: this changes the alphatype for the underlying pixels, which means 146 * Note: this changes the alphatype for the underlying pixels, which means
144 * that all bitmaps that might be sharing (subsets of) the pixels will 147 * that all bitmaps that might be sharing (subsets of) the pixels will
145 * be affected. 148 * be affected.
146 */ 149 */
147 bool setAlphaType(SkAlphaType); 150 bool setAlphaType(SkAlphaType);
148 151
149 /** Return the address of the pixels for this SkBitmap. 152 /** Return the address of the pixels for this SkBitmap.
150 */ 153 */
151 void* getPixels() const { return fPixels; } 154 void* getPixels() const { return fPixels; }
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 improve performance by avoiding unnecessary overhead and resource 211 improve performance by avoiding unnecessary overhead and resource
209 consumption on the device. 212 consumption on the device.
210 */ 213 */
211 void setIsVolatile(bool); 214 void setIsVolatile(bool);
212 215
213 /** Reset the bitmap to its initial state (see default constructor). If we a re a (shared) 216 /** Reset the bitmap to its initial state (see default constructor). If we a re a (shared)
214 owner of the pixels, that ownership is decremented. 217 owner of the pixels, that ownership is decremented.
215 */ 218 */
216 void reset(); 219 void reset();
217 220
218 /** Given a config and a width, this computes the optimal rowBytes value. Th is is called automatically 221 #ifdef SK_SUPPORT_LEGACY_BITMAP_COMPUTESIZE
219 if you pass 0 for rowBytes to setConfig(). 222 /**
220 */ 223 * Given a config and a width, this computes the optimal rowBytes value.
224 * This is called automatically if you pass 0 for rowBytes to setConfig().
225 */
221 static size_t ComputeRowBytes(Config c, int width); 226 static size_t ComputeRowBytes(Config c, int width);
222 227
223 /** Return the bytes-per-pixel for the specified config. If the config is 228 /** Return the bytes-per-pixel for the specified config. If the config is
224 not at least 1-byte per pixel, return 0, including for kNo_Config. 229 not at least 1-byte per pixel, return 0, including for kNo_Config.
225 */ 230 */
226 static int ComputeBytesPerPixel(Config c); 231 static int ComputeBytesPerPixel(Config c);
227 232
228 /** Return the shift-per-pixel for the specified config. If the config is 233 /** Return the shift-per-pixel for the specified config. If the config is
229 not at least 1-byte per pixel, return 0, including for kNo_Config. 234 not at least 1-byte per pixel, return 0, including for kNo_Config.
230 */ 235 */
231 static int ComputeShiftPerPixel(Config c) { 236 static int ComputeShiftPerPixel(Config c) {
232 return ComputeBytesPerPixel(c) >> 1; 237 return ComputeBytesPerPixel(c) >> 1;
233 } 238 }
234 239
235 static int64_t ComputeSize64(Config, int width, int height); 240 static int64_t ComputeSize64(Config, int width, int height);
236 static size_t ComputeSize(Config, int width, int height); 241 static size_t ComputeSize(Config, int width, int height);
242 #endif
237 243
238 /** 244 /**
239 * This will brute-force return true if all of the pixels in the bitmap 245 * This will brute-force return true if all of the pixels in the bitmap
240 * are opaque. If it fails to read the pixels, or encounters an error, 246 * are opaque. If it fails to read the pixels, or encounters an error,
241 * it will return false. 247 * it will return false.
242 * 248 *
243 * Since this can be an expensive operation, the bitmap stores a flag for 249 * Since this can be an expensive operation, the bitmap stores a flag for
244 * this (isOpaque). Only call this if you need to compute this value from 250 * this (isOpaque). Only call this if you need to compute this value from
245 * "unknown" pixels. 251 * "unknown" pixels.
246 */ 252 */
247 static bool ComputeIsOpaque(const SkBitmap&); 253 static bool ComputeIsOpaque(const SkBitmap&);
248 254
249 /** 255 /**
250 * Return the bitmap's bounds [0, 0, width, height] as an SkRect 256 * Return the bitmap's bounds [0, 0, width, height] as an SkRect
251 */ 257 */
252 void getBounds(SkRect* bounds) const; 258 void getBounds(SkRect* bounds) const;
253 void getBounds(SkIRect* bounds) const; 259 void getBounds(SkIRect* bounds) const;
254 260
261 #ifdef SK_SUPPORT_LEGACY_BITMAPCONFIG
255 /** Set the bitmap's config and dimensions. If rowBytes is 0, then 262 /** Set the bitmap's config and dimensions. If rowBytes is 0, then
256 ComputeRowBytes() is called to compute the optimal value. This resets 263 ComputeRowBytes() is called to compute the optimal value. This resets
257 any pixel/colortable ownership, just like reset(). 264 any pixel/colortable ownership, just like reset().
258 */ 265 */
259 bool setConfig(Config, int width, int height, size_t rowBytes, SkAlphaType); 266 bool setConfig(Config, int width, int height, size_t rowBytes, SkAlphaType);
260 267
261 bool setConfig(Config config, int width, int height, size_t rowBytes = 0) { 268 bool setConfig(Config config, int width, int height, size_t rowBytes = 0) {
262 return this->setConfig(config, width, height, rowBytes, 269 return this->setConfig(config, width, height, rowBytes,
263 kPremul_SkAlphaType); 270 kPremul_SkAlphaType);
264 } 271 }
272 #endif
265 273
266 bool setConfig(const SkImageInfo& info, size_t rowBytes = 0); 274 bool setConfig(const SkImageInfo& info, size_t rowBytes = 0);
267 275
268 /** 276 /**
269 * Allocate a pixelref to match the specified image info. If the Factory 277 * Allocate a pixelref to match the specified image info. If the Factory
270 * is non-null, call it to allcoate the pixelref. If the ImageInfo requires 278 * is non-null, call it to allcoate the pixelref. If the ImageInfo requires
271 * a colortable, then ColorTable must be non-null, and will be ref'd. 279 * a colortable, then ColorTable must be non-null, and will be ref'd.
272 * On failure, the bitmap will be set to empty and return false. 280 * On failure, the bitmap will be set to empty and return false.
273 */ 281 */
274 bool allocPixels(const SkImageInfo&, SkPixelRefFactory*, SkColorTable*); 282 bool allocPixels(const SkImageInfo&, SkPixelRefFactory*, SkColorTable*);
275 283
276 /** 284 /**
277 * Allocate a pixelref to match the specified image info, using the default 285 * Allocate a pixelref to match the specified image info, using the default
278 * allocator. 286 * allocator.
279 * On success, the bitmap's pixels will be "locked", and return true. 287 * On success, the bitmap's pixels will be "locked", and return true.
280 * On failure, the bitmap will be set to empty and return false. 288 * On failure, the bitmap will be set to empty and return false.
281 */ 289 */
282 bool allocPixels(const SkImageInfo& info) { 290 bool allocPixels(const SkImageInfo& info) {
283 return this->allocPixels(info, NULL, NULL); 291 return this->allocPixels(info, NULL, NULL);
284 } 292 }
285 293
294 #ifdef SK_SUPPORT_LEGACY_BITMAPCONFIG
286 /** 295 /**
287 * Legacy helper function, which creates an SkImageInfo from the specified 296 * Legacy helper function, which creates an SkImageInfo from the specified
288 * config and then calls allocPixels(info). 297 * config and then calls allocPixels(info).
289 */ 298 */
290 bool allocConfigPixels(Config, int width, int height, bool isOpaque = false) ; 299 bool allocConfigPixels(Config, int width, int height, bool isOpaque = false) ;
300 #endif
291 301
292 bool allocN32Pixels(int width, int height, bool isOpaque = false) { 302 bool allocN32Pixels(int width, int height, bool isOpaque = false) {
293 SkImageInfo info = SkImageInfo::MakeN32Premul(width, height); 303 SkImageInfo info = SkImageInfo::MakeN32Premul(width, height);
294 if (isOpaque) { 304 if (isOpaque) {
295 info.fAlphaType = kOpaque_SkAlphaType; 305 info.fAlphaType = kOpaque_SkAlphaType;
296 } 306 }
297 return this->allocPixels(info); 307 return this->allocPixels(info);
298 } 308 }
299 309
300 /** 310 /**
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
349 @param dstSize Size of destination buffer. Must be large enough to hold 359 @param dstSize Size of destination buffer. Must be large enough to hold
350 pixels using indicated stride. 360 pixels using indicated stride.
351 @param dstRowBytes Width of each line in the buffer. If 0, uses 361 @param dstRowBytes Width of each line in the buffer. If 0, uses
352 bitmap's internal stride. 362 bitmap's internal stride.
353 @param preserveDstPad Must we preserve padding in the dst 363 @param preserveDstPad Must we preserve padding in the dst
354 */ 364 */
355 bool copyPixelsTo(void* const dst, size_t dstSize, size_t dstRowBytes = 0, 365 bool copyPixelsTo(void* const dst, size_t dstSize, size_t dstRowBytes = 0,
356 bool preserveDstPad = false) const; 366 bool preserveDstPad = false) const;
357 367
358 /** Use the standard HeapAllocator to create the pixelref that manages the 368 /** Use the standard HeapAllocator to create the pixelref that manages the
359 pixel memory. It will be sized based on the current width/height/config. 369 pixel memory. It will be sized based on the current ImageInfo.
360 If this is called multiple times, a new pixelref object will be created 370 If this is called multiple times, a new pixelref object will be created
361 each time. 371 each time.
362 372
363 If the bitmap retains a reference to the colortable (assuming it is 373 If the bitmap retains a reference to the colortable (assuming it is
364 not null) it will take care of incrementing the reference count. 374 not null) it will take care of incrementing the reference count.
365 375
366 @param ctable ColorTable (or null) to use with the pixels that will 376 @param ctable ColorTable (or null) to use with the pixels that will
367 be allocated. Only used if config == Index8_Config 377 be allocated. Only used if ColorType == Index_8
368 @return true if the allocation succeeds. If not the pixelref field of 378 @return true if the allocation succeeds. If not the pixelref field of
369 the bitmap will be unchanged. 379 the bitmap will be unchanged.
370 */ 380 */
371 bool allocPixels(SkColorTable* ctable = NULL) { 381 bool allocPixels(SkColorTable* ctable = NULL) {
372 return this->allocPixels(NULL, ctable); 382 return this->allocPixels(NULL, ctable);
373 } 383 }
374 384
375 /** Use the specified Allocator to create the pixelref that manages the 385 /** Use the specified Allocator to create the pixelref that manages the
376 pixel memory. It will be sized based on the current width/height/config. 386 pixel memory. It will be sized based on the current ImageInfo.
377 If this is called multiple times, a new pixelref object will be created 387 If this is called multiple times, a new pixelref object will be created
378 each time. 388 each time.
379 389
380 If the bitmap retains a reference to the colortable (assuming it is 390 If the bitmap retains a reference to the colortable (assuming it is
381 not null) it will take care of incrementing the reference count. 391 not null) it will take care of incrementing the reference count.
382 392
383 @param allocator The Allocator to use to create a pixelref that can 393 @param allocator The Allocator to use to create a pixelref that can
384 manage the pixel memory for the current 394 manage the pixel memory for the current ImageInfo.
385 width/height/config. If allocator is NULL, the standard 395 If allocator is NULL, the standard HeapAllocator will
386 HeapAllocator will be used. 396 be used.
387 @param ctable ColorTable (or null) to use with the pixels that will 397 @param ctable ColorTable (or null) to use with the pixels that will
388 be allocated. Only used if config == Index8_Config. 398 be allocated. Only used if ColorType == Index_8.
389 If it is non-null and the config is not Index8, it will 399 If it is non-null and the colorType is not Index_8, it
390 be ignored. 400 will be ignored.
391 @return true if the allocation succeeds. If not the pixelref field of 401 @return true if the allocation succeeds. If not the pixelref field of
392 the bitmap will be unchanged. 402 the bitmap will be unchanged.
393 */ 403 */
394 bool allocPixels(Allocator* allocator, SkColorTable* ctable); 404 bool allocPixels(Allocator* allocator, SkColorTable* ctable);
395 405
396 /** 406 /**
397 * Return the current pixelref object or NULL if there is none. This does 407 * Return the current pixelref object or NULL if there is none. This does
398 * not affect the refcount of the pixelref. 408 * not affect the refcount of the pixelref.
399 */ 409 */
400 SkPixelRef* pixelRef() const { return fPixelRef; } 410 SkPixelRef* pixelRef() const { return fPixelRef; }
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
443 453
444 /** 454 /**
445 * Some bitmaps can return a copy of their pixels for lockPixels(), but 455 * Some bitmaps can return a copy of their pixels for lockPixels(), but
446 * that copy, if modified, will not be pushed back. These bitmaps should 456 * that copy, if modified, will not be pushed back. These bitmaps should
447 * not be used as targets for a raster device/canvas (since all pixels 457 * not be used as targets for a raster device/canvas (since all pixels
448 * modifications will be lost when unlockPixels() is called.) 458 * modifications will be lost when unlockPixels() is called.)
449 */ 459 */
450 bool lockPixelsAreWritable() const; 460 bool lockPixelsAreWritable() const;
451 461
452 /** Call this to be sure that the bitmap is valid enough to be drawn (i.e. 462 /** Call this to be sure that the bitmap is valid enough to be drawn (i.e.
453 it has non-null pixels, and if required by its config, it has a 463 it has non-null pixels, and if required by its colorType, it has a
454 non-null colortable. Returns true if all of the above are met. 464 non-null colortable. Returns true if all of the above are met.
455 */ 465 */
456 bool readyToDraw() const { 466 bool readyToDraw() const {
457 return this->getPixels() != NULL && 467 return NULL != this->getPixels() &&
458 (this->config() != kIndex8_Config || NULL != fColorTable); 468 (this->colorType() != kIndex_8_SkColorType ||
469 NULL != fColorTable);
459 } 470 }
460 471
461 /** Returns the pixelRef's texture, or NULL 472 /** Returns the pixelRef's texture, or NULL
462 */ 473 */
463 GrTexture* getTexture() const; 474 GrTexture* getTexture() const;
464 475
465 /** Return the bitmap's colortable, if it uses one (i.e. colorType is 476 /** Return the bitmap's colortable, if it uses one (i.e. colorType is
466 Index_8) and the pixels are locked. 477 Index_8) and the pixels are locked.
467 Otherwise returns NULL. Does not affect the colortable's 478 Otherwise returns NULL. Does not affect the colortable's
468 reference count. 479 reference count.
469 */ 480 */
470 SkColorTable* getColorTable() const { return fColorTable; } 481 SkColorTable* getColorTable() const { return fColorTable; }
471 482
472 /** Returns a non-zero, unique value corresponding to the pixels in our 483 /** Returns a non-zero, unique value corresponding to the pixels in our
473 pixelref. Each time the pixels are changed (and notifyPixelsChanged 484 pixelref. Each time the pixels are changed (and notifyPixelsChanged
474 is called), a different generation ID will be returned. Finally, if 485 is called), a different generation ID will be returned. Finally, if
475 their is no pixelRef then zero is returned. 486 their is no pixelRef then zero is returned.
476 */ 487 */
477 uint32_t getGenerationID() const; 488 uint32_t getGenerationID() const;
478 489
479 /** Call this if you have changed the contents of the pixels. This will in- 490 /** Call this if you have changed the contents of the pixels. This will in-
480 turn cause a different generation ID value to be returned from 491 turn cause a different generation ID value to be returned from
481 getGenerationID(). 492 getGenerationID().
482 */ 493 */
483 void notifyPixelsChanged() const; 494 void notifyPixelsChanged() const;
484 495
485 /** 496 /**
486 * Fill the entire bitmap with the specified color. 497 * Fill the entire bitmap with the specified color.
487 * If the bitmap's config does not support alpha (e.g. 565) then the alpha 498 * If the ColorType does not support alpha (e.g. 565) then the alpha
488 * of the color is ignored (treated as opaque). If the config only supports 499 * of the color is ignored (treated as opaque). If the config only supports
489 * alpha (e.g. A1 or A8) then the color's r,g,b components are ignored. 500 * alpha (e.g. Alpha_8) then the color's r,g,b components are ignored.
490 */ 501 */
491 void eraseColor(SkColor c) const { 502 void eraseColor(SkColor c) const {
492 this->eraseARGB(SkColorGetA(c), SkColorGetR(c), SkColorGetG(c), 503 this->eraseARGB(SkColorGetA(c), SkColorGetR(c), SkColorGetG(c),
493 SkColorGetB(c)); 504 SkColorGetB(c));
494 } 505 }
495 506
496 /** 507 /**
497 * Fill the entire bitmap with the specified color. 508 * Fill the entire bitmap with the specified color.
498 * If the bitmap's config does not support alpha (e.g. 565) then the alpha 509 * If the ColorType does not support alpha (e.g. 565) then the alpha
499 * of the color is ignored (treated as opaque). If the config only supports 510 * of the color is ignored (treated as opaque). If the ColorType only
500 * alpha (e.g. A1 or A8) then the color's r,g,b components are ignored. 511 * supports alpha (e.g. Alpha_8) then the r,g,b components are ignored.
501 */ 512 */
502 void eraseARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b) const; 513 void eraseARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b) const;
503 514
504 SK_ATTR_DEPRECATED("use eraseARGB or eraseColor") 515 SK_ATTR_DEPRECATED("use eraseARGB or eraseColor")
505 void eraseRGB(U8CPU r, U8CPU g, U8CPU b) const { 516 void eraseRGB(U8CPU r, U8CPU g, U8CPU b) const {
506 this->eraseARGB(0xFF, r, g, b); 517 this->eraseARGB(0xFF, r, g, b);
507 } 518 }
508 519
509 /** 520 /**
510 * Fill the specified area of this bitmap with the specified color. 521 * Fill the specified area of this bitmap with the specified color.
511 * If the bitmap's config does not support alpha (e.g. 565) then the alpha 522 * If the ColorType does not support alpha (e.g. 565) then the alpha
512 * of the color is ignored (treated as opaque). If the config only supports 523 * of the color is ignored (treated as opaque). If the ColorType only
513 * alpha (e.g. A1 or A8) then the color's r,g,b components are ignored. 524 * supports alpha (e.g. Alpha_8) then the r,g,b components are ignored.
514 */ 525 */
515 void eraseArea(const SkIRect& area, SkColor c) const; 526 void eraseArea(const SkIRect& area, SkColor c) const;
516 527
517 /** Scroll (a subset of) the contents of this bitmap by dx/dy. If there are 528 /** Scroll (a subset of) the contents of this bitmap by dx/dy. If there are
518 no pixels allocated (i.e. getPixels() returns null) the method will 529 no pixels allocated (i.e. getPixels() returns null) the method will
519 still update the inval region (if present). If the bitmap is immutable, 530 still update the inval region (if present). If the bitmap is immutable,
520 do nothing and return false. 531 do nothing and return false.
521 532
522 @param subset The subset of the bitmap to scroll/move. To scroll the 533 @param subset The subset of the bitmap to scroll/move. To scroll the
523 entire contents, specify [0, 0, width, height] or just 534 entire contents, specify [0, 0, width, height] or just
524 pass null. 535 pass null.
525 @param dx The amount to scroll in X 536 @param dx The amount to scroll in X
526 @param dy The amount to scroll in Y 537 @param dy The amount to scroll in Y
527 @param inval Optional (may be null). Returns the area of the bitmap that 538 @param inval Optional (may be null). Returns the area of the bitmap that
528 was scrolled away. E.g. if dx = dy = 0, then inval would 539 was scrolled away. E.g. if dx = dy = 0, then inval would
529 be set to empty. If dx >= width or dy >= height, then 540 be set to empty. If dx >= width or dy >= height, then
530 inval would be set to the entire bounds of the bitmap. 541 inval would be set to the entire bounds of the bitmap.
531 @return true if the scroll was doable. Will return false if the bitmap 542 @return true if the scroll was doable. Will return false on failure.
532 uses an unsupported config for scrolling (only kA8,
533 kIndex8, kRGB_565, kARGB_4444, kARGB_8888 are supported).
534 If no pixels are present (i.e. getPixels() returns false) 543 If no pixels are present (i.e. getPixels() returns false)
535 inval will still be updated, and true will be returned. 544 inval will still be updated, and true will be returned.
536 */ 545 */
537 bool scrollRect(const SkIRect* subset, int dx, int dy, 546 bool scrollRect(const SkIRect* subset, int dx, int dy,
538 SkRegion* inval = NULL) const; 547 SkRegion* inval = NULL) const;
539 548
540 /** 549 /**
541 * Return the SkColor of the specified pixel. In most cases this will 550 * Return the SkColor of the specified pixel. In most cases this will
542 * require un-premultiplying the color. Alpha only configs (A1 and A8) 551 * require un-premultiplying the color. Alpha only ColorType (Alpha_8)
543 * return black with the appropriate alpha set. The value is undefined 552 * return black with the appropriate alpha set. The value is undefined
544 * for kNone_Config or if x or y are out of bounds, or if the bitmap 553 * for kUnknown_ColorType or if x or y are out of bounds, or if the bitmap
545 * does not have any pixels (or has not be locked with lockPixels()). 554 * does not have any pixels (or has not be locked with lockPixels()).
546 */ 555 */
547 SkColor getColor(int x, int y) const; 556 SkColor getColor(int x, int y) const;
548 557
549 /** Returns the address of the specified pixel. This performs a runtime 558 /** Returns the address of the specified pixel. This performs a runtime
550 check to know the size of the pixels, and will return the same answer 559 check to know the size of the pixels, and will return the same answer
551 as the corresponding size-specific method (e.g. getAddr16). Since the 560 as the corresponding size-specific method (e.g. getAddr16). Since the
552 check happens at runtime, it is much slower than using a size-specific 561 check happens at runtime, it is much slower than using a size-specific
553 version. Unlike the size-specific methods, this routine also checks if 562 version. Unlike the size-specific methods, this routine also checks if
554 getPixels() returns null, and returns that. The size-specific routines 563 getPixels() returns null, and returns that. The size-specific routines
555 perform a debugging assert that getPixels() is not null, but they do 564 perform a debugging assert that getPixels() is not null, but they do
556 not do any runtime checks. 565 not do any runtime checks.
557 */ 566 */
558 void* getAddr(int x, int y) const; 567 void* getAddr(int x, int y) const;
559 568
560 /** Returns the address of the pixel specified by x,y for 32bit pixels. 569 /** Returns the address of the pixel specified by x,y for 32bit pixels.
561 * In debug build, this asserts that the pixels are allocated and locked, 570 * In debug build, this asserts that the pixels are allocated and locked,
562 * and that the config is 32-bit, however none of these checks are performe d 571 * and that the ColorType is 32-bit, however none of these checks are
563 * in the release build. 572 * performed in the release build.
564 */ 573 */
565 inline uint32_t* getAddr32(int x, int y) const; 574 inline uint32_t* getAddr32(int x, int y) const;
566 575
567 /** Returns the address of the pixel specified by x,y for 16bit pixels. 576 /** Returns the address of the pixel specified by x,y for 16bit pixels.
568 * In debug build, this asserts that the pixels are allocated and locked, 577 * In debug build, this asserts that the pixels are allocated and locked,
569 * and that the config is 16-bit, however none of these checks are performe d 578 * and that the ColorType is 16-bit, however none of these checks are
570 * in the release build. 579 * performed in the release build.
571 */ 580 */
572 inline uint16_t* getAddr16(int x, int y) const; 581 inline uint16_t* getAddr16(int x, int y) const;
573 582
574 /** Returns the address of the pixel specified by x,y for 8bit pixels. 583 /** Returns the address of the pixel specified by x,y for 8bit pixels.
575 * In debug build, this asserts that the pixels are allocated and locked, 584 * In debug build, this asserts that the pixels are allocated and locked,
576 * and that the config is 8-bit, however none of these checks are performed 585 * and that the ColorType is 8-bit, however none of these checks are
577 * in the release build. 586 * performed in the release build.
578 */ 587 */
579 inline uint8_t* getAddr8(int x, int y) const; 588 inline uint8_t* getAddr8(int x, int y) const;
580 589
581 /** Returns the color corresponding to the pixel specified by x,y for 590 /** Returns the color corresponding to the pixel specified by x,y for
582 * colortable based bitmaps. 591 * colortable based bitmaps.
583 * In debug build, this asserts that the pixels are allocated and locked, 592 * In debug build, this asserts that the pixels are allocated and locked,
584 * that the config is kIndex8, and that the colortable is allocated, 593 * that the ColorType is Index_8, and that the colortable is allocated,
585 * however none of these checks are performed in the release build. 594 * however none of these checks are performed in the release build.
586 */ 595 */
587 inline SkPMColor getIndex8Color(int x, int y) const; 596 inline SkPMColor getIndex8Color(int x, int y) const;
588 597
589 /** Set dst to be a setset of this bitmap. If possible, it will share the 598 /** Set dst to be a setset of this bitmap. If possible, it will share the
590 pixel memory, and just point into a subset of it. However, if the config 599 pixel memory, and just point into a subset of it. If this is not
591 does not support this, a local copy will be made and associated with 600 supported, a local copy will be made and associated with
592 the dst bitmap. If the subset rectangle, intersected with the bitmap's 601 the dst bitmap. If the subset rectangle, intersected with the bitmap's
593 dimensions is empty, or if there is an unsupported config, false will be 602 dimensions is empty, or if there is an unsupported colorType, false will
594 returned and dst will be untouched. 603 be returned and dst will be untouched.
595 @param dst The bitmap that will be set to a subset of this bitmap 604 @param dst The bitmap that will be set to a subset of this bitmap
596 @param subset The rectangle of pixels in this bitmap that dst will 605 @param subset The rectangle of pixels in this bitmap that dst will
597 reference. 606 reference.
598 @return true if the subset copy was successfully made. 607 @return true if the subset copy was successfully made.
599 */ 608 */
600 bool extractSubset(SkBitmap* dst, const SkIRect& subset) const; 609 bool extractSubset(SkBitmap* dst, const SkIRect& subset) const;
601 610
611 #ifdef SK_SUPPORT_LEGACY_BITMAPCONFIG
602 /** Makes a deep copy of this bitmap, respecting the requested config, 612 /** Makes a deep copy of this bitmap, respecting the requested config,
603 * and allocating the dst pixels on the cpu. 613 * and allocating the dst pixels on the cpu.
604 * Returns false if either there is an error (i.e. the src does not have 614 * Returns false if either there is an error (i.e. the src does not have
605 * pixels) or the request cannot be satisfied (e.g. the src has per-pixel 615 * pixels) or the request cannot be satisfied (e.g. the src has per-pixel
606 * alpha, and the requested config does not support alpha). 616 * alpha, and the requested config does not support alpha).
607 * @param dst The bitmap to be sized and allocated 617 * @param dst The bitmap to be sized and allocated
608 * @param c The desired config for dst 618 * @param c The desired config for dst
609 * @param allocator Allocator used to allocate the pixelref for the dst 619 * @param allocator Allocator used to allocate the pixelref for the dst
610 * bitmap. If this is null, the standard HeapAllocator 620 * bitmap. If this is null, the standard HeapAllocator
611 * will be used. 621 * will be used.
612 * @return true if the copy could be made. 622 * @return true if the copy could be made.
613 */ 623 */
614 bool copyTo(SkBitmap* dst, Config c, Allocator* allocator = NULL) const; 624 bool copyTo(SkBitmap* dst, Config c, Allocator* allocator = NULL) const;
615 625
616 /** Makes a deep copy of this bitmap, respecting the requested config, and 626 /** Makes a deep copy of this bitmap, respecting the requested config, and
617 * with custom allocation logic that will keep the copied pixels 627 * with custom allocation logic that will keep the copied pixels
618 * in the same domain as the source: If the src pixels are allocated for 628 * in the same domain as the source: If the src pixels are allocated for
619 * the cpu, then so will the dst. If the src pixels are allocated on the 629 * the cpu, then so will the dst. If the src pixels are allocated on the
620 * gpu (typically as a texture), the it will do the same for the dst. 630 * gpu (typically as a texture), the it will do the same for the dst.
621 * If the request cannot be fulfilled, returns false and dst is unmodified. 631 * If the request cannot be fulfilled, returns false and dst is unmodified.
622 */ 632 */
623 bool deepCopyTo(SkBitmap* dst, Config c) const; 633 bool deepCopyTo(SkBitmap* dst, Config c) const;
624 634
625 /** Returns true if this bitmap can be deep copied into the requested config 635 /** Returns true if this bitmap can be deep copied into the requested config
626 by calling copyTo(). 636 by calling copyTo().
627 */ 637 */
628 bool canCopyTo(Config newConfig) const; 638 bool canCopyTo(Config config) const;
639 #endif
640 /**
641 * Returns true if this bitmap can be deep copied into the requested
642 * colorType by calling copyTo().
643 */
644 bool canCopyTo(SkColorType) const;
629 645
630 SK_ATTR_DEPRECATED("use setFilterLevel on SkPaint") 646 SK_ATTR_DEPRECATED("use setFilterLevel on SkPaint")
631 void buildMipMap(bool forceRebuild = false); 647 void buildMipMap(bool forceRebuild = false);
632 648
633 #ifdef SK_BUILD_FOR_ANDROID 649 #ifdef SK_BUILD_FOR_ANDROID
634 bool hasHardwareMipMap() const { 650 bool hasHardwareMipMap() const {
635 return (fFlags & kHasHardwareMipMap_Flag) != 0; 651 return (fFlags & kHasHardwareMipMap_Flag) != 0;
636 } 652 }
637 653
638 void setHasHardwareMipMap(bool hasHardwareMipMap) { 654 void setHasHardwareMipMap(bool hasHardwareMipMap) {
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
678 */ 694 */
679 void flatten(SkWriteBuffer&) const; 695 void flatten(SkWriteBuffer&) const;
680 void unflatten(SkReadBuffer&); 696 void unflatten(SkReadBuffer&);
681 697
682 SkDEBUGCODE(void validate() const;) 698 SkDEBUGCODE(void validate() const;)
683 699
684 class Allocator : public SkRefCnt { 700 class Allocator : public SkRefCnt {
685 public: 701 public:
686 SK_DECLARE_INST_COUNT(Allocator) 702 SK_DECLARE_INST_COUNT(Allocator)
687 703
688 /** Allocate the pixel memory for the bitmap, given its dimensions and 704 /** Allocate the pixel memory for the bitmap, given its ImageInfo.
689 config. Return true on success, where success means either setPixels 705 Return true on success, where success means either setPixels
690 or setPixelRef was called. The pixels need not be locked when this 706 or setPixelRef was called. The pixels need not be locked when this
691 returns. If the config requires a colortable, it also must be 707 returns. If the ColorType requires a colortable, it also must be
692 installed via setColorTable. If false is returned, the bitmap and 708 installed via setColorTable. If false is returned, the bitmap and
693 colortable should be left unchanged. 709 colortable should be left unchanged.
694 */ 710 */
695 virtual bool allocPixelRef(SkBitmap*, SkColorTable*) = 0; 711 virtual bool allocPixelRef(SkBitmap*, SkColorTable*) = 0;
696 private: 712 private:
697 typedef SkRefCnt INHERITED; 713 typedef SkRefCnt INHERITED;
698 }; 714 };
699 715
700 /** Subclass of Allocator that returns a pixelref that allocates its pixel 716 /** Subclass of Allocator that returns a pixelref that allocates its pixel
701 memory from the heap. This is the default Allocator invoked by 717 memory from the heap. This is the default Allocator invoked by
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
755 }; 771 };
756 772
757 SkImageInfo fInfo; 773 SkImageInfo fInfo;
758 774
759 uint32_t fRowBytes; 775 uint32_t fRowBytes;
760 776
761 uint8_t fFlags; 777 uint8_t fFlags;
762 778
763 void internalErase(const SkIRect&, U8CPU a, U8CPU r, U8CPU g, U8CPU b)const; 779 void internalErase(const SkIRect&, U8CPU a, U8CPU r, U8CPU g, U8CPU b)const;
764 780
781 #ifdef SK_SUPPORT_LEGACY_BITMAP_COMPUTESIZE
765 /* Internal computations for safe size. 782 /* Internal computations for safe size.
766 */ 783 */
767 static int64_t ComputeSafeSize64(Config config, 784 static int64_t ComputeSafeSize64(Config config,
768 uint32_t width, 785 uint32_t width,
769 uint32_t height, 786 uint32_t height,
770 size_t rowBytes); 787 size_t rowBytes);
771 static size_t ComputeSafeSize(Config config, 788 static size_t ComputeSafeSize(Config config,
772 uint32_t width, 789 uint32_t width,
773 uint32_t height, 790 uint32_t height,
774 size_t rowBytes); 791 size_t rowBytes);
792 #endif
775 793
776 /* Unreference any pixelrefs or colortables 794 /* Unreference any pixelrefs or colortables
777 */ 795 */
778 void freePixels(); 796 void freePixels();
779 void updatePixelsFromRef() const; 797 void updatePixelsFromRef() const;
780 798
781 static SkFixed ComputeMipLevel(SkFixed sx, SkFixed dy); 799 static SkFixed ComputeMipLevel(SkFixed sx, SkFixed dy);
782 800
783 /** Given scale factors sx, sy, determine the miplevel available in the 801 /** Given scale factors sx, sy, determine the miplevel available in the
784 bitmap, and return it (this is the amount to shift matrix iterators 802 bitmap, and return it (this is the amount to shift matrix iterators
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
863 private: 881 private:
864 SkColorTable* fCTable; 882 SkColorTable* fCTable;
865 const SkPMColor* fColors; 883 const SkPMColor* fColors;
866 }; 884 };
867 #define SkAutoLockColors(...) SK_REQUIRE_LOCAL_VAR(SkAutoLockColors) 885 #define SkAutoLockColors(...) SK_REQUIRE_LOCAL_VAR(SkAutoLockColors)
868 886
869 /////////////////////////////////////////////////////////////////////////////// 887 ///////////////////////////////////////////////////////////////////////////////
870 888
871 inline uint32_t* SkBitmap::getAddr32(int x, int y) const { 889 inline uint32_t* SkBitmap::getAddr32(int x, int y) const {
872 SkASSERT(fPixels); 890 SkASSERT(fPixels);
873 SkASSERT(this->config() == kARGB_8888_Config); 891 SkASSERT(4 == this->bytesPerPixel());
874 SkASSERT((unsigned)x < (unsigned)this->width() && (unsigned)y < (unsigned)th is->height()); 892 SkASSERT((unsigned)x < (unsigned)this->width() && (unsigned)y < (unsigned)th is->height());
875 return (uint32_t*)((char*)fPixels + y * fRowBytes + (x << 2)); 893 return (uint32_t*)((char*)fPixels + y * fRowBytes + (x << 2));
876 } 894 }
877 895
878 inline uint16_t* SkBitmap::getAddr16(int x, int y) const { 896 inline uint16_t* SkBitmap::getAddr16(int x, int y) const {
879 SkASSERT(fPixels); 897 SkASSERT(fPixels);
880 SkASSERT(this->config() == kRGB_565_Config || this->config() == kARGB_4444_C onfig); 898 SkASSERT(2 == this->bytesPerPixel());
881 SkASSERT((unsigned)x < (unsigned)this->width() && (unsigned)y < (unsigned)th is->height()); 899 SkASSERT((unsigned)x < (unsigned)this->width() && (unsigned)y < (unsigned)th is->height());
882 return (uint16_t*)((char*)fPixels + y * fRowBytes + (x << 1)); 900 return (uint16_t*)((char*)fPixels + y * fRowBytes + (x << 1));
883 } 901 }
884 902
885 inline uint8_t* SkBitmap::getAddr8(int x, int y) const { 903 inline uint8_t* SkBitmap::getAddr8(int x, int y) const {
886 SkASSERT(fPixels); 904 SkASSERT(fPixels);
887 SkASSERT(this->config() == kA8_Config || this->config() == kIndex8_Config); 905 SkASSERT(1 == this->bytesPerPixel());
888 SkASSERT((unsigned)x < (unsigned)this->width() && (unsigned)y < (unsigned)th is->height()); 906 SkASSERT((unsigned)x < (unsigned)this->width() && (unsigned)y < (unsigned)th is->height());
889 return (uint8_t*)fPixels + y * fRowBytes + x; 907 return (uint8_t*)fPixels + y * fRowBytes + x;
890 } 908 }
891 909
892 inline SkPMColor SkBitmap::getIndex8Color(int x, int y) const { 910 inline SkPMColor SkBitmap::getIndex8Color(int x, int y) const {
893 SkASSERT(fPixels); 911 SkASSERT(fPixels);
894 SkASSERT(this->config() == kIndex8_Config); 912 SkASSERT(kIndex_8_SkColorType == this->colorType());
895 SkASSERT((unsigned)x < (unsigned)this->width() && (unsigned)y < (unsigned)th is->height()); 913 SkASSERT((unsigned)x < (unsigned)this->width() && (unsigned)y < (unsigned)th is->height());
896 SkASSERT(fColorTable); 914 SkASSERT(fColorTable);
897 return (*fColorTable)[*((const uint8_t*)fPixels + y * fRowBytes + x)]; 915 return (*fColorTable)[*((const uint8_t*)fPixels + y * fRowBytes + x)];
898 } 916 }
899 917
918 ///////////////////////////////////////////////////////////////////////////////
919
920 extern SkBitmap::Config SkColorTypeToBitmapConfig(SkColorType);
921 extern SkColorType SkBitmapConfigToColorType(SkBitmap::Config);
922
900 #endif 923 #endif
OLDNEW
« no previous file with comments | « gyp/core.gypi ('k') | include/core/SkImageDecoder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698