Android:替代GIF加载器?

6za6bjd0  于 2023-04-10  发布在  Android
关注(0)|答案(1)|浏览(124)

我想在Android中加载图像,但如果图像太大,我想在加载之前调整它的大小。我了解到可以使用BitmapFactory来获取图像的大小,然后可以计算出适当的缩放因子并使用BitmapFactory加载所需尺寸的图像(根据我发现的in this related thread非常称职的建议)。
我花了一个小时仔细检查代码,试图弄清楚为什么这么简单的操作没有任何效果(比例因子被完全忽略了!)
然后我偶然发现了Android issue 3072......原来这已经被确定为GIF文件的故障超过两年了。我意识到GIF并不完全是现代的,但它仍然在那里并被广泛使用(我的测试集有很多,这就是为什么它看起来都是坏的,直到我发现那个bug报告)。

**我的问题是,我可以使用什么作为BitmapFactory的替代品,当采用缩放因子时,可以正确读取和调整GIF文件的大小,而不会默默忽略它?**内存限制阻止直接加载大图像以进行进一步处理,因此这需要一个流解决方案。

我的另一个问题是,有多少人遇到了像这样的老的、未修复的bug,要么没有意识到,要么更糟,依赖API来准确地执行所请求的功能,最终导致内存泄漏和其他奇怪的意外?

des4xlb0

des4xlb01#

我最终使用了发布的解决方案here

options.inSampleSize = 2;
bitmap = BitmapFactory.decodeStream(new URL(url).openStream(),null, options);
Bitmap scaledBitmap = scaleDown(bitmap, 1280, true);
bitmap = scaledBitmap;

其中scaleDown为:

public static Bitmap scaleDown(Bitmap realImage, float maxImageSize,
                               boolean filter) {
    float ratio = Math.min(
                (float) maxImageSize / realImage.getWidth(),
                (float) maxImageSize / realImage.getHeight());
    int width = Math.round((float) ratio * realImage.getWidth());
    int height = Math.round((float) ratio * realImage.getHeight());

    Bitmap newBitmap = Bitmap.createScaledBitmap(realImage, width,
                height, filter);
    return newBitmap;
}

如所使用的here

相关问题