我的代码..
mImageView_Photos.setImageBitmap(BitmapFactory.decodeFile(picturePath));
Run Code Online (Sandbox Code Playgroud)
我的logcat ..
11-27 10:51:56.325: E/AndroidRuntime(3879): FATAL EXCEPTION: main
11-27 10:51:56.325: E/AndroidRuntime(3879): Process: com.virtualmaze.golfelite, PID: 3879
11-27 10:51:56.325: E/AndroidRuntime(3879): java.lang.OutOfMemoryError
11-27 10:51:56.325: E/AndroidRuntime(3879): at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
11-27 10:51:56.325: E/AndroidRuntime(3879): at android.graphics.BitmapFactory.decodeStreamInternal(BitmapFactory.java:620)
11-27 10:51:56.325: E/AndroidRuntime(3879): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:596)
11-27 10:51:56.325: E/AndroidRuntime(3879): at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:376)
11-27 10:51:56.325: E/AndroidRuntime(3879): at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:402)
11-27 10:51:56.325: E/AndroidRuntime(3879): at com.virtualmaze.golfelite.HoleMapActivity.createImageView(HoleMapActivity.java:3839)
11-27 10:51:56.325: E/AndroidRuntime(3879): at com.virtualmaze.golfelite.HoleMapActivity.onActivityResult(HoleMapActivity.java:3762)
11-27 10:51:56.325: E/AndroidRuntime(3879): at android.app.Activity.dispatchActivityResult(Activity.java:5423)
11-27 10:51:56.325: E/AndroidRuntime(3879): at android.app.ActivityThread.deliverResults(ActivityThread.java:3347)
11-27 10:51:56.325: E/AndroidRuntime(3879): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3394)
11-27 10:51:56.325: E/AndroidRuntime(3879): at android.app.ActivityThread.access$1300(ActivityThread.java:135)
11-27 10:51:56.325: E/AndroidRuntime(3879): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1244)
11-27 10:51:56.325: E/AndroidRuntime(3879): at android.os.Handler.dispatchMessage(Handler.java:102)
11-27 10:51:56.325: E/AndroidRuntime(3879): at android.os.Looper.loop(Looper.java:136)
11-27 10:51:56.325: E/AndroidRuntime(3879): at android.app.ActivityThread.main(ActivityThread.java:5001)
11-27 10:51:56.325: E/AndroidRuntime(3879): at java.lang.reflect.Method.invokeNative(Native Method)
11-27 10:51:56.325: E/AndroidRuntime(3879): at java.lang.reflect.Method.invoke(Method.java:515)
11-27 10:51:56.325: E/AndroidRuntime(3879): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
11-27 10:51:56.325: E/AndroidRuntime(3879): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
11-27 10:51:56.325: E/AndroidRuntime(3879): at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)
我怎么能纠正这个?
当图像大小很大时,它会显示java.lang.OutOfMemoryError
试试这个解决方案
1)您可以使用Android-Universal-Image-Loader Library高效地设置图像,这是一个非常好的解决方案
要么
2)您可以在使用之前缩小位图大小...
BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();
bmpFactoryOptions.inJustDecodeBounds = true;
Bitmap bitmap = BitmapFactory.decodeFile(file, bmpFactoryOptions);
int heightRatio = (int) Math.ceil(bmpFactoryOptions.outHeight / (float) height);
int widthRatio = (int) Math.ceil(bmpFactoryOptions.outWidth / (float) width);
if(heightRatio > 1 || widthRatio > 1)
{
if(heightRatio > widthRatio)
{
bmpFactoryOptions.inSampleSize = heightRatio;
}
else
{
bmpFactoryOptions.inSampleSize = widthRatio;
}
}
bmpFactoryOptions.inJustDecodeBounds = false;
bitmap = BitmapFactory.decodeFile(file, bmpFactoryOptions);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
658 次 |
| 最近记录: |