2

我正在尝试制作一个应用程序,该应用程序还可以让用户选择他想要设置的壁纸。我通过调用 Gallery Intent 来解决这个问题。一旦用户选择了特定的图像,图像的数据路径就会返回给我,然后我通过将图像设置到图像视图上来预览给用户。

当图像大小(和/或分辨率)大于 android 的预期时,问题就会出现。这导致我的模块失败。

好像这还不够,当用户尝试选择其他壁纸时(在我的测试用例中,“其他”壁纸的大小也大于 700kb),然后应用程序因“OutOfMemoryException”而崩溃......

帮帮我,伙计们!!!

对于画廊意图,我使用:

Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"),SELECT_IMAGE);

为了设置我使用的壁纸:

InputStream is = getContentResolver().openInputStream(Uri.parse(uri_returned_from_intent)); 
Bitmap bgImage = BitmapFactory.decodeStream(is);//OutOfMemory error thrown here
setWallpaper(bgImage);

所以我有2个问题要处理:

  1. 如何在将其设置为墙纸之前裁剪图像...
  2. 无法理解抛出了 OutOfMemoryException,因为我的图像大小都没有超过 1mb ......如果我没记错的话,我猜 N1 的 VM 预算是 24Mb ......
4

1 回答 1

3

您应该使用 inSampleSize 选项进行解码以减少内存消耗。

另一个选项 inJustDecodeBounds 可以帮助您找到正确的 inSampleSize 值

于 2010-06-14T06:51:49.027 回答