1

我搜索并找到了旋转图像的简单代码。我将图像从 ImageView 对象中拉出到位图中,旋转它然后放回去。我意识到这不是最有效的方法,但我认为它不应该崩溃而不在 CATCH 块中给出错误消息。

这是我的代码。传入的唯一值是“r”或“l”,具体取决于我要旋转的方向。较小的图像(1500x1500 或更小)可以正常工作。在 2500x2500 大小的情况下,事情变得很糟糕。

public void rotate(String dir)
{
    try
    {
        float angle = (dir.equals("r") ? 90 : -90);
        Bitmap bitmap = ((BitmapDrawable) imageView.getDrawable()).getBitmap();
        Matrix matrix = new Matrix();
        matrix.reset();
        matrix.postRotate(angle);
        bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, false);
        imageView.setImageBitmap(bitmap);
    }
    catch(Exception e)
    {
        Utilities.logError(e.toString());
    }
}

关于它为什么崩溃以及为什么它没有异常的任何线索?我只是收到一条消息“不幸的是进程......已停止”,然后我被踢回了我的应用程序的欢迎屏幕。

哦,为了踢球,我将角度设置为零(硬编码)并且它没有崩溃。我怀疑旋转的时间太长了,而 Android 正在适应。但我不确定如何确认这是问题或如何告诉 Android 再等一会儿。

即使我减少了旋转的预览图像,当我去保存时,我也必须至少旋转一次全尺寸图像并且会遇到同样的问题。我不会吗?

4

1 回答 1

2

在不查看日志的情况下,我或多或少可以保证您遇到内存不足异常。

您需要使用较小的图像,或者使用不占用太多内存的不同方法进行旋转(您在这里同时分配 2 个 2500x2500 位图!那是吨!)。

尝试使用 RotateAnimation 来获得效果。

希望这可以帮助 :)

于 2013-09-26T05:39:32.097 回答