我有一个很大的内存问题:
// 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/