我搜索并找到了旋转图像的简单代码。我将图像从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等待一段时间。
即使我减少了旋转的预览图像,当我去保存时,我必须至少旋转一次全尺寸图像并且会遇到同样的问题。我不会吗?
答案 0 :(得分:2)
我可以或多或少地保证在不查看您遇到内存异常的日志的情况下。
您需要使用较小的图像,或者使用不同的方法进行旋转而不会消耗太多内存(您在这里同时分配2个2500x2500位图!这就是吨!)。
尝试使用RotateAnimation来取代效果。
希望这会有所帮助:)