当我们将一个多屏大小的base64图片转换成Bitmap进行操作时,使用BitmapFactory.decodeByteArray(data, 0, data.length)非常容易OOM,BitmapFactory.decodeByteArray(data, offset, data.length)三个参数的意义分别是:data为byte类型的资源数据,offset为位移量,一般为0,最后一个是资源数据的数组的长度,同时,该方法非常的消耗内存,所以我们采用如下的方式对图片进行处理:
- public static Bitmap byteToBitmap(byte[] imgByte) {
- InputStream input = null;
- Bitmap bitmap = null;
- BitmapFactory.Options options = new BitmapFactory.Options();
- options.inSampleSize = 8;
- input = new ByteArrayInputStream(imgByte);
- SoftReference softRef = new SoftReference(BitmapFactory.decodeStream(
- input, null, options));
- bitmap = (Bitmap) softRef.get();
- if (imgByte != null) {
- imgByte = null;
- }
-
- try {
- if (input != null) {
- input.close();
- }
- } catch (IOException e) {
-
- e.printStackTrace();
- }
- return bitmap;
- }