| Index: include/core/SkBitmap.h
|
| diff --git a/include/core/SkBitmap.h b/include/core/SkBitmap.h
|
| index 42ef8778bfcf05c66221a2bcff2ded6dec875c30..87d4649228b48dfb7891768306e5898d98f190ad 100644
|
| --- a/include/core/SkBitmap.h
|
| +++ b/include/core/SkBitmap.h
|
| @@ -79,42 +79,10 @@ public:
|
| // This method is not exported to java.
|
| void swap(SkBitmap& other);
|
|
|
| - ///////////////////////////////////////////////////////////////////////////
|
| -
|
| - const SkImageInfo& info() const { return fInfo; }
|
| -
|
| - int width() const { return fInfo.fWidth; }
|
| - int height() const { return fInfo.fHeight; }
|
| - SkColorType colorType() const { return fInfo.fColorType; }
|
| - SkAlphaType alphaType() const { return fInfo.fAlphaType; }
|
| -
|
| - /** Return the number of bytes per pixel based on the config. If the config
|
| - does not have at least 1 byte per (e.g. kA1_Config) then 0 is returned.
|
| - */
|
| - int bytesPerPixel() const { return fInfo.bytesPerPixel(); }
|
| -
|
| - /** Return the rowbytes expressed as a number of pixels (like width and
|
| - height). Note, for 1-byte per pixel configs like kA8_Config, this will
|
| - return the same as rowBytes(). Is undefined for configs that are less
|
| - than 1-byte per pixel (e.g. kA1_Config)
|
| - */
|
| - int rowBytesAsPixels() const {
|
| - return fRowBytes >> this->shiftPerPixel();
|
| - }
|
| -
|
| - /** Return the shift amount per pixel (i.e. 0 for 1-byte per pixel, 1 for
|
| - 2-bytes per pixel configs, 2 for 4-bytes per pixel configs). Return 0
|
| - for configs that are not at least 1-byte per pixel (e.g. kA1_Config
|
| - or kNo_Config)
|
| - */
|
| - int shiftPerPixel() const { return this->bytesPerPixel() >> 1; }
|
| -
|
| - ///////////////////////////////////////////////////////////////////////////
|
| -
|
| /** Return true iff the bitmap has empty dimensions.
|
| * Hey! Before you use this, see if you really want to know drawsNothing() instead.
|
| */
|
| - bool empty() const { return fInfo.isEmpty(); }
|
| + bool empty() const { return 0 == fWidth || 0 == fHeight; }
|
|
|
| /** Return true iff the bitmap has no pixelref. Note: this can return true even if the
|
| * dimensions of the bitmap are > 0 (see empty()).
|
| @@ -127,14 +95,41 @@ public:
|
| bool drawsNothing() const { return this->empty() || this->isNull(); }
|
|
|
| /** Return the config for the bitmap. */
|
| - Config config() const;
|
| + Config config() const { return (Config)fConfig; }
|
|
|
| SK_ATTR_DEPRECATED("use config()")
|
| Config getConfig() const { return this->config(); }
|
|
|
| + /** Return the bitmap's width, in pixels. */
|
| + int width() const { return fWidth; }
|
| +
|
| + /** Return the bitmap's height, in pixels. */
|
| + int height() const { return fHeight; }
|
| +
|
| /** Return the number of bytes between subsequent rows of the bitmap. */
|
| size_t rowBytes() const { return fRowBytes; }
|
|
|
| + /** Return the shift amount per pixel (i.e. 0 for 1-byte per pixel, 1 for
|
| + 2-bytes per pixel configs, 2 for 4-bytes per pixel configs). Return 0
|
| + for configs that are not at least 1-byte per pixel (e.g. kA1_Config
|
| + or kNo_Config)
|
| + */
|
| + int shiftPerPixel() const { return fBytesPerPixel >> 1; }
|
| +
|
| + /** Return the number of bytes per pixel based on the config. If the config
|
| + does not have at least 1 byte per (e.g. kA1_Config) then 0 is returned.
|
| + */
|
| + int bytesPerPixel() const { return fBytesPerPixel; }
|
| +
|
| + /** Return the rowbytes expressed as a number of pixels (like width and
|
| + height). Note, for 1-byte per pixel configs like kA8_Config, this will
|
| + return the same as rowBytes(). Is undefined for configs that are less
|
| + than 1-byte per pixel (e.g. kA1_Config)
|
| + */
|
| + int rowBytesAsPixels() const { return fRowBytes >> (fBytesPerPixel >> 1); }
|
| +
|
| + SkAlphaType alphaType() const { return (SkAlphaType)fAlphaType; }
|
| +
|
| /**
|
| * Set the bitmap's alphaType, returning true on success. If false is
|
| * returned, then the specified new alphaType is incompatible with the
|
| @@ -154,19 +149,19 @@ public:
|
| Note this truncates the result to 32bits. Call getSize64() to detect
|
| if the real size exceeds 32bits.
|
| */
|
| - size_t getSize() const { return fInfo.fHeight * fRowBytes; }
|
| + size_t getSize() const { return fHeight * fRowBytes; }
|
|
|
| /** Return the number of bytes from the pointer returned by getPixels()
|
| to the end of the allocated space in the buffer. Required in
|
| cases where extractSubset has been called.
|
| */
|
| - size_t getSafeSize() const { return fInfo.getSafeSize(fRowBytes); }
|
| + size_t getSafeSize() const ;
|
|
|
| /**
|
| * Return the full size of the bitmap, in bytes.
|
| */
|
| int64_t computeSize64() const {
|
| - return sk_64_mul(fInfo.fHeight, fRowBytes);
|
| + return sk_64_mul(fHeight, fRowBytes);
|
| }
|
|
|
| /**
|
| @@ -175,7 +170,7 @@ public:
|
| * than computeSize64() if there is any rowbytes padding beyond the width.
|
| */
|
| int64_t computeSafeSize64() const {
|
| - return fInfo.getSafeSize64(fRowBytes);
|
| + return ComputeSafeSize64((Config)fConfig, fWidth, fHeight, fRowBytes);
|
| }
|
|
|
| /** Returns true if this bitmap is marked as immutable, meaning that the
|
| @@ -309,18 +304,11 @@ public:
|
| void* context);
|
|
|
| /**
|
| - * DEPRECATED: call info().
|
| + * If the bitmap's config can be represented as SkImageInfo, return true,
|
| + * and if info is not-null, set it to the bitmap's info. If it cannot be
|
| + * represented as SkImageInfo, return false and ignore the info parameter.
|
| */
|
| - bool asImageInfo(SkImageInfo* info) const {
|
| - // compatibility: return false for kUnknown
|
| - if (kUnknown_SkColorType == this->colorType()) {
|
| - return false;
|
| - }
|
| - if (info) {
|
| - *info = this->info();
|
| - }
|
| - return true;
|
| - }
|
| + bool asImageInfo(SkImageInfo* info) const;
|
|
|
| /** Use this to assign a new pixel address for an existing bitmap. This
|
| will automatically release any pixelref previously installed. Only call
|
| @@ -462,8 +450,8 @@ public:
|
| */
|
| GrTexture* getTexture() const;
|
|
|
| - /** Return the bitmap's colortable, if it uses one (i.e. colorType is
|
| - Index_8) and the pixels are locked.
|
| + /** Return the bitmap's colortable, if it uses one (i.e. fConfig is
|
| + kIndex8_Config) and the pixels are locked.
|
| Otherwise returns NULL. Does not affect the colortable's
|
| reference count.
|
| */
|
| @@ -754,11 +742,13 @@ private:
|
| #endif
|
| };
|
|
|
| - SkImageInfo fInfo;
|
| -
|
| uint32_t fRowBytes;
|
| -
|
| + uint32_t fWidth;
|
| + uint32_t fHeight;
|
| + uint8_t fConfig;
|
| + uint8_t fAlphaType;
|
| uint8_t fFlags;
|
| + uint8_t fBytesPerPixel; // based on config
|
|
|
| void internalErase(const SkIRect&, U8CPU a, U8CPU r, U8CPU g, U8CPU b)const;
|
|
|
| @@ -870,29 +860,29 @@ private:
|
|
|
| inline uint32_t* SkBitmap::getAddr32(int x, int y) const {
|
| SkASSERT(fPixels);
|
| - SkASSERT(this->config() == kARGB_8888_Config);
|
| - SkASSERT((unsigned)x < (unsigned)this->width() && (unsigned)y < (unsigned)this->height());
|
| + SkASSERT(fConfig == kARGB_8888_Config);
|
| + SkASSERT((unsigned)x < fWidth && (unsigned)y < fHeight);
|
| return (uint32_t*)((char*)fPixels + y * fRowBytes + (x << 2));
|
| }
|
|
|
| inline uint16_t* SkBitmap::getAddr16(int x, int y) const {
|
| SkASSERT(fPixels);
|
| - SkASSERT(this->config() == kRGB_565_Config || this->config() == kARGB_4444_Config);
|
| - SkASSERT((unsigned)x < (unsigned)this->width() && (unsigned)y < (unsigned)this->height());
|
| + SkASSERT(fConfig == kRGB_565_Config || fConfig == kARGB_4444_Config);
|
| + SkASSERT((unsigned)x < fWidth && (unsigned)y < fHeight);
|
| return (uint16_t*)((char*)fPixels + y * fRowBytes + (x << 1));
|
| }
|
|
|
| inline uint8_t* SkBitmap::getAddr8(int x, int y) const {
|
| SkASSERT(fPixels);
|
| - SkASSERT(this->config() == kA8_Config || this->config() == kIndex8_Config);
|
| - SkASSERT((unsigned)x < (unsigned)this->width() && (unsigned)y < (unsigned)this->height());
|
| + SkASSERT(fConfig == kA8_Config || fConfig == kIndex8_Config);
|
| + SkASSERT((unsigned)x < fWidth && (unsigned)y < fHeight);
|
| return (uint8_t*)fPixels + y * fRowBytes + x;
|
| }
|
|
|
| inline SkPMColor SkBitmap::getIndex8Color(int x, int y) const {
|
| SkASSERT(fPixels);
|
| - SkASSERT(this->config() == kIndex8_Config);
|
| - SkASSERT((unsigned)x < (unsigned)this->width() && (unsigned)y < (unsigned)this->height());
|
| + SkASSERT(fConfig == kIndex8_Config);
|
| + SkASSERT((unsigned)x < fWidth && (unsigned)y < fHeight);
|
| SkASSERT(fColorTable);
|
| return (*fColorTable)[*((const uint8_t*)fPixels + y * fRowBytes + x)];
|
| }
|
|
|