diff options
| author | 2019-10-16 16:42:32 -0400 | |
|---|---|---|
| committer | 2019-10-17 14:22:48 +0000 | |
| commit | 6e07e16397d0e2afb75780310d07bc6565b45a40 (patch) | |
| tree | 709b0715cae758a4587eb250e53bc1fea6b3f6c4 | |
| parent | a3b702fa84b258f4bfa456223c2e02aca76de01b (diff) | |
Fix scaling + cropping in ImageDecoder
Bug: 141735646
Test: I9ab9115ee4cbc74549f7b914d99b667c700199d5
When using a subset, do not change desiredWidth/desiredHeight, which
changes the scale used below. Instead, just change the size of the
SkBitmap, so it looks correct.
Change-Id: Ie9682afb9324bcdfc81f1d9664f9fcc3891f8939
| -rw-r--r-- | core/jni/android/graphics/ImageDecoder.cpp | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/core/jni/android/graphics/ImageDecoder.cpp b/core/jni/android/graphics/ImageDecoder.cpp index ec91cbf854a6..4d907f6d4942 100644 --- a/core/jni/android/graphics/ImageDecoder.cpp +++ b/core/jni/android/graphics/ImageDecoder.cpp @@ -374,16 +374,17 @@ static jobject ImageDecoder_nDecodeBitmap(JNIEnv* env, jobject /*clazz*/, jlong if (scale || jsubset) { int translateX = 0; int translateY = 0; + SkImageInfo scaledInfo; if (jsubset) { SkIRect subset; GraphicsJNI::jrect_to_irect(env, jsubset, &subset); - translateX = -subset.fLeft; - translateY = -subset.fTop; - desiredWidth = subset.width(); - desiredHeight = subset.height(); + translateX = -subset.fLeft; + translateY = -subset.fTop; + scaledInfo = bitmapInfo.makeWH(subset.width(), subset.height()); + } else { + scaledInfo = bitmapInfo.makeWH(desiredWidth, desiredHeight); } - SkImageInfo scaledInfo = bitmapInfo.makeWH(desiredWidth, desiredHeight); SkBitmap scaledBm; if (!scaledBm.setInfo(scaledInfo)) { doThrowIOE(env, "Failed scaled setInfo"); |