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