【问题标题】:How to decode a very large image on android?如何在android上解码非常大的图像?
【发布时间】:2018-02-04 09:48:51
【问题描述】:

我正在解码一个 8000x8000 像素的图像(ARGB),因此它以未压缩的形式达到 (2 + 2 + 2 + 2) * (8000 * 8000) = 488 MB 并使安卓崩溃。我不想对图像进行采样,因为我正在将位图转换为字节数组并在 PUT 请求中发送它。我已经尝试过“decodeRegion”,但我不知道如何将数据(即字节数组)重新拼接在一起,因为它们在开始时就有头部信息并且只是连接它们没有帮助。

【问题讨论】:

  • 是的,BitmapRegionDecoder 是你需要从上到下多次调用它,但实际上你为什么要发送解码数据?
  • 我必须将图像数据作为图像/PNG 内容类型放入 s3,我无法更改 Amazon
  • 图片/png?所以只需发送您的 png 图像而不进行任何解码
  • 我应该在发布这个问题之前尝试过这个,我的错,但我会尝试这个,我不知道它是否能够解析它。另外我将如何从输入流中找到文件的总大小? (因为必须为此 PUT 请求预先指定内容长度)
  • 解析什么?你的输入流来自哪里?

标签: android image performance out-of-memory decoding


【解决方案1】:

您为什么要读取大图像,对其进行解码,然后发布字节数组?这是错误的做法。
如果您的 API 实际上需要解码字节,请修复它。它更有可能需要文件的原始数据。在这种情况下,您只需要使用任何为您提供 OutputStream 的网络 API,并一次读取 1 MB 的文件数据,从文件的 InputStream 读取它并将其写入套接字的 OutputStream

【讨论】:

    【解决方案2】:

    使用允许您从文件或流上传的 HTTP 客户端库,这样您就无需解码图像并尝试将其保存在内存中。 OkHttp 有这方面的选择;请参阅this recipe for streaming a POST requestthis recipe for POSTing a filethis recipe for multipart POSTs。这些技术应该适用于 PUT 请求。

    【讨论】:

      猜你喜欢
      • 2011-06-29
      • 1970-01-01
      • 1970-01-01
      • 2016-04-23
      • 1970-01-01
      • 2011-07-17
      • 2012-11-23
      • 2013-02-23
      • 1970-01-01
      相关资源
      最近更新 更多