我有一个很大的内存问题:

// in sourceImage is a big JPEG previously loaded
Matrix mat = new Matrix();
mat.postRotate(90);
Bitmap rotatedImage = Bitmap.createBitmap(sourceImage, 0, 0, sourceImage.getWidth(), sourceImage.getHeight(), mat, true);

我总是运行此代码,我的应用程序崩溃并显示“VM 不会让我们分配 xxxxxx 字节”

你能帮助我吗?

编辑:

我在这里看到了很多类似的问题,但我不知道如何在旋转之前回收 sourceImage ......(因为第二个实例太大而无法同时容纳它)

谢谢。

最佳答案

如果不在内存中保存临时的 2 个位图,则无法创建新的旋转位图。

但是您可以在不创建新位图的情况下显示旋转的位图(应用转换)。

ImageView 没有旋转功能,因此您应该编写自己的 ImageView 扩展版本(RotatedImageView?)。

这个想法是用这样的东西(未测试)覆盖 onDraw 方法。

@Override
public void onDraw(Canvas canvas) {
    canvas.rotate((int)(angle * 180 / Math.PI), getWidth() >> 1, getHeight() >> 1);
    super.onDraw(canvas);
}

关于android - OutOfMemoryError : Android large Bitmap rotation (90°),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8212286/

10-10 02:05