BitmapFactory.decodeFile 在模拟器上工作正常,但在 HTC 希望上失败

发布于 2024-11-25 01:28:00 字数 695 浏览 3 评论 0原文

我不明白这个问题,为什么 BitmapFactory.decodeFile 在模拟器上工作正常,但在 HTC 希望上失败。代码如下:

File f = new File("/sdcard/DCIM/100MEDIA/");
File files[] = f.listFiles();

Bitmap b1 = null, b2 = null;
b1 = BitmapFactory.decodeFile(files[0].getPath());
b2 = BitmapFactory.decodeFile(files[1].getPath());

很简单,但是应用程序在 HTC 希望上意外停止。 哦,我发现问题了:

07-18 08:01:45.634: ERROR/dalvikvm-heap(20637): 8045568-byte external allocation too large for this process.
07-18 08:01:45.634: ERROR/(20637): VM won't let us allocate 8045568 bytes
07-18 08:01:45.743: ERROR/AndroidRuntime(20637): java.lang.OutOfMemoryError: bitmap size exceeds VM budget

图片太大,怎么处理?我也需要高质量的图像。

I don't understand the problem, why BitmapFactory.decodeFile works fine on emulator but fails on HTC desire. The following code:

File f = new File("/sdcard/DCIM/100MEDIA/");
File files[] = f.listFiles();

Bitmap b1 = null, b2 = null;
b1 = BitmapFactory.decodeFile(files[0].getPath());
b2 = BitmapFactory.decodeFile(files[1].getPath());

It's simple, but the application stops unexpectedly on HTC desire.
Oh, I find the problem:

07-18 08:01:45.634: ERROR/dalvikvm-heap(20637): 8045568-byte external allocation too large for this process.
07-18 08:01:45.634: ERROR/(20637): VM won't let us allocate 8045568 bytes
07-18 08:01:45.743: ERROR/AndroidRuntime(20637): java.lang.OutOfMemoryError: bitmap size exceeds VM budget

The images are too large, how to handle them? I need good quality images too.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

天气好吗我好吗 2024-12-02 01:28:00

使用外部路径的推荐方式是 getExternalStorageDirectory

将您的代码更改为类似这样的内容。

File f = new File(Environment.getExternalStorageDirectory() + "/DCIM/100MEDIA/");

The recommended way of using external path is getExternalStorageDirectory

Change your code to something like this.

File f = new File(Environment.getExternalStorageDirectory() + "/DCIM/100MEDIA/");
淑女气质 2024-12-02 01:28:00

解码文件时使用 BitmapFactory.Options 对象。根据您的屏幕分辨率将 inSampleSize 设置为 2 或 4 之类的值,以获得最佳预览。它的作用是对图像进行下采样,这样就不会占用太多内存。

BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inSampleSize = 2;
Bitmap b1 = BitmapFactory.decodeFile(files[0].getPath(), opts);;

Use a BitmapFactory.Options object while decoding the file. Set inSampleSize to something like 2 or 4 depending on your screen resolution to get an optimum preview. What it does is that it downsamples the image so that it does not take too much memory.

BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inSampleSize = 2;
Bitmap b1 = BitmapFactory.decodeFile(files[0].getPath(), opts);;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文