diff options
| author | 2014-03-21 11:09:45 -0700 | |
|---|---|---|
| committer | 2014-03-21 18:16:18 +0000 | |
| commit | 91f0a455bb6670b59b8d15cc7a9adb0e6d7f146d (patch) | |
| tree | d1ae665f9ea5884833b49c5892f075ed94bb77e8 | |
| parent | 3f5232220f2db839f690489ed272113f660daa40 (diff) | |
Eliminate mHasAlpha
Bug: 13580771
The cached value mHasAlpha on Bitmap could get out of sync with the
real value stored in the SkBitmap. Fix this by just eliminating the
cached value. This adds an extra JNI call in copy(), createBitmap(),
and setPremultiplied(), none of which are going to be significantly
impacted by the extra JNI call.
Change-Id: I4fce069a77d9b3bbb47dde04275ff8510ce7e4f0
| -rw-r--r-- | graphics/java/android/graphics/Bitmap.java | 18 |
1 files changed, 3 insertions, 15 deletions
diff --git a/graphics/java/android/graphics/Bitmap.java b/graphics/java/android/graphics/Bitmap.java index 17727d3160f0..74838ee2c14b 100644 --- a/graphics/java/android/graphics/Bitmap.java +++ b/graphics/java/android/graphics/Bitmap.java @@ -68,15 +68,6 @@ public final class Bitmap implements Parcelable { */ private boolean mIsPremultiplied; - /** - * Whether the Bitmap's content is expected to have alpha. Note that hasAlpha() - * does not directly return this value, because hasAlpha() may never return true - * for a 565 Bitmap. - * - * Any time this or mIsPremultiplied is changed, both are passed to native so they - * are not order dependent. - */ - private boolean mHasAlpha; private byte[] mNinePatchChunk; // may be null private int[] mLayoutBounds; // may be null private int mWidth; @@ -564,7 +555,7 @@ public final class Bitmap implements Parcelable { checkRecycled("Can't copy a recycled bitmap"); Bitmap b = nativeCopy(mNativeBitmap, config.nativeInt, isMutable); if (b != null) { - b.setAlphaAndPremultiplied(mHasAlpha, mIsPremultiplied); + b.setAlphaAndPremultiplied(hasAlpha(), mIsPremultiplied); b.mDensity = mDensity; } return b; @@ -741,7 +732,7 @@ public final class Bitmap implements Parcelable { // The new bitmap was created from a known bitmap source so assume that // they use the same density bitmap.mDensity = source.mDensity; - bitmap.setAlphaAndPremultiplied(source.mHasAlpha, source.mIsPremultiplied); + bitmap.setAlphaAndPremultiplied(source.hasAlpha(), source.mIsPremultiplied); canvas.setBitmap(bitmap); canvas.drawBitmap(source, srcR, dstR, paint); @@ -894,7 +885,6 @@ public final class Bitmap implements Parcelable { if (display != null) { bm.mDensity = display.densityDpi; } - bm.mHasAlpha = true; return bm; } @@ -1062,12 +1052,11 @@ public final class Bitmap implements Parcelable { */ public final void setPremultiplied(boolean premultiplied) { mIsPremultiplied = premultiplied; - nativeSetAlphaAndPremultiplied(mNativeBitmap, mHasAlpha, premultiplied); + nativeSetAlphaAndPremultiplied(mNativeBitmap, hasAlpha(), premultiplied); } /** Helper function to set both alpha and premultiplied. **/ private final void setAlphaAndPremultiplied(boolean hasAlpha, boolean premultiplied) { - mHasAlpha = hasAlpha; mIsPremultiplied = premultiplied; nativeSetAlphaAndPremultiplied(mNativeBitmap, hasAlpha, premultiplied); } @@ -1230,7 +1219,6 @@ public final class Bitmap implements Parcelable { * non-opaque per-pixel alpha values. */ public void setHasAlpha(boolean hasAlpha) { - mHasAlpha = hasAlpha; nativeSetAlphaAndPremultiplied(mNativeBitmap, hasAlpha, mIsPremultiplied); } |