| OLD | NEW |
| 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 #ifdef SK_SUPPORT_LEGACY_ALLOCPIXELS_BOOL |
| 18 #define SK_ALLOCPIXELS_RETURN_TYPE bool |
| 19 #define SK_ALLOCPIXELS_RETURN_TRUE return true |
| 20 #define SK_ALLOCPIXELS_RETURN_FAIL return false |
| 21 #else |
| 22 #define SK_ALLOCPIXELS_RETURN_TYPE void |
| 23 #define SK_ALLOCPIXELS_RETURN_TRUE return |
| 24 #define SK_ALLOCPIXELS_RETURN_FAIL sk_throw() |
| 25 #endif |
| 26 |
| 17 struct SkMask; | 27 struct SkMask; |
| 18 struct SkIRect; | 28 struct SkIRect; |
| 19 struct SkRect; | 29 struct SkRect; |
| 20 class SkPaint; | 30 class SkPaint; |
| 21 class SkPixelRef; | 31 class SkPixelRef; |
| 22 class SkPixelRefFactory; | 32 class SkPixelRefFactory; |
| 23 class SkRegion; | 33 class SkRegion; |
| 24 class SkString; | 34 class SkString; |
| 25 class GrTexture; | 35 class GrTexture; |
| 26 | 36 |
| (...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 211 void getBounds(SkIRect* bounds) const; | 221 void getBounds(SkIRect* bounds) const; |
| 212 | 222 |
| 213 bool setInfo(const SkImageInfo&, size_t rowBytes = 0); | 223 bool setInfo(const SkImageInfo&, size_t rowBytes = 0); |
| 214 | 224 |
| 215 /** | 225 /** |
| 216 * Allocate the bitmap's pixels to match the requested image info. If the F
actory | 226 * Allocate the bitmap's pixels to match the requested image info. If the F
actory |
| 217 * is non-null, call it to allcoate the pixelref. If the ImageInfo requires | 227 * is non-null, call it to allcoate the pixelref. If the ImageInfo requires |
| 218 * a colortable, then ColorTable must be non-null, and will be ref'd. | 228 * a colortable, then ColorTable must be non-null, and will be ref'd. |
| 219 * On failure, the bitmap will be set to empty and return false. | 229 * On failure, the bitmap will be set to empty and return false. |
| 220 */ | 230 */ |
| 221 bool allocPixels(const SkImageInfo&, SkPixelRefFactory*, SkColorTable*); | 231 bool SK_WARN_UNUSED_RESULT tryAllocPixels(const SkImageInfo&, SkPixelRefFact
ory*, SkColorTable*); |
| 232 |
| 233 SK_ALLOCPIXELS_RETURN_TYPE allocPixels(const SkImageInfo& info, SkPixelRefFa
ctory* factory, |
| 234 SkColorTable* ctable) { |
| 235 if (!this->tryAllocPixels(info, factory, ctable)) { |
| 236 SK_ALLOCPIXELS_RETURN_FAIL; |
| 237 } |
| 238 SK_ALLOCPIXELS_RETURN_TRUE; |
| 239 } |
| 222 | 240 |
| 223 /** | 241 /** |
| 224 * Allocate the bitmap's pixels to match the requested image info and | 242 * Allocate the bitmap's pixels to match the requested image info and |
| 225 * rowBytes. If the request cannot be met (e.g. the info is invalid or | 243 * rowBytes. If the request cannot be met (e.g. the info is invalid or |
| 226 * the requested rowBytes are not compatible with the info | 244 * the requested rowBytes are not compatible with the info |
| 227 * (e.g. rowBytes < info.minRowBytes() or rowBytes is not aligned with | 245 * (e.g. rowBytes < info.minRowBytes() or rowBytes is not aligned with |
| 228 * the pixel size specified by info.colorType()) then false is returned | 246 * the pixel size specified by info.colorType()) then false is returned |
| 229 * and the bitmap is set to empty. | 247 * and the bitmap is set to empty. |
| 230 */ | 248 */ |
| 231 bool allocPixels(const SkImageInfo& info, size_t rowBytes); | 249 bool SK_WARN_UNUSED_RESULT tryAllocPixels(const SkImageInfo& info, size_t ro
wBytes); |
| 232 | 250 |
| 233 /** | 251 SK_ALLOCPIXELS_RETURN_TYPE allocPixels(const SkImageInfo& info, size_t rowBy
tes) { |
| 234 * Allocate a pixelref to match the specified image info, using the default | 252 if (!this->tryAllocPixels(info, rowBytes)) { |
| 235 * allocator. | 253 SK_ALLOCPIXELS_RETURN_FAIL; |
| 236 * On success, the bitmap's pixels will be "locked", and return true. | 254 } |
| 237 * On failure, the bitmap will be set to empty and return false. | 255 SK_ALLOCPIXELS_RETURN_TRUE; |
| 238 */ | 256 } |
| 239 bool allocPixels(const SkImageInfo& info) { | 257 |
| 258 bool SK_WARN_UNUSED_RESULT tryAllocPixels(const SkImageInfo& info) { |
| 259 return this->tryAllocPixels(info, info.minRowBytes()); |
| 260 } |
| 261 |
| 262 SK_ALLOCPIXELS_RETURN_TYPE allocPixels(const SkImageInfo& info) { |
| 240 return this->allocPixels(info, info.minRowBytes()); | 263 return this->allocPixels(info, info.minRowBytes()); |
| 241 } | 264 } |
| 242 | 265 |
| 243 bool allocN32Pixels(int width, int height, bool isOpaque = false) { | 266 bool SK_WARN_UNUSED_RESULT tryAllocN32Pixels(int width, int height, bool isO
paque = false) { |
| 267 SkImageInfo info = SkImageInfo::MakeN32Premul(width, height); |
| 268 if (isOpaque) { |
| 269 info.fAlphaType = kOpaque_SkAlphaType; |
| 270 } |
| 271 return this->tryAllocPixels(info); |
| 272 } |
| 273 |
| 274 SK_ALLOCPIXELS_RETURN_TYPE allocN32Pixels(int width, int height, bool isOpaq
ue = false) { |
| 244 SkImageInfo info = SkImageInfo::MakeN32Premul(width, height); | 275 SkImageInfo info = SkImageInfo::MakeN32Premul(width, height); |
| 245 if (isOpaque) { | 276 if (isOpaque) { |
| 246 info.fAlphaType = kOpaque_SkAlphaType; | 277 info.fAlphaType = kOpaque_SkAlphaType; |
| 247 } | 278 } |
| 248 return this->allocPixels(info); | 279 return this->allocPixels(info); |
| 249 } | 280 } |
| 250 | 281 |
| 251 /** | 282 /** |
| 252 * Install a pixelref that wraps the specified pixels and rowBytes, and | 283 * Install a pixelref that wraps the specified pixels and rowBytes, and |
| 253 * optional ReleaseProc and context. When the pixels are no longer | 284 * optional ReleaseProc and context. When the pixels are no longer |
| 254 * referenced, if releaseProc is not null, it will be called with the | 285 * referenced, if releaseProc is not null, it will be called with the |
| 255 * pixels and context as parameters. | 286 * pixels and context as parameters. |
| 256 * On failure, the bitmap will be set to empty and return false. | 287 * On failure, the bitmap will be set to empty and return false. |
| 257 */ | 288 */ |
| 258 bool installPixels(const SkImageInfo&, void* pixels, size_t rowBytes, SkColo
rTable*, | 289 bool installPixels(const SkImageInfo&, void* pixels, size_t rowBytes, SkColo
rTable*, |
| 259 void (*releaseProc)(void* addr, void* context), void* con
text); | 290 void (*releaseProc)(void* addr, void* context), void* con
text); |
| 260 | 291 |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 313 each time. | 344 each time. |
| 314 | 345 |
| 315 If the bitmap retains a reference to the colortable (assuming it is | 346 If the bitmap retains a reference to the colortable (assuming it is |
| 316 not null) it will take care of incrementing the reference count. | 347 not null) it will take care of incrementing the reference count. |
| 317 | 348 |
| 318 @param ctable ColorTable (or null) to use with the pixels that will | 349 @param ctable ColorTable (or null) to use with the pixels that will |
| 319 be allocated. Only used if colortype == kIndex_8_SkColor
Type | 350 be allocated. Only used if colortype == kIndex_8_SkColor
Type |
| 320 @return true if the allocation succeeds. If not the pixelref field of | 351 @return true if the allocation succeeds. If not the pixelref field of |
| 321 the bitmap will be unchanged. | 352 the bitmap will be unchanged. |
| 322 */ | 353 */ |
| 323 bool allocPixels(SkColorTable* ctable = NULL) { | 354 bool SK_WARN_UNUSED_RESULT tryAllocPixels(SkColorTable* ctable = NULL) { |
| 355 return this->tryAllocPixels(NULL, ctable); |
| 356 } |
| 357 |
| 358 SK_ALLOCPIXELS_RETURN_TYPE allocPixels(SkColorTable* ctable = NULL) { |
| 324 return this->allocPixels(NULL, ctable); | 359 return this->allocPixels(NULL, ctable); |
| 325 } | 360 } |
| 326 | 361 |
| 327 /** Use the specified Allocator to create the pixelref that manages the | 362 /** Use the specified Allocator to create the pixelref that manages the |
| 328 pixel memory. It will be sized based on the current ImageInfo. | 363 pixel memory. It will be sized based on the current ImageInfo. |
| 329 If this is called multiple times, a new pixelref object will be created | 364 If this is called multiple times, a new pixelref object will be created |
| 330 each time. | 365 each time. |
| 331 | 366 |
| 332 If the bitmap retains a reference to the colortable (assuming it is | 367 If the bitmap retains a reference to the colortable (assuming it is |
| 333 not null) it will take care of incrementing the reference count. | 368 not null) it will take care of incrementing the reference count. |
| 334 | 369 |
| 335 @param allocator The Allocator to use to create a pixelref that can | 370 @param allocator The Allocator to use to create a pixelref that can |
| 336 manage the pixel memory for the current ImageInfo. | 371 manage the pixel memory for the current ImageInfo. |
| 337 If allocator is NULL, the standard HeapAllocator will b
e used. | 372 If allocator is NULL, the standard HeapAllocator will b
e used. |
| 338 @param ctable ColorTable (or null) to use with the pixels that will | 373 @param ctable ColorTable (or null) to use with the pixels that will |
| 339 be allocated. Only used if colortype == kIndex_8_SkColor
Type. | 374 be allocated. Only used if colortype == kIndex_8_SkColor
Type. |
| 340 If it is non-null and the colortype is not indexed, it w
ill | 375 If it is non-null and the colortype is not indexed, it w
ill |
| 341 be ignored. | 376 be ignored. |
| 342 @return true if the allocation succeeds. If not the pixelref field of | 377 @return true if the allocation succeeds. If not the pixelref field of |
| 343 the bitmap will be unchanged. | 378 the bitmap will be unchanged. |
| 344 */ | 379 */ |
| 345 bool allocPixels(Allocator* allocator, SkColorTable* ctable); | 380 bool SK_WARN_UNUSED_RESULT tryAllocPixels(Allocator* allocator, SkColorTable
* ctable); |
| 381 |
| 382 SK_ALLOCPIXELS_RETURN_TYPE allocPixels(Allocator* allocator, SkColorTable* c
table) { |
| 383 if (!this->tryAllocPixels(allocator, ctable)) { |
| 384 SK_ALLOCPIXELS_RETURN_FAIL; |
| 385 } |
| 386 SK_ALLOCPIXELS_RETURN_TRUE; |
| 387 } |
| 346 | 388 |
| 347 /** | 389 /** |
| 348 * Return the current pixelref object or NULL if there is none. This does | 390 * Return the current pixelref object or NULL if there is none. This does |
| 349 * not affect the refcount of the pixelref. | 391 * not affect the refcount of the pixelref. |
| 350 */ | 392 */ |
| 351 SkPixelRef* pixelRef() const { return fPixelRef; } | 393 SkPixelRef* pixelRef() const { return fPixelRef; } |
| 352 | 394 |
| 353 /** | 395 /** |
| 354 * A bitmap can reference a subset of a pixelref's pixels. That means the | 396 * A bitmap can reference a subset of a pixelref's pixels. That means the |
| 355 * bitmap's width/height can be <= the dimensions of the pixelref. The | 397 * bitmap's width/height can be <= the dimensions of the pixelref. The |
| (...skipping 480 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 836 | 878 |
| 837 inline SkPMColor SkBitmap::getIndex8Color(int x, int y) const { | 879 inline SkPMColor SkBitmap::getIndex8Color(int x, int y) const { |
| 838 SkASSERT(fPixels); | 880 SkASSERT(fPixels); |
| 839 SkASSERT(kIndex_8_SkColorType == this->colorType()); | 881 SkASSERT(kIndex_8_SkColorType == this->colorType()); |
| 840 SkASSERT((unsigned)x < (unsigned)this->width() && (unsigned)y < (unsigned)th
is->height()); | 882 SkASSERT((unsigned)x < (unsigned)this->width() && (unsigned)y < (unsigned)th
is->height()); |
| 841 SkASSERT(fColorTable); | 883 SkASSERT(fColorTable); |
| 842 return (*fColorTable)[*((const uint8_t*)fPixels + y * fRowBytes + x)]; | 884 return (*fColorTable)[*((const uint8_t*)fPixels + y * fRowBytes + x)]; |
| 843 } | 885 } |
| 844 | 886 |
| 845 #endif | 887 #endif |
| OLD | NEW |