gpt4 book ai didi

android - 如何更快地加载 Android 位图?

转载 作者:行者123 更新时间:2023-11-29 15:10:52 25 4
gpt4 key购买 nike

我正在创建一个需要显示视频帧的一系列 Bitmap 的应用程序。该应用程序使用 MediaCodec 将视频解码为多个帧,并获取每个帧的 Bitmap 以在 ImageView 上显示它们。

问题是每个Bitmap的大小大约是2~3MB(Frame size is 1280 x 720,720p视频的大小。)所以当Bitmap数量在60~65以上,应用程序因内存不足而崩溃。为了避免这个问题,我一直在实现 D 游览算法,该算法仅加载需要立即或即将显示的 Bitmap。基本上我一直在尝试这些方法。

1。提前加载所有的Bitmap

它的速度足以满足我的需求,但如前所述,当 Bitmap 的数量超过 60~65 时,应用程序会崩溃。

2。提取帧时,将每个帧保存到 JPEG 文件中,并在需要时将特定的 JPEG 加载到 Bitmap 中。

我用了BitmapFactory.decodeFileJPEG 加载 Bitmap,但速度很慢。

3。提取帧时,将整个帧保存到 MJPEG 中文件并在需要时将特定“帧”(技术上是字节数组)加载到 Bitmap 中。

我想如果我从字节数组本身加载 Bitmap 性能可能会更好。因此,在提取帧时,我创建了另一个元数据文件,其中包含每个帧的字节索引信息,并在需要时使用该信息加载 Bitmap。 [BitmapFactory.decodeByteArray]( http://developer.android.com/reference/android/graphics/BitmapFactory.html#decodeByteArray(byte[] , int, int)) 被使用。我可以看到速度略有提高,但仍然不够。

在这种情况下,我还能尝试什么来提高 Bitmap 的加载速度?

最佳答案

对于您的算法,一些库如 GlidePicasso可以为您处理。至于编码/解码速度,JPEG 可能是将 Bitmap 快速刷新到磁盘的最佳选择,因为文件很小并且可以由 hardware 支持。 .

一些你可以尝试的事情

  1. 如果您可以控制位图的生成方式,请使用 RGB565 来减少内存消耗(最多减少 50% 的内存,因为 ARGB8888 是 32 位,而 RGB565 是 16 位)
  2. 创建一个较小的图像,然后再将其放大
  3. android:largeHeap=true 添加到 manifest 中,以便您有内存可以使用
  4. 位图的 LRU 缓存,这已在 Picasso's caching 中实现还有

如果您愿意,可以根据您的特定需求手动编译您的 jpeg 库,但这需要非常繁重的工作。这是 something您可以立即进行测试。

关于android - 如何更快地加载 Android 位图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31778416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com