如何在没有OOM异常的情况下将字节数组解码为位图

时间:2016-02-27 23:06:13

标签: java android bitmap out-of-memory bitmapfactory

我陷入了记忆中。我正在尝试使用字节数组加载图像但是我做过的任何事都行不通。我猜我得到位图解码器错误。这些都是代码:

       String password = prefs.getString("BookKey", "");
       BufferedInputStream buf = new BufferedInputStream(new FileInputStream(file));
       buf.read(bytes, 0, bytes.length);
       buf.close();
       byte[] bytesdecrpy = decrypt(bytes, password);

       BitmapFactory.Options options = new BitmapFactory.Options();
       options.inDither = true;
       options.inJustDecodeBounds = false;
       options.inPreferredConfig = Bitmap.Config.ARGB_8888;
       options.inTempStorage = new byte[32 * 1024];
       options.inBitmap = BitmapFactory.decodeByteArray(bytesdecrpy, 0,
               bytesdecrpy.length, options);

       bm = Bitmap.createBitmap(options.outWidth,
               options.outHeight, Bitmap.Config.ARGB_8888);

       imageView.setImage(ImageSource.bitmap(bm));

我从设备文件中读取了一个字节数组我的加密png,但我遇到问题,当我为位图变量创建位图时。我仍然无法运行2天。如果有人能帮助我解决这个问题,那就太好了。谢谢。

修改

我尝试过只将我的字节数组解码为这样的位图,但问题从未改变我已经开始在解码中遇到问题

       bm = BitmapFactory.decodeByteArray(bytesdecrpy, 0,
               bytesdecrpy.length, options);

1 个答案:

答案 0 :(得分:0)

如果位图太大,这可能会导致OOM异常 您可以使用后台线程来解码并加载容器中的图像 或使用https://developer.android.com/training/displaying-bitmaps/index.html

中所述的缓存技术