diff --git a/core/jni/android/graphics/BitmapFactory.cpp b/core/jni/android/graphics/BitmapFactory.cpp index 5507047ddf4cb..47ed2c1723e1b 100644 --- a/core/jni/android/graphics/BitmapFactory.cpp +++ b/core/jni/android/graphics/BitmapFactory.cpp @@ -304,7 +304,15 @@ static jobject doDecode(JNIEnv* env, SkStream* stream, jobject padding, return nullObjectReturn("layoutBounds == null"); } - env->SetIntArrayRegion(layoutBounds, 0, 4, (jint*) peeker.fLayoutBounds); + jint scaledBounds[4]; + if (willScale) { + for (int i=0; i<4; i++) { + scaledBounds[i] = (jint)((((jint*)peeker.fLayoutBounds)[i]*scale) + .5f); + } + } else { + memcpy(scaledBounds, (jint*)peeker.fLayoutBounds, sizeof(scaledBounds)); + } + env->SetIntArrayRegion(layoutBounds, 0, 4, scaledBounds); if (javaBitmap != NULL) { env->SetObjectField(javaBitmap, gBitmap_layoutBoundsFieldID, layoutBounds); } diff --git a/graphics/java/android/graphics/BitmapFactory.java b/graphics/java/android/graphics/BitmapFactory.java index 1599e40a8d412..5094df188050b 100644 --- a/graphics/java/android/graphics/BitmapFactory.java +++ b/graphics/java/android/graphics/BitmapFactory.java @@ -556,6 +556,7 @@ public class BitmapFactory { return bm; } byte[] np = bm.getNinePatchChunk(); + int[] lb = bm.getLayoutBounds(); final boolean isNinePatch = np != null && NinePatch.isNinePatchChunk(np); if (opts.inScaled || isNinePatch) { float scale = targetDensity / (float) density; @@ -569,6 +570,13 @@ public class BitmapFactory { np = nativeScaleNinePatch(np, scale, outPadding); bm.setNinePatchChunk(np); } + if (lb != null) { + int[] newLb = new int[lb.length]; + for (int i=0; i