【问题标题】:how to compress image for imageview in android如何在android中为imageview压缩图像
【发布时间】:2011-02-26 08:02:46
【问题描述】:

您好,我想在视图中显示 3 或 4 张存储在 sdcard 中的图像,图像大小约为 1-2 MB。 我的问题是当我在 imageview 中使用图像时,它会抛出内存异常 将图像解码为位图时,我有创建位和传递选项

02-26 13:16:54.946: ERROR/dalvikvm-heap(23410): 15980544-byte external allocation too large for this process.
02-26 13:16:54.946: ERROR/dalvikvm(23410): Out of memory: Heap Size=3407KB, Allocated=2801KB, Bitmap Size=15630KB, Limit=21884KB
02-26 13:16:54.946: ERROR/dalvikvm(23410): Trim info: Footprint=3463KB, Allowed Footprint=3655KB, Trimmed=248KB
02-26 13:16:54.946: ERROR/GraphicsJNI(23410): VM won't let us allocate 15980544 bytes
02-26 13:16:54.986: ERROR/AndroidRuntime(23410): FATAL EXCEPTION: main
02-26 13:16:54.986: ERROR/AndroidRuntime(23410): java.lang.OutOfMemoryError: bitmap size exceeds VM budget
02-26 13:16:54.986: ERROR/AndroidRuntime(23410):     at android.graphics.BitmapFactory.nativeDecodeFile(Native Method)
02-26 13:16:54.986: ERROR/AndroidRuntime(23410):     at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:325)

任何机构都可以帮助我解决我的问题吗 提前致谢

【问题讨论】:

    标签: android imageview


    【解决方案1】:

    我找到了我的问题的解决方案,有我的代码:

    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inTempStorage = new byte[24*1024];  
    options.inJustDecodeBounds = false;
    options.inSampleSize=32;     
    bmp1=BitmapFactory.decodeFile(filepath1,options);  
    Bitmap b1=ThumbnailUtils.extractThumbnail(bmp1,30, 30);  
    iv1.setImageBitmap(b);  
     if(bmp1!=null){  
       bmp1.recycle();
       }  
             bmp1=BitmapFactory.decodeFile(filepath1,options);
     Bitmap b2=ThumbnailUtils.extractThumbnail(bmp1,30, 30);  
     iv2.setImageBitmap(b2);  
    if(bmp1!=null){  
     bmp1.recycle();
     }
    

    类似地,我将它用于四个图像视图并设置图像而没有 OOM 异常

    【讨论】:

      【解决方案2】:

      创建一个BitmapFactory.Options 并在 inSampleSize 中传递一个 >1 的值(最好是 2 的幂)以在加载图像时缩小图像。

      【讨论】:

      • 我创建的选项是 BitmapFactory.Options options = new BitmapFactory.Options(); options.inTempStorage = 新字节[16*1024]; options.inJustDecodeBounds = false; options.inSampleSize=8;
      • 您是说这解决了您的问题,还是您的内存不足?
      • @EboMike:感谢您帮助我。我是说它不能解决我的问题,当我在代码中使用 BitmapFactory 选项时它仍然会抛出 OOM 异常。
      • 这看起来很奇怪。纹理有多大,你传递给 inSampleSize 的值是多少?在内存不足之前,您要加载多少张图片?
      • @EboMike :图像大约为 1.5 到 2 MB,我首先尝试将 4 放入 inSampleSize,然后我尝试使用 8。这是我的代码的快照 if(bmp1!= null){ bmp1.recycle(); } BitmapFactory.decodeFile(filepath,options);上面显示了我使用的选项文件路径是我的图像的路径和 decodeFile() 函数抛出 OOM 异常
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-21
      • 2017-03-28
      • 2017-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多