将大图像加载到Bitmap中?

时间:2010-05-09 18:53:06

标签: android bitmap jpeg image

我正在尝试创建一个显示来自摄像头的图像的基本应用程序,但是当我尝试使用BitmapFactory.decodeFile从sdcard加载.jpg时,它返回null。

它没有给出一个我觉得奇怪的内存不足错误,但完全相同的代码在较小的图像上工作正常。

通用图库如何以极少的内存显示来自相机的巨幅图片?

5 个答案:

答案 0 :(得分:11)

尝试设置inSampleSize,如this example

所示

答案 1 :(得分:2)

答案 2 :(得分:0)

经过大量工作后,我发现问题不在于代码,而是模拟器的ram大小,编辑avd和增加ram大小可以解决所有问题并轻松保存huges图片。感谢。

答案 3 :(得分:0)

这是另一个使用inSampleSize并根据可用内存动态确定要使用的图像分辨率的解决方案:

http://bricolsoftconsulting.com/handling-large-images-on-android/

答案 4 :(得分: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);