Use size_t for rowBytes.

Previously, we were using uint32_t sometimes, int sometimes, and
size_t sometimes. Switch to using size_t, since we are actually
talking about a number of bytes.

In copyPixelsTo, use 0 as a flag to use the internal rowBytes,
which is more consistent with setConfig.

Review URL: https://codereview.appspot.com/7370047

git-svn-id: http://skia.googlecode.com/svn/trunk@7843 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
scroggo@google.com 2013-02-25 16:02:36 +00:00
parent 9447103029
commit 0ba4bf427a
3 changed files with 19 additions and 20 deletions

View File

@ -112,7 +112,7 @@ public:
int height() const { return fHeight; } int height() const { return fHeight; }
/** Return the number of bytes between subsequent rows of the bitmap. /** Return the number of bytes between subsequent rows of the bitmap.
*/ */
int rowBytes() const { return fRowBytes; } size_t rowBytes() const { return fRowBytes; }
/** Return the shift amount per pixel (i.e. 0 for 1-byte per pixel, 1 for /** 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 2-bytes per pixel configs, 2 for 4-bytes per pixel configs). Return 0
@ -206,7 +206,7 @@ public:
/** Given a config and a width, this computes the optimal rowBytes value. This is called automatically /** Given a config and a width, this computes the optimal rowBytes value. This is called automatically
if you pass 0 for rowBytes to setConfig(). if you pass 0 for rowBytes to setConfig().
*/ */
static int ComputeRowBytes(Config c, int width); static size_t ComputeRowBytes(Config c, int width);
/** Return the bytes-per-pixel for the specified config. If the config is /** Return the bytes-per-pixel for the specified config. If the config is
not at least 1-byte per pixel, return 0, including for kNo_Config. not at least 1-byte per pixel, return 0, including for kNo_Config.
@ -251,7 +251,7 @@ public:
ComputeRowBytes() is called to compute the optimal value. This resets ComputeRowBytes() is called to compute the optimal value. This resets
any pixel/colortable ownership, just like reset(). any pixel/colortable ownership, just like reset().
*/ */
void setConfig(Config, int width, int height, int rowBytes = 0); void setConfig(Config, int width, int height, size_t rowBytes = 0);
/** Use this to assign a new pixel address for an existing bitmap. This /** Use this to assign a new pixel address for an existing bitmap. This
will automatically release any pixelref previously installed. Only call will automatically release any pixelref previously installed. Only call
this if you are handling ownership/lifetime of the pixel memory. this if you are handling ownership/lifetime of the pixel memory.
@ -278,13 +278,12 @@ public:
@param dst Location of destination buffer. @param dst Location of destination buffer.
@param dstSize Size of destination buffer. Must be large enough to hold @param dstSize Size of destination buffer. Must be large enough to hold
pixels using indicated stride. pixels using indicated stride.
@param dstRowBytes Width of each line in the buffer. If -1, uses @param dstRowBytes Width of each line in the buffer. If 0, uses
bitmap's internal stride. bitmap's internal stride.
@param preserveDstPad Must we preserve padding in the dst @param preserveDstPad Must we preserve padding in the dst
*/ */
bool copyPixelsTo(void* const dst, size_t dstSize, int dstRowBytes = -1, bool copyPixelsTo(void* const dst, size_t dstSize, size_t dstRowBytes = 0,
bool preserveDstPad = false) bool preserveDstPad = false) const;
const;
/** Use the standard HeapAllocator to create the pixelref that manages the /** Use the standard HeapAllocator to create the pixelref that manages the
pixel memory. It will be sized based on the current width/height/config. pixel memory. It will be sized based on the current width/height/config.
@ -646,7 +645,7 @@ private:
kImageIsImmutable_Flag = 0x04 kImageIsImmutable_Flag = 0x04
}; };
uint32_t fRowBytes; size_t fRowBytes;
uint32_t fWidth; uint32_t fWidth;
uint32_t fHeight; uint32_t fHeight;
uint8_t fConfig; uint8_t fConfig;
@ -655,14 +654,14 @@ private:
/* Internal computations for safe size. /* Internal computations for safe size.
*/ */
static Sk64 ComputeSafeSize64(Config config, static Sk64 ComputeSafeSize64(Config config,
uint32_t width, uint32_t width,
uint32_t height, uint32_t height,
uint32_t rowBytes); size_t rowBytes);
static size_t ComputeSafeSize(Config config, static size_t ComputeSafeSize(Config config,
uint32_t width, uint32_t width,
uint32_t height, uint32_t height,
uint32_t rowBytes); size_t rowBytes);
/* Unreference any pixelrefs or colortables /* Unreference any pixelrefs or colortables
*/ */

