【问题标题】:Android BitmapFactory over internet互联网上的 Android BitmapFactory
【发布时间】:2011-12-18 23:30:54
【问题描述】:

我正在从 Internet 下载图像,然后将它们按比例显示在屏幕上。这个想法是使用 inSampleSize,这样我就可以在解压缩时缩放大图像并防止 OutOfMemory 异常。但是为了找到 inSampleSize 我需要知道图像分辨率。它可以使用 inJustDecodeBounds 选项获得。

问题是我无法将流传递给它并直接从互联网下载图像,因为它将被下载两次(首先获取大小,然后获取缩放位图)。我无法下载图像并将其存储在 RAM 中,因为图像大小可能很大。剩下的唯一解决方案是将图像下载到 SD 卡/内部存储器并从那里读取,但是当用户没有空间时,就会发生坏事。

问题是 - 有没有什么方法可以在不依赖存储和 RAM 内存的情况下做到这一点,而无需下载两次图像?或者 BitmapFactory 在使用 inJustDecodeBounds 时不会下载整个图像,而只是下载标题?

谢谢

【问题讨论】:

  • ram 和 sd 的替代品?嗯......除了玩笑之外认为它非常标准的下载机制,不知道 bitmapfactory 但希望它的行为相似。总而言之,我不明白为什么这会成为一个问题。你不能只检查是否有空间,如果没有,你就不能允许下载。
  • 检查是否有更好的方法总是值得的。如果可以在不下载整个文件的情况下获得图像大小,那么这种机制将更加可靠。
  • 同意 :) 但你仍然会有记忆问题......如果有两次图片是一个问题,为什么不会一次呢?我只是无法理解这个问题:)
  • 有两次图片不是问题,下载两次就可以了。
  • 啊,现在我明白你的问题了;)嗯,第一个答案建议阅读标题。但是我认为很难从您要下载的文件中仅减去标题(尽管可能)

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


【解决方案1】:

如果您正在下载 PNG、GIF 或 JPG,应该可以读取文件标题以确定宽度和高度,这意味着您不必下载整个文件。

This post 有一些 C# 代码,用于从上述格式的标题中读取宽度和高度,您可以将其移植到 Java 以在 Android 中使用。

【讨论】:

    猜你喜欢
    • 2011-11-05
    • 2012-02-21
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-07
    • 2018-08-05
    相关资源
    最近更新 更多