【问题标题】:The most efficient way to show the local image in android在android中显示本地图像的最有效方法
【发布时间】:2013-12-02 16:00:49
【问题描述】:

我目前正在编写应用程序之类的杂志。由于可以选择放大(原始源的 150%、200%、250%),我不希望缩小图像。但是,由于内存不足,当我尝试解码图像时,应用程序将强制重启。有什么建议可以解决这个问题吗?

图像是本地的(SD 卡),可以通过任何方法检索,但最终需要是位图,因为我使用 cavans.drawbitmap 之类的东西来显示它。我试过了,输入流->字节,输入流->位图等...但是有没有最有效的方法或至少 我可以确定应用程序不会强制重启/关闭?谢谢

 try {
            InputStream is = (InputStream) new URL(url).getContent();
            try {
                return BitmapFactory.decodeStream(is);
            } finally {
                is.close();                    
            }
        } catch (Exception e) {
            return BitmapFactory.decodeResource(context.getResources(), defaultDrawable);


   }

【问题讨论】:

  • 欢迎提出内存问题的原生解决方案

标签: android image performance bitmap inputstream


【解决方案1】:

你应该考虑使用nostra's image loader,它可以非常有效地处理内存,你可以指定很多配置内容,我正在使用它,而且它也适用于大图像

【讨论】:

  • 感谢您的帮助,对不起,但考虑到项目中没有使用任何库,有没有本地方法?谢谢
【解决方案2】:

这就是 smartImageView(by loopj - 你可以在http://loopj.com/ 上找到他)用来从驱动器/sd 检索文件的方法。

private Bitmap getBitmapFromDisk(String imgID) {
    Bitmap bitmap = null;
    if(diskCacheEnabled){
        String filePath = getFilePath(imgID);
        File file = new File(filePath);
        if(file.exists()) {
            bitmap = BitmapFactory.decodeFile(filePath);
        }
    }
    return bitmap;
}

【讨论】:

  • 感谢您的帮助,对不起,但考虑到项目中没有使用任何库,有什么本地方法吗?不介意效率稍低,谢谢
  • 你可以去loopj的gitHub(他的代码是开源的)看看他/她的编码方式。我从他的代码中学习,做了一些更改以满足我的需求,这非常简单。我从来没有遇到过问题。您不必使用他的库,只需从他的工作中学习:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多