我想用原始图像进行图像处理而不在屏幕上显示它,这显然会降低性能。
根据这个线程的答案,在没有预览的情况下从相机拍照,这在 Android 1.5 中是不可能的,但有人知道在 Android 4(API 级别 15)中是否可能吗?
我想用原始图像进行图像处理而不在屏幕上显示它,这显然会降低性能。
根据这个线程的答案,在没有预览的情况下从相机拍照,这在 Android 1.5 中是不可能的,但有人知道在 Android 4(API 级别 15)中是否可能吗?
在 Android 4 中,接收原始图像数据而不将其显示在屏幕上的最简单方法是使用Camera.setPreviewTexture()调用将预览帧路由到 GPU。
您可以通过两种方式使用它:
因为我不允许评论。关于艾迪的回答。您需要在 NDK 中使用它,因为使用 Java 接口会抵消任何性能优势。从性能的角度来看,必须使用 PixelBuffer 绝对是疯狂的。您从 RGBA888 到 YUV 的转换也需要在 C 中完成。
不要尝试使用 TextureView 会更糟。在转换为 YUV 之前,您必须将像素复制到位图中,然后从位图复制到数组中。这本身就占据了全新 Nexus 7 2013 品牌近 30% 的 CPU 利用率。
最有效的方法是直接与 Camera.h 对话并绕过所有 Android API。您可以创建自己的缓冲区并在 YUV 数据进入其他任何地方之前对其进行拦截。
在屏幕上显示预览不会对性能产生影响。在我遇到的所有设备上,相机输出都“连接”到不涉及 CPU 的表面或纹理,所有颜色转换和缩放都由专用硬件负责。
“隐藏”预览可能还有其他原因,但请记住,出于隐私和安全原因,API 最初的目的是确保最终用户看到从相机到达应用程序的任何内容。