首页 > 解决方案 > 没有OOM问题的旋转位图的有效方法

问题描述

我知道这是一个老问题。但我没有找到任何合适的解决方案。我想旋转一个大的bitmap,对其进行一些处理,然后将其保存到file. 我正在使用下面的方法来旋转Bitmap. 但是当我旋转多个位图时。我OOM使用低端设备。我不想缩小位图。我怎样才能避免这种情况?

val matrix = Matrix().apply { postRotate(degrees) }
Bitmap.createBitmap(this, 0, 0, width, height, matrix, true)

还有比这更好的解决方案吗?

标签: androidbitmap

解决方案


这是您可以在没有 OutOfMemory 问题的情况下旋转位图的一种方法。

Drawable getRotateDrawable(final Bitmap b, final float angle) {
    final BitmapDrawable drawable = new BitmapDrawable(getResources(), b) {
        @Override
        public void draw(final Canvas canvas) {
            canvas.save();
            canvas.rotate(angle, b.getWidth() / 2, b.getHeight() / 2);
            super.draw(canvas);
            canvas.restore();
        }
    };
    return drawable;
}

你也可以轻松地将drawable转换为位图

Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap();

推荐阅读