android通过BitmapFactory.decodeFile获取图片bitmap报内存溢出的解决办法

  android通过BitmapFactory.decodeFile获取图片bitmap报内存溢出的解决办法

  原方法:

    public static Bitmap getSmallBitmap(String filePath, int reqWidth, int reqHeight) {
        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(filePath, options);

        // Calculate inSampleSize
        options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);

        // Decode bitmap with inSampleSize set
        options.inJustDecodeBounds = false;

        return BitmapFactory.decodeFile(filePath, options);
    }

  异常:

06-23 11:41:04.817 24959-24959/com.test.tax E/AndroidRuntime: FATAL EXCEPTION: main
                                                                Process: com.test.tax, PID: 24959
                                                                java.lang.OutOfMemoryError
                                                                    at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
                                                                    at android.graphics.BitmapFactory.decodeStreamInternal(BitmapFactory.java:623)
                                                                    at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:599)
                                                                    at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:378)
                                                                    at com.test.tax.utils.PictureUtils.getSmallBitmap(PictureUtils.java:138)
                                                                    at com.test.tax.utils.PictureUtils.bitmapToFile(PictureUtils.java:58)
                                                                    at com.test.tax.utils.localalbum.ui.LocalAlbum.onActivityResult(LocalAlbum.java:141)
                                                                    at android.app.Activity.dispatchActivityResult(Activity.java:5441)
                                                                    at android.app.ActivityThread.deliverResults(ActivityThread.java:3353)
                                                                    at android.app.ActivityThread.handleSendResult(ActivityThread.java:3400)
                                                                    at android.app.ActivityThread.access$1300(ActivityThread.java:141)
                                                                    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1250)
                                                                    at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                    at android.os.Looper.loop(Looper.java:136)
                                                                    at android.app.ActivityThread.main(ActivityThread.java:5047)
                                                                    at java.lang.reflect.Method.invokeNative(Native Method)
                                                                    at java.lang.reflect.Method.invoke(Method.java:515)
                                                                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
                                                                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
                                                                    at dalvik.system.NativeStart.main(Native Method)

  解决办法:

  通过设置BitmapFactory.Options属性解决

        options.inPreferredConfig = Bitmap.Config.RGB_565;
        options.inDither = true;

  解决后的方法:

    public static Bitmap getSmallBitmap(String filePath, int reqWidth, int reqHeight) {
        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(filePath, options);

        // Calculate inSampleSize
        options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);

        // Decode bitmap with inSampleSize set
        options.inJustDecodeBounds = false;
        //避免出现内存溢出的情况,进行相应的属性设置。
        options.inPreferredConfig = Bitmap.Config.RGB_565;
        options.inDither = true;

        return BitmapFactory.decodeFile(filePath, options);
    }

 

时间: 2024-10-30 02:22:56

android通过BitmapFactory.decodeFile获取图片bitmap报内存溢出的解决办法的相关文章

android照相、相册获取图片剪裁报错的解决方法_Android

这是调用相机  public static File getImageFromCamer(Context context, File cameraFile, int REQUE_CODE_CAMERA, Intent intent) { intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); File fileDir = HelpUtil.getFile(context, "/Tour/user_photos"); cameraFil

android照相、相册获取图片剪裁报错的解决方法

这是调用相机 public static File getImageFromCamer(Context context, File cameraFile, int REQUE_CODE_CAMERA, Intent intent) { intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); File fileDir = HelpUtil.getFile(context, "/Tour/user_photos"); cameraFile

安卓程序下标越界-android客户端从服务器获取图片报数组下标越界

问题描述 android客户端从服务器获取图片报数组下标越界 速求:各位大神好,帮忙给看一下,刚才运行安卓客户端从服务器获取图片报"数组下标越界",程序挂掉了,啥原因呢:public class MainActivity extends Activity implements OnScrollListener { private static final String TAG = null; private int count=0; public SimpleAdapter simpl

Android实现从网络获取图片显示并保存到SD卡的方法_Android

本文实例讲述了Android实现从网络获取图片显示并保存到SD卡的方法.分享给大家供大家参考,具体如下: 问题: 如何不断获取图片并显示出来,达到视频的效果? 代码: public class GetPictureFromInternetActivity extends Activity { private ImageView imageView; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInst

android怎样从服务器获取图片?

问题描述 android怎样从服务器获取图片? 我通过eclipse连接上了SQLServer,然后Android访问Eclipse上的服务器(socket通信). 现在能从服务器里获取SQL里面的数据了,不过都是string类型.都是通过bufferedwriter() inputstreamreader()等函数实现的.现在想实现图片传递功能. 可以把图片存在电脑,然后把绝对路径保存在SQL的表里.然后eclipse根据路径解析出图片,并传递给android吗?能的话怎么实现 或者有没啥更简

服务器 下载-Android开发向服务器获取图片

问题描述 Android开发向服务器获取图片 Android开发向服务器获取图片吧图片放到listview中服务器是svn服务器,怎么写代码啊? 解决方案 //loadImageFromUrl() --------- listviewhttp://cindy-lee.iteye.com/blog/1300818

位图-android为啥这条语句老是报内存溢出错误?

问题描述 android为啥这条语句老是报内存溢出错误? Bitmap bm = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); 就是这条语句,经常报java.lang.outofMemoryError错误?各位大牛谁知道,可以改一个其他的方法吗? 解决方案 是不是因为你的图片太大了,把它换为android自带的图标试试.或者直接使用Canvas.drawBitmap(

位图-android Bitmap的内存溢出,何处添加回收函数?

问题描述 android Bitmap的内存溢出,何处添加回收函数? public Bitmap rotateBitmap(int degree, Bitmap bitmap) { Matrix matrix = new Matrix(); matrix.postRotate(degree); Bitmap bm = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); re

bitmap-ViewPager加载图片内存溢出怎么解决?

问题描述 ViewPager加载图片内存溢出怎么解决? @Override public Object instantiateItem(View view int position) { View mv = mListViews.get(position); ((ViewPager) view).addView(mv 0); // 加载图片 ImageView iv = (ImageView) mv.findViewById(R.id.imageView); try {//图片的名称 Strin