Android:替代GIF加载器?

Android:替代GIF加载器?,android,gif,bitmapfactory,Android,Gif,Bitmapfactory,我想在Android中加载图像,但是如果图像太大,我想在加载之前调整它的大小。我了解到,可以使用BitmapFactory获得图像的大小,然后计算出适当的比例因子,并使用BitmapFactory加载具有所需尺寸的图像(根据我找到的非常有说服力的建议) 所以我试过了,但它不起作用。我花了最后一个小时浏览代码,试图弄明白为什么这么简单的操作没有任何效果(比例因子被完全忽略了!) 然后我偶然发现。。。事实证明,这已经被确定为GIF文件损坏超过两年了。我意识到GIF并不完全是现代的,但它仍然存在并被广

我想在Android中加载图像,但是如果图像太大,我想在加载之前调整它的大小。我了解到,可以使用BitmapFactory获得图像的大小,然后计算出适当的比例因子,并使用BitmapFactory加载具有所需尺寸的图像(根据我找到的非常有说服力的建议)

所以我试过了,但它不起作用。我花了最后一个小时浏览代码,试图弄明白为什么这么简单的操作没有任何效果(比例因子被完全忽略了!)

然后我偶然发现。。。事实证明,这已经被确定为GIF文件损坏超过两年了。我意识到GIF并不完全是现代的,但它仍然存在并被广泛使用(我的测试集有很多GIF,这就是为什么在我找到bug报告之前GIF看起来总是被破坏的原因)

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


我的另一个问题是,有多少其他人遇到了像这样的旧的、未修复的错误,或者没有意识到,或者更糟,依靠API来准确地执行请求的功能,最终导致内存泄漏和其他奇怪的意外情况?

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

其中
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;
}

我想知道你有没有发现什么。1.5年后,你的文章,这个问题仍然没有得到解决…我怀疑人们只是围绕它写了。真是太糟糕了。。。。这个bug还没有修复,我不再需要它了。谢谢你的解决方案!很高兴终于在这个问题上有了一些结论。
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;
}