android - 没有OOM问题的旋转位图的有效方法
问题描述
我知道这是一个老问题。但我没有找到任何合适的解决方案。我想旋转一个大的bitmap
,对其进行一些处理,然后将其保存到file
. 我正在使用下面的方法来旋转Bitmap
. 但是当我旋转多个位图时。我OOM
使用低端设备。我不想缩小位图。我怎样才能避免这种情况?
val matrix = Matrix().apply { postRotate(degrees) }
Bitmap.createBitmap(this, 0, 0, width, height, matrix, true)
还有比这更好的解决方案吗?
解决方案
这是您可以在没有 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();
推荐阅读
- reactjs - 如何管理用户权限组件反应?
- ms-access - 仅通过单击按钮填充访问子表单
- vue.js - 在循环 VUE 上切换按钮文本
- docker - Elasticsearch 不断丢失索引
- c - 关于 C 中 memmove 实现的问题
- python - 在断电的情况下避免在保存到文件期间损坏 JSON
- android - ScrollView 在单击后不显示 Editext 并且弹出键盘
- angular9 - Angular 9 将 FormControlName 动态设置为 typescript 变量
- swiftui - 使 UIKit ContextMenu 预览提供程序框架适合 UIHostingControler 内的 SwiftUI 视图
- javascript - firebase.config() 在集成测试期间为空