【问题标题】:Bitmap too large to be uploaded into a texture (4096 x 4096)位图太大,无法上传到纹理 (4096 x 4096)
【发布时间】:2016-11-20 23:51:01
【问题描述】:

我正在开发一个应用程序,我必须从互联网下载图像并将它们显示在应用程序中,到目前为止我使用的是 Universal Image Loader,但最近我遇到了一个问题,即应用程序无法显示图像尺寸很大,例如 700 x 7661,我已经阅读了几篇与之相关的帖子和​​答案,但似乎没有什么是可靠的解决方案,它出现在硬件加速应用程序中,图像大小受 OpenGL 纹理大小限制,答案在这里Stackoverflow 建议将图像调整为更小的尺寸。我知道禁用硬件加速可以解决问题,但这不是一个选项,因为它会使整个应用程序变得紧张。

我的问题是我们如何才能准确地实现这一点,因为设备具有不同的 OpenGL 纹理限制,一些设备支持 2048 x 2048 和一些支持 4096 x 4096,如果我们通过考虑最小尺寸来调整图像大小,其中一些支持更小图像在高分辨率设备上会显得模糊,所以我有点不知道如何解决这个问题,我试过 Picasso、Fresco & Glide,他们都有类似的问题。

我尝试加载的图像示例是http://i.imgur.com/ADpTC2W.jpg?1

问候

【问题讨论】:

  • 将软件层 (View#setLayerType(int layerType, Paint paint)) 设置为仅使用您的位图的视图,而不是整个应用程序
  • @pskink 这对内存有效吗?
  • 尝试不同的类型(LAYER_TYPE_NONE、LAYER_TYPE_SOFTWARE),看看它对您的应用有何影响

标签: android bitmap picasso universal-image-loader fresco


【解决方案1】:

您可以读取设备分辨率并根据您的分辨率调整图像大小

要获得解决方案,请参阅:How to get screen resolution

【讨论】:

    【解决方案2】:

    您可以使用Canvas.getMaximumBitmapWidth()Canvas.getMaximumBitmapHeight() 查找最大纹理大小,然后在将它们放入imageView 之前调整它们的大小。

    【讨论】:

    • 我做到了,我在这里按照 Romain Guy 的回答 (stackoverflow.com/a/7523221/595603),但它返回无效值 32788
    • 这可能是一个很长的镜头,但我发现将该数字除以 8 会返回正确的值,即该数字表示可用的字节数
    猜你喜欢
    • 2012-05-03
    • 2015-04-05
    • 2014-09-11
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多