背景
在某些应用程序中,重要的是要在没有 OOM 的情况下快速处理大图像。
为此,JNI(或渲染脚本,遗憾的是缺乏文档)可能是一个不错的解决方案。
过去,我成功地使用 JNI 来旋转巨大的位图,同时避免 OOM(链接在这里、这里和这里)。这是一个很好的(但令人讨厌的)体验,但最终它奏效了。
问题
android框架有很多函数来处理位图,但我不知道JNI方面的情况如何。
我已经知道如何将位图从 android 的“java 世界”传递到“JNI 世界”并返回。
我不知道我可以在 JNI 端使用哪些函数来帮助我处理位图。
我希望能够在 JNI 上进行所有图像操作(包括解码),这样在呈现大图像时我就不必担心 OOM,并且在过程结束时,我可以将数据转换为 Java-位图(向用户显示)和/或将其写入文件。
同样,我不想将 JNI 端的数据转换为 java 位图,只是为了能够运行这些操作。
事实证明,有一些库提供了许多功能(如JavaCV),但它们非常大,我不太确定它们的功能以及它们是否真的在 JNI 端进行解码,所以我更喜欢而是能够通过Android的内置JNI功能知道什么是可能的。
问题
哪些函数可用于 Android 上 JNI 端的图像处理?
例如,我如何在位图上运行人脸检测、应用矩阵、下采样位图、缩放位图等等......?
对于一些操作,我已经可以想出一种方法来实现它们(缩放图像很容易,维基百科可以提供很多帮助),但有些非常复杂。
即使我自己实现了这些操作,也许其他人已经提高了它的效率,因为考虑到 C/C++ 可以有这么多的优化。
当我去 android 的 JNI 端时,我真的是靠我自己吗,我需要从头开始实现一切?
为了清楚起见,我感兴趣的是:
java 上的输入位图-> 纯粹在 JNI 和 C/C++ 中进行图像处理(不转换为 java 对象)-> java 上的输出位图。