我正在尝试创建一个显示来自摄像头的图像的基本应用程序,但是当我尝试使用BitmapFactory.decodeFile
从sdcard加载.jpg时,它返回null。
它没有给出一个我觉得奇怪的内存不足错误,但完全相同的代码在较小的图像上工作正常。
通用图库如何以极少的内存显示来自相机的巨幅图片?
答案 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);