将大图像加载到位图中?

9
我试图制作一个基本应用程序,该应用程序从相机显示图像,但是当我尝试使用BitmapFactory.decodeFile从SD卡中加载.jpg文件时,它返回null。
它没有给出内存不足的错误,这让我感到奇怪,但是完全相同的代码在较小的图像上运行良好。
一般画廊如何仅使用很少的内存显示来自相机的巨大图片?
5个回答

11

尝试按此示例中所示设置 inSampleSize。


1
你甚至可以尝试通过首先使用inJustDecodeBounds并将其与可用空间进行比较来动态选择 inSampleSize - CommonsWare


0

发送:

                        BitmapFactory.Options o = new BitmapFactory.Options(); 
                    o.inJustDecodeBounds = true; 
                    BitmapFactory.decodeFile(filePath, o); 

                    int REQUIRED_SIZE = 640; 
                    int width_tmp = o.outWidth, height_tmp = o.outHeight; 
                    int scale = 1; 
                    while(true) { 
                        if (width_tmp < REQUIRED_SIZE && height_tmp < REQUIRED_SIZE) break; 
                        width_tmp /= 2; 
                        height_tmp /= 2; 
                        scale *= 2; 
                    } 

                    BitmapFactory.Options o2 = new BitmapFactory.Options(); 
                    o2.inSampleSize = scale; 
                    Bitmap bitmap = BitmapFactory.decodeFile(filePath, o2); 

                    ByteArrayOutputStream bs2 = new ByteArrayOutputStream();
                    bitmap.compress(Bitmap.CompressFormat.PNG, 90, bs2);
                    getIntent().putExtra("byte_picture", bs2.toByteArray());

接收:

Bitmap photo = BitmapFactory.decodeByteArray(data.getByteArrayExtra("byte_picture"),0,data.getByteArrayExtra("byte_picture").length);

0

0

在长时间的工作后,我发现问题不在代码上,而是模拟器的内存大小。编辑 AVD 并增加内存大小可以解决所有问题,并轻松保存大型图片。谢谢。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接