Loading api/current.xml +11 −1 Original line number Diff line number Diff line Loading @@ -77064,6 +77064,16 @@ visibility="public" > </field> <field name="inMutable" type="boolean" transient="false" volatile="false" static="false" final="false" deprecated="not deprecated" visibility="public" > </field> <field name="inPreferQualityOverSpeed" type="boolean" transient="false" Loading Loading @@ -260231,7 +260241,7 @@ deprecated="not deprecated" visibility="public" > <parameter name="t" type="T"> <parameter name="arg0" type="T"> </parameter> </method> </interface> core/jni/android/graphics/BitmapFactory.cpp +11 −3 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ jclass gOptions_class; jfieldID gOptions_justBoundsFieldID; jfieldID gOptions_sampleSizeFieldID; jfieldID gOptions_configFieldID; jfieldID gOptions_mutableFieldID; jfieldID gOptions_ditherFieldID; jfieldID gOptions_purgeableFieldID; jfieldID gOptions_shareableFieldID; Loading Loading @@ -179,6 +180,7 @@ static jobject doDecode(JNIEnv* env, SkStream* stream, jobject padding, SkImageDecoder::Mode mode = SkImageDecoder::kDecodePixels_Mode; SkBitmap::Config prefConfig = SkBitmap::kNo_Config; bool doDither = true; bool isMutable = false; bool isPurgeable = forcePurgeable || (allowPurgeable && optionsPurgeable(env, options)); bool preferQualityOverSpeed = false; Loading @@ -196,6 +198,7 @@ static jobject doDecode(JNIEnv* env, SkStream* stream, jobject padding, jobject jconfig = env->GetObjectField(options, gOptions_configFieldID); prefConfig = GraphicsJNI::getNativeBitmapConfig(env, jconfig); isMutable = env->GetBooleanField(options, gOptions_mutableFieldID); doDither = env->GetBooleanField(options, gOptions_ditherFieldID); preferQualityOverSpeed = env->GetBooleanField(options, gOptions_preferQualityOverSpeedFieldID); Loading Loading @@ -306,15 +309,19 @@ static jobject doDecode(JNIEnv* env, SkStream* stream, jobject padding, // already have a pixelref installed. pr = bitmap->pixelRef(); } if (!isMutable) { // promise we will never change our pixels (great for sharing and pictures) pr->setImmutable(); } if (javaBitmap != NULL) { // If a java bitmap was passed in for reuse, pass it back return javaBitmap; } // now create the java bitmap return GraphicsJNI::createBitmap(env, bitmap, javaAllocator.getStorageObj(), false, ninePatchChunk); return GraphicsJNI::createBitmap(env, bitmap, javaAllocator.getStorageObj(), isMutable, ninePatchChunk); } static jobject nativeDecodeStream(JNIEnv* env, jobject clazz, Loading Loading @@ -572,6 +579,7 @@ int register_android_graphics_BitmapFactory(JNIEnv* env) { gOptions_sampleSizeFieldID = getFieldIDCheck(env, gOptions_class, "inSampleSize", "I"); gOptions_configFieldID = getFieldIDCheck(env, gOptions_class, "inPreferredConfig", "Landroid/graphics/Bitmap$Config;"); gOptions_mutableFieldID = getFieldIDCheck(env, gOptions_class, "inMutable", "Z"); gOptions_ditherFieldID = getFieldIDCheck(env, gOptions_class, "inDither", "Z"); gOptions_purgeableFieldID = getFieldIDCheck(env, gOptions_class, "inPurgeable", "Z"); gOptions_shareableFieldID = getFieldIDCheck(env, gOptions_class, "inInputShareable", "Z"); Loading graphics/java/android/graphics/Bitmap.java +1 −0 Original line number Diff line number Diff line Loading @@ -53,6 +53,7 @@ public final class Bitmap implements Parcelable { */ public byte[] mBuffer; @SuppressWarnings({"FieldCanBeLocal", "UnusedDeclaration"}) // Keep to finalize native resources private final BitmapFinalizer mFinalizer; private final boolean mIsMutable; Loading graphics/java/android/graphics/BitmapFactory.java +9 −1 Original line number Diff line number Diff line Loading @@ -63,6 +63,14 @@ public class BitmapFactory { */ public Bitmap inBitmap; /** * If set, decode methods will always return a mutable Bitmap instead of * an immutable one. This can be used for instance to programmatically apply * effects to a Bitmap loaded through BitmapFactory. */ @SuppressWarnings({"UnusedDeclaration"}) // used in native code public boolean inMutable; /** * If set to true, the decoder will return null (no bitmap), but * the out... fields will still be set, allowing the caller to query Loading tests/HwAccelerationTest/src/com/android/test/hwui/BitmapsActivity.java +9 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.graphics.Paint; import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; import android.os.Bundle; import android.util.Log; import android.view.Gravity; import android.view.View; import android.view.animation.Animation; Loading Loading @@ -62,6 +63,14 @@ public class BitmapsActivity extends Activity { mBitmap1 = BitmapFactory.decodeResource(c.getResources(), R.drawable.sunset1); mBitmap2 = BitmapFactory.decodeResource(c.getResources(), R.drawable.sunset2); Log.d("Bitmap", "mBitmap1.isMutable() = " + mBitmap1.isMutable()); Log.d("Bitmap", "mBitmap2.isMutable() = " + mBitmap2.isMutable()); BitmapFactory.Options opts = new BitmapFactory.Options(); opts.inMutable = true; Bitmap bitmap = BitmapFactory.decodeResource(c.getResources(), R.drawable.sunset1, opts); Log.d("Bitmap", "bitmap.isMutable() = " + bitmap.isMutable()); mBitmapPaint = new Paint(); mDstIn = new PorterDuffXfermode(PorterDuff.Mode.DST_IN); } Loading Loading
api/current.xml +11 −1 Original line number Diff line number Diff line Loading @@ -77064,6 +77064,16 @@ visibility="public" > </field> <field name="inMutable" type="boolean" transient="false" volatile="false" static="false" final="false" deprecated="not deprecated" visibility="public" > </field> <field name="inPreferQualityOverSpeed" type="boolean" transient="false" Loading Loading @@ -260231,7 +260241,7 @@ deprecated="not deprecated" visibility="public" > <parameter name="t" type="T"> <parameter name="arg0" type="T"> </parameter> </method> </interface>
core/jni/android/graphics/BitmapFactory.cpp +11 −3 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ jclass gOptions_class; jfieldID gOptions_justBoundsFieldID; jfieldID gOptions_sampleSizeFieldID; jfieldID gOptions_configFieldID; jfieldID gOptions_mutableFieldID; jfieldID gOptions_ditherFieldID; jfieldID gOptions_purgeableFieldID; jfieldID gOptions_shareableFieldID; Loading Loading @@ -179,6 +180,7 @@ static jobject doDecode(JNIEnv* env, SkStream* stream, jobject padding, SkImageDecoder::Mode mode = SkImageDecoder::kDecodePixels_Mode; SkBitmap::Config prefConfig = SkBitmap::kNo_Config; bool doDither = true; bool isMutable = false; bool isPurgeable = forcePurgeable || (allowPurgeable && optionsPurgeable(env, options)); bool preferQualityOverSpeed = false; Loading @@ -196,6 +198,7 @@ static jobject doDecode(JNIEnv* env, SkStream* stream, jobject padding, jobject jconfig = env->GetObjectField(options, gOptions_configFieldID); prefConfig = GraphicsJNI::getNativeBitmapConfig(env, jconfig); isMutable = env->GetBooleanField(options, gOptions_mutableFieldID); doDither = env->GetBooleanField(options, gOptions_ditherFieldID); preferQualityOverSpeed = env->GetBooleanField(options, gOptions_preferQualityOverSpeedFieldID); Loading Loading @@ -306,15 +309,19 @@ static jobject doDecode(JNIEnv* env, SkStream* stream, jobject padding, // already have a pixelref installed. pr = bitmap->pixelRef(); } if (!isMutable) { // promise we will never change our pixels (great for sharing and pictures) pr->setImmutable(); } if (javaBitmap != NULL) { // If a java bitmap was passed in for reuse, pass it back return javaBitmap; } // now create the java bitmap return GraphicsJNI::createBitmap(env, bitmap, javaAllocator.getStorageObj(), false, ninePatchChunk); return GraphicsJNI::createBitmap(env, bitmap, javaAllocator.getStorageObj(), isMutable, ninePatchChunk); } static jobject nativeDecodeStream(JNIEnv* env, jobject clazz, Loading Loading @@ -572,6 +579,7 @@ int register_android_graphics_BitmapFactory(JNIEnv* env) { gOptions_sampleSizeFieldID = getFieldIDCheck(env, gOptions_class, "inSampleSize", "I"); gOptions_configFieldID = getFieldIDCheck(env, gOptions_class, "inPreferredConfig", "Landroid/graphics/Bitmap$Config;"); gOptions_mutableFieldID = getFieldIDCheck(env, gOptions_class, "inMutable", "Z"); gOptions_ditherFieldID = getFieldIDCheck(env, gOptions_class, "inDither", "Z"); gOptions_purgeableFieldID = getFieldIDCheck(env, gOptions_class, "inPurgeable", "Z"); gOptions_shareableFieldID = getFieldIDCheck(env, gOptions_class, "inInputShareable", "Z"); Loading
graphics/java/android/graphics/Bitmap.java +1 −0 Original line number Diff line number Diff line Loading @@ -53,6 +53,7 @@ public final class Bitmap implements Parcelable { */ public byte[] mBuffer; @SuppressWarnings({"FieldCanBeLocal", "UnusedDeclaration"}) // Keep to finalize native resources private final BitmapFinalizer mFinalizer; private final boolean mIsMutable; Loading
graphics/java/android/graphics/BitmapFactory.java +9 −1 Original line number Diff line number Diff line Loading @@ -63,6 +63,14 @@ public class BitmapFactory { */ public Bitmap inBitmap; /** * If set, decode methods will always return a mutable Bitmap instead of * an immutable one. This can be used for instance to programmatically apply * effects to a Bitmap loaded through BitmapFactory. */ @SuppressWarnings({"UnusedDeclaration"}) // used in native code public boolean inMutable; /** * If set to true, the decoder will return null (no bitmap), but * the out... fields will still be set, allowing the caller to query Loading
tests/HwAccelerationTest/src/com/android/test/hwui/BitmapsActivity.java +9 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.graphics.Paint; import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; import android.os.Bundle; import android.util.Log; import android.view.Gravity; import android.view.View; import android.view.animation.Animation; Loading Loading @@ -62,6 +63,14 @@ public class BitmapsActivity extends Activity { mBitmap1 = BitmapFactory.decodeResource(c.getResources(), R.drawable.sunset1); mBitmap2 = BitmapFactory.decodeResource(c.getResources(), R.drawable.sunset2); Log.d("Bitmap", "mBitmap1.isMutable() = " + mBitmap1.isMutable()); Log.d("Bitmap", "mBitmap2.isMutable() = " + mBitmap2.isMutable()); BitmapFactory.Options opts = new BitmapFactory.Options(); opts.inMutable = true; Bitmap bitmap = BitmapFactory.decodeResource(c.getResources(), R.drawable.sunset1, opts); Log.d("Bitmap", "bitmap.isMutable() = " + bitmap.isMutable()); mBitmapPaint = new Paint(); mDstIn = new PorterDuffXfermode(PorterDuff.Mode.DST_IN); } Loading