View File

@ -181,7 +181,7 @@ int SkBitmap::ComputeBytesPerPixel(SkBitmap::Config config) {
return bpp; return bpp;
} }
int SkBitmap::ComputeRowBytes(Config c, int width) { size_t SkBitmap::ComputeRowBytes(Config c, int width) {
if (width < 0) { if (width < 0) {
return 0; return 0;
} }
@ -232,7 +232,7 @@ size_t SkBitmap::ComputeSize(Config c, int width, int height) {
Sk64 SkBitmap::ComputeSafeSize64(Config config, Sk64 SkBitmap::ComputeSafeSize64(Config config,
uint32_t width, uint32_t width,
uint32_t height, uint32_t height,
uint32_t rowBytes) { size_t rowBytes) {
Sk64 safeSize; Sk64 safeSize;
safeSize.setZero(); safeSize.setZero();
if (height > 0) { if (height > 0) {
@ -248,7 +248,7 @@ Sk64 SkBitmap::ComputeSafeSize64(Config config,
size_t SkBitmap::ComputeSafeSize(Config config, size_t SkBitmap::ComputeSafeSize(Config config,
uint32_t width, uint32_t width,
uint32_t height, uint32_t height,
uint32_t rowBytes) { size_t rowBytes) {
Sk64 safeSize = ComputeSafeSize64(config, width, height, rowBytes); Sk64 safeSize = ComputeSafeSize64(config, width, height, rowBytes);
return (safeSize.is32() ? safeSize.get32() : 0); return (safeSize.is32() ? safeSize.get32() : 0);
} }
@ -266,10 +266,10 @@ void SkBitmap::getBounds(SkIRect* bounds) const {
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
void SkBitmap::setConfig(Config c, int width, int height, int rowBytes) { void SkBitmap::setConfig(Config c, int width, int height, size_t rowBytes) {
this->freePixels(); this->freePixels();
if ((width | height | rowBytes) < 0) { if ((width | height) < 0) {
goto err; goto err;
} }
@ -465,11 +465,11 @@ Sk64 SkBitmap::getSafeSize64() const {
} }
bool SkBitmap::copyPixelsTo(void* const dst, size_t dstSize, bool SkBitmap::copyPixelsTo(void* const dst, size_t dstSize,
int dstRowBytes, bool preserveDstPad) const { size_t dstRowBytes, bool preserveDstPad) const {
if (dstRowBytes == -1) if (0 == dstRowBytes) {
dstRowBytes = fRowBytes; dstRowBytes = fRowBytes;
SkASSERT(dstRowBytes >= 0); }
if (getConfig() == kRLE_Index8_Config || if (getConfig() == kRLE_Index8_Config ||
dstRowBytes < ComputeRowBytes(getConfig(), fWidth) || dstRowBytes < ComputeRowBytes(getConfig(), fWidth) ||

View File

@ -39,7 +39,7 @@ static void build_compressed_data(void* buffer, const SkBitmap& bitmap) {
// always skip a full 256 number of entries, even if we memcpy'd fewer // always skip a full 256 number of entries, even if we memcpy'd fewer
dst += kGrColorTableSize; dst += kGrColorTableSize;
if (bitmap.width() == bitmap.rowBytes()) { if ((unsigned)bitmap.width() == bitmap.rowBytes()) {
memcpy(dst, bitmap.getPixels(), bitmap.getSize()); memcpy(dst, bitmap.getPixels(), bitmap.getSize());
} else { } else {
// need to trim off the extra bytes per row // need to trim off the extra bytes per row