立即(或几乎)旋转 Android 中的图像
Rotate an image in Android instantly (or almost)
我用代号一开发,知道如何旋转图像。
问题是在我的 Samsung Galaxy A20 (Android 10 ).
当我谈到旋转时,我总是指 90 度或 90 度的倍数的旋转。
我希望有更有效的方法来旋转高分辨率图像,例如通过让 GPU 而不是 CPU 来完成工作。这就是为什么我问你们 Android 程序员:你们有没有可以立即或几乎立即旋转高分辨率图像的代码?
关于代号一,对于那些不知道的人,可以使用原生Android代码,所以我才称呼你。
哪种图片类型?
如果是 EncodedImage
尝试首先将其制作成常规图像或至少 lock()
。 GC 可能会从 RAM 中清除图像,并且您会得到重复的解码周期。即使对于非常大的图像,在这样强大的设备上旋转 90 度也应该非常快。
所以这样的事情应该很快:
img.lock();
Image rotated;
switch(degrees)) {
case 90:
rotated = img.rotate90Degrees();
break;
case 180:
rotated = img.rotate180Degrees();
break;
case 270:
rotated = img.rotate270Degrees();
break;
default:
rotated = img.rotate(degrees);
break;
}
img.unlock();
如果这需要很长时间才能确定占用 CPU 时间的确切方法,我建议对此进行基准测试。这应该都执行得非常快。
我用代号一开发,知道如何旋转图像。
问题是在我的 Samsung Galaxy A20 (Android 10 ).
当我谈到旋转时,我总是指 90 度或 90 度的倍数的旋转。
我希望有更有效的方法来旋转高分辨率图像,例如通过让 GPU 而不是 CPU 来完成工作。这就是为什么我问你们 Android 程序员:你们有没有可以立即或几乎立即旋转高分辨率图像的代码?
关于代号一,对于那些不知道的人,可以使用原生Android代码,所以我才称呼你。
哪种图片类型?
如果是 EncodedImage
尝试首先将其制作成常规图像或至少 lock()
。 GC 可能会从 RAM 中清除图像,并且您会得到重复的解码周期。即使对于非常大的图像,在这样强大的设备上旋转 90 度也应该非常快。
所以这样的事情应该很快:
img.lock();
Image rotated;
switch(degrees)) {
case 90:
rotated = img.rotate90Degrees();
break;
case 180:
rotated = img.rotate180Degrees();
break;
case 270:
rotated = img.rotate270Degrees();
break;
default:
rotated = img.rotate(degrees);
break;
}
img.unlock();
如果这需要很长时间才能确定占用 CPU 时间的确切方法,我建议对此进行基准测试。这应该都执行得非常快。