Loading core/jni/android/graphics/BitmapFactory.cpp +0 −29 Original line number Diff line number Diff line Loading @@ -116,30 +116,6 @@ static void scaleNinePatchChunk(android::Res_png_9patch* chunk, float scale) { } } static jbyteArray nativeScaleNinePatch(JNIEnv* env, jobject, jbyteArray chunkObject, jfloat scale, jobject padding) { jbyte* array = env->GetByteArrayElements(chunkObject, 0); if (array != NULL) { size_t chunkSize = env->GetArrayLength(chunkObject); void* storage = alloca(chunkSize); android::Res_png_9patch* chunk = static_cast<android::Res_png_9patch*>(storage); memcpy(chunk, array, chunkSize); android::Res_png_9patch::deserialize(chunk); scaleNinePatchChunk(chunk, scale); memcpy(array, chunk, chunkSize); if (padding) { GraphicsJNI::set_jrect(env, padding, chunk->paddingLeft, chunk->paddingTop, chunk->paddingRight, chunk->paddingBottom); } env->ReleaseByteArrayElements(chunkObject, array, 0); } return chunkObject; } static SkPixelRef* installPixelRef(SkBitmap* bitmap, SkStream* stream, int sampleSize, bool ditherImage) { Loading Loading @@ -624,11 +600,6 @@ static JNINativeMethod gMethods[] = { (void*)nativeDecodeByteArray }, { "nativeScaleNinePatch", "([BFLandroid/graphics/Rect;)[B", (void*)nativeScaleNinePatch }, { "nativeIsSeekable", "(Ljava/io/FileDescriptor;)Z", (void*)nativeIsSeekable Loading graphics/java/android/graphics/BitmapFactory.java +45 −34 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package android.graphics; import android.content.res.AssetManager; import android.content.res.Resources; import android.os.Trace; import android.util.DisplayMetrics; import android.util.Log; import android.util.TypedValue; Loading Loading @@ -436,12 +437,21 @@ public class BitmapFactory { if ((offset | length) < 0 || data.length < offset + length) { throw new ArrayIndexOutOfBoundsException(); } Bitmap bm = nativeDecodeByteArray(data, offset, length, opts); Bitmap bm; Trace.traceBegin(Trace.TRACE_TAG_GRAPHICS, "decodeBitmap"); try { bm = nativeDecodeByteArray(data, offset, length, opts); if (bm == null && opts != null && opts.inBitmap != null) { throw new IllegalArgumentException("Problem decoding into existing bitmap"); } setDensityFromOptions(bm, opts); } finally { Trace.traceEnd(Trace.TRACE_TAG_GRAPHICS); } return bm; } Loading Loading @@ -508,8 +518,11 @@ public class BitmapFactory { return null; } // we need mark/reset to work properly Bitmap bm; Trace.traceBegin(Trace.TRACE_TAG_GRAPHICS, "decodeBitmap"); try { // we need mark/reset to work properly if (!is.markSupported()) { is = new BufferedInputStream(is, DECODE_BUFFER_SIZE); } Loading @@ -519,9 +532,6 @@ public class BitmapFactory { // value should be. is.mark(1024); Bitmap bm; boolean finish = true; if (is instanceof AssetManager.AssetInputStream) { final int asset = ((AssetManager.AssetInputStream) is).getAssetInt(); bm = nativeDecodeAsset(asset, outPadding, opts); Loading @@ -541,6 +551,10 @@ public class BitmapFactory { } setDensityFromOptions(bm, opts); } finally { Trace.traceEnd(Trace.TRACE_TAG_GRAPHICS); } return bm; } Loading Loading @@ -608,10 +622,7 @@ public class BitmapFactory { private static native Bitmap nativeDecodeFileDescriptor(FileDescriptor fd, Rect padding, Options opts); private static native Bitmap nativeDecodeAsset(int asset, Rect padding, Options opts); private static native Bitmap nativeDecodeAsset(int asset, Rect padding, Options opts, boolean applyScale, float scale); private static native Bitmap nativeDecodeByteArray(byte[] data, int offset, int length, Options opts); private static native byte[] nativeScaleNinePatch(byte[] chunk, float scale, Rect pad); private static native boolean nativeIsSeekable(FileDescriptor fd); } Loading
core/jni/android/graphics/BitmapFactory.cpp +0 −29 Original line number Diff line number Diff line Loading @@ -116,30 +116,6 @@ static void scaleNinePatchChunk(android::Res_png_9patch* chunk, float scale) { } } static jbyteArray nativeScaleNinePatch(JNIEnv* env, jobject, jbyteArray chunkObject, jfloat scale, jobject padding) { jbyte* array = env->GetByteArrayElements(chunkObject, 0); if (array != NULL) { size_t chunkSize = env->GetArrayLength(chunkObject); void* storage = alloca(chunkSize); android::Res_png_9patch* chunk = static_cast<android::Res_png_9patch*>(storage); memcpy(chunk, array, chunkSize); android::Res_png_9patch::deserialize(chunk); scaleNinePatchChunk(chunk, scale); memcpy(array, chunk, chunkSize); if (padding) { GraphicsJNI::set_jrect(env, padding, chunk->paddingLeft, chunk->paddingTop, chunk->paddingRight, chunk->paddingBottom); } env->ReleaseByteArrayElements(chunkObject, array, 0); } return chunkObject; } static SkPixelRef* installPixelRef(SkBitmap* bitmap, SkStream* stream, int sampleSize, bool ditherImage) { Loading Loading @@ -624,11 +600,6 @@ static JNINativeMethod gMethods[] = { (void*)nativeDecodeByteArray }, { "nativeScaleNinePatch", "([BFLandroid/graphics/Rect;)[B", (void*)nativeScaleNinePatch }, { "nativeIsSeekable", "(Ljava/io/FileDescriptor;)Z", (void*)nativeIsSeekable Loading
graphics/java/android/graphics/BitmapFactory.java +45 −34 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package android.graphics; import android.content.res.AssetManager; import android.content.res.Resources; import android.os.Trace; import android.util.DisplayMetrics; import android.util.Log; import android.util.TypedValue; Loading Loading @@ -436,12 +437,21 @@ public class BitmapFactory { if ((offset | length) < 0 || data.length < offset + length) { throw new ArrayIndexOutOfBoundsException(); } Bitmap bm = nativeDecodeByteArray(data, offset, length, opts); Bitmap bm; Trace.traceBegin(Trace.TRACE_TAG_GRAPHICS, "decodeBitmap"); try { bm = nativeDecodeByteArray(data, offset, length, opts); if (bm == null && opts != null && opts.inBitmap != null) { throw new IllegalArgumentException("Problem decoding into existing bitmap"); } setDensityFromOptions(bm, opts); } finally { Trace.traceEnd(Trace.TRACE_TAG_GRAPHICS); } return bm; } Loading Loading @@ -508,8 +518,11 @@ public class BitmapFactory { return null; } // we need mark/reset to work properly Bitmap bm; Trace.traceBegin(Trace.TRACE_TAG_GRAPHICS, "decodeBitmap"); try { // we need mark/reset to work properly if (!is.markSupported()) { is = new BufferedInputStream(is, DECODE_BUFFER_SIZE); } Loading @@ -519,9 +532,6 @@ public class BitmapFactory { // value should be. is.mark(1024); Bitmap bm; boolean finish = true; if (is instanceof AssetManager.AssetInputStream) { final int asset = ((AssetManager.AssetInputStream) is).getAssetInt(); bm = nativeDecodeAsset(asset, outPadding, opts); Loading @@ -541,6 +551,10 @@ public class BitmapFactory { } setDensityFromOptions(bm, opts); } finally { Trace.traceEnd(Trace.TRACE_TAG_GRAPHICS); } return bm; } Loading Loading @@ -608,10 +622,7 @@ public class BitmapFactory { private static native Bitmap nativeDecodeFileDescriptor(FileDescriptor fd, Rect padding, Options opts); private static native Bitmap nativeDecodeAsset(int asset, Rect padding, Options opts); private static native Bitmap nativeDecodeAsset(int asset, Rect padding, Options opts, boolean applyScale, float scale); private static native Bitmap nativeDecodeByteArray(byte[] data, int offset, int length, Options opts); private static native byte[] nativeScaleNinePatch(byte[] chunk, float scale, Rect pad); private static native boolean nativeIsSeekable(FileDescriptor fd); }