【问题标题】:Load Very Large Bitmap加载非常大的位图
【发布时间】:2016-12-16 13:35:39
【问题描述】:

我正在截取WebView 的完整屏幕截图并在ImageView 上显示位图。位图可以是 7 屏幕高度。 (例如 1440x14000 像素)

我经常面对

OutOfMemoryError。

我见过this

这表示将缩小的版本加载到内存中,但我不想失去图像质量。网上也有同样的方法。

有没有办法在不加载缩小版本的情况下处理 OutOfMemoryError

【问题讨论】:

  • 您描述为位图的大小计算得太多了 75+ MB,所以它可能真的太大而无法处理。设备有多少内存?
  • Android 系统为我的应用提供 512 MB。
  • Serdar selam :) 您可以尝试将大位图分成多个部分并在多个图像视图中显示它们。还有一些其他好的解决方案here
  • Selam Faruk, yorumun için teşekkür ederim görünce çok şaşırdım :) 我还需要在运行时动态更改位图(黑白效果、调整对比度、绘制形状等),还有其他组件取决于这个位图。我想,将位图划分为多个部分并动态地对所有部分应用效果会给系统带来很大的工作量。

标签: android bitmap out-of-memory


【解决方案1】:

位图可以是 7 屏幕高度。 (例如 1440x14000 像素)

请注意,这意味着用户无法以全分辨率一次看到整个图像。

我经常遇到 OutOfMemoryError

在大多数设备上,您将很难加载这么大的图像,因为您无法获得这么大的单个连续内存块。

这表示将缩小的版本加载到内存中,但我不想失去图像质量

在某种程度上,您没有太多选择。如果您希望用户一次看到图片的全部范围,则必须缩放图片以适应屏幕。

有没有办法在不加载缩小版本的情况下处理 OutOfMemoryError?

ImageView 替代品提供平移和缩放功能。其中一些,例如this one,处理一次加载图像的片段,使用当前缩放级别所需的任何缩放,以使您更有可能向用户显示整个图像。

【讨论】:

  • 我没有一次显示整个位图。位图按宽度适合屏幕,用户可以用手指上下滚动以查看位图的其他部分。这样用户可以通过滚动查看全分辨率的整个图像。
  • @serdarbuyukkanli:像我链接的那个小部件,并进行内存管理以使其成为可能,根据当前滚动位置一次加载位图片段。跨度>
【解决方案2】:

当然,这不是一个解决方案,但我也不熟悉您的确切需求,所以也许这可能会对您有所帮助 - 您可以尝试在解码过程中使用位图选项。尝试使用Bitmap.Config.inPreferredConfig 作为 RGB_565 - 与默认的 ARGB_8888 相比,这将减少位图大小的两倍。但是,当然,如果您在网页中使用复杂的图像,这可能会降低其质量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-27
    • 1970-01-01
    • 2016-04-23
    • 1970-01-01
    • 2015-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多