我搜索并找到了旋转图像的简单代码。我将图像从 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 再等一会儿。
即使我减少了旋转的预览图像,当我去保存时,我也必须至少旋转一次全尺寸图像并且会遇到同样的问题。我不会吗?