Android:旋转大图像崩溃而不会抛出错误

时间:2013-09-26 05:30:11

标签: android image crash rotation

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

这是我的代码。传入的唯一值是“r”或“l”,具体取决于我想要旋转的方向。 Smaler图像(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());
    }
}

任何关于它崩溃的原因以及为什么它不会引发异常的任何线索?我刚收到一条消息“Unfortuantly process ....已停止”,我被踢回我的应用程序的欢迎屏幕。

哦,对于踢,我将角度设置为ZERO(硬编码)并且它没有崩溃。我怀疑旋转只需要太长时间,而Android正在适应。但我不确定如何确认问题或如何告诉Android等待一段时间。

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

1 个答案:

答案 0 :(得分:2)

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

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

尝试使用RotateAnimation来取代效果。

希望这会有所帮助:)