gpt4 book ai didi

android - BitmapFactory.decodeStream() 返回一个 Bitmap ~100 倍于原始

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

我有一张 168.2KB 和 1991x1756 的 PNG 图像,并尝试使用 BitmapFactory.decodeStream() 将其导入到 Bitmap 中。问题是我遇到了 OutOfMemoryError,其中 Bitmap 大小最终为 13,657KB。
我不明白的是为什么导入后文件这么大以及如何缓解这种情况。
似乎这个 OutOfMemoryError 问题在解码的 Bitmap 图像中很常见,但找不到修复它的方法。有什么想法吗?

位图 bitmap = BitmapFactory.decodeStream(inputStream, null, bitmapOptions);

E/AndroidRuntime(10744): java.lang.OutOfMemoryError: 位图大小超出 VM 预算(堆大小=7815KB,分配=3279KB,位图大小=13657KB)

最佳答案

png 文件是高度压缩的,这意味着磁盘上的文件大小比它包含的所有数据都加载到内存中时要小得多。
位图是图像的一种非常简单的表示,其中每个像素都由一个值表示。该值的大小取决于当前设置(您可能听说过 32 位图像、16 位图像或 8 位图像,这些都是一些常见的大小)。

要计算以位图表示的图像的真实大小,您必须计算像素数,并将其乘以每个像素的位数。
您的图片为 1991x1756 像素(总共 3 496 196 像素)。如果您使用 ARGB_8888 格式加载位图(每个颜色/alpha channel 一个字节 = 每个像素 4 个字节),您最终会得到 3 496 196 * 4 = 13 984 784 字节。

您可以通过使用更少的字节/ channel (例如 RGB_565)来减小总大小,尽管这也会降低图像质量。更好的选择很可能是减小图像的大小,或使用 inSampleSize 导入它们。 BitmapFactory.Options 中的参数以加载较小的图像。

关于android - BitmapFactory.decodeStream() 返回一个 Bitmap ~100 倍于原始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10156675/

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