我正在尝试模糊某些图像1024x1024,有时会出现java.lang.OutOfMemoryError,我不知道为什么。
我正在直接在平板电脑Android 4.1.2中进行测试,而且我始终有1.5gb的Ram免费。
这是我正在使用的课程:
package com.example.playerclient.blur;
import android.content.Context;
import android.graphics.Bitmap;
import android.support.v8.renderscript.*;
public class BlurBuilder {
private static final float BITMAP_SCALE = 0.6f;
public static Bitmap blur(Context context, Bitmap image, float blurRadius) {
Bitmap outputBitmap = null;
if (image != null) {
if (blurRadius == 0) {
return image;
}
if (blurRadius < 1) {
blurRadius = 1;
}
if (blurRadius > 25) {
blurRadius = 25;
}
int width = Math.round(image.getWidth() * BITMAP_SCALE);
int height = Math.round(image.getHeight() * BITMAP_SCALE);
Bitmap inputBitmap = Bitmap.createScaledBitmap(image, width, height, false);
outputBitmap = Bitmap.createBitmap(inputBitmap);
RenderScript rs = RenderScript.create(context);
ScriptIntrinsicBlur theIntrinsic = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
Allocation tmpIn = Allocation.createFromBitmap(rs, inputBitmap);
Allocation tmpOut = Allocation.createFromBitmap(rs, outputBitmap);
theIntrinsic.setRadius(blurRadius);
theIntrinsic.setInput(tmpIn);
theIntrinsic.forEach(tmpOut);
tmpOut.copyTo(outputBitmap);
}
return outputBitmap;
}
}
在这里我调用该方法:
public class MusicaActivity extends AppCompatActivity implements View.OnClickListener {
// Others methods here.
private void mostraDadosMusica() {
Intent intent = getIntent();
Musica musica = (Musica)intent.getSerializableExtra(MainActivity.VISUALIZA_PLAYER);
// Where i'm having problems.
Bitmap originalBmp = BitmapFactory.decodeResource(getResources(), musica.getAlbum().getIdCapa());
Bitmap resultBmp = BlurBuilder.blur(this, originalBmp, 15f);
backgroundImageView.setImageBitmap(resultBmp);
}
}
这里是异常消息:
11-04 22:05:07.453 18928-18928 / com.example.playerclient E / Android运行时:致命异常:主要 java.lang.OutOfMemoryError 在android.graphics.BitmapFactory.nativeDecodeAsset(本地方法) 在android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:636) 在android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:484) 在android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:512) 在android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:542) 在com.example.playerclient.activity.MusicaActivity.mostraDadosMusica(MusicaActivity.java:48) 在com.example.playerclient.activity.MusicaActivity.onCreate(MusicaActivity.java:87) 在android.app.Activity.performCreate(Activity.java:5188) 在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094) 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074) 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135) 在android.app.ActivityThread.access $ 700(ActivityThread.java:140) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1237) 在android.os.Handler.dispatchMessage(Handler.java:99) 在android.os.Looper.loop(Looper.java:137) 在android.app.ActivityThread.main(ActivityThread.java:4921) 在java.lang.reflect.Method.invokeNative(本机方法) 在java.lang.reflect.Method.invoke(Method.java:511) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1038) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 在dalvik.system.NativeStart.main(本机方法)