所有 Android 相机都需要支持两种 YUV 格式,NV21 和 YV12(请参阅setPreviewFormat 文档),用于setPreviewCallback启用的应用程序绑定回调。
有些设备可能支持其他格式(RGB、YUYV2 等),但这两种是强制性的,所以最好选择其中一种。YV12 的效率更高,尽管这取决于所讨论的硬件。
至于第二个,您可能可以使用某种实用程序(如ImageMagick )进行颜色转换,但关于这些格式的另一点是它们是针对色度(颜色)平面进行子采样的;NV21 和 YV12 在两个维度上都将颜色格式降低了 2 倍。例如,如果图像尺寸为 640x480,则 Y(亮度)通道将为 640x480,但 U 和 V 通道都只有 320x240。您可能需要自己进行二次采样,因为大多数图像库不公开这种格式(JPEG 图像实际上通常以类似的二次采样 YUV 格式存储,但大多数库在给您之前转换回全 RGB数据)。
编辑:附加说明
或者,如果您的算法在 GPU 上运行良好,您可以使用相机外的setPreviewTexture路径,这样您就可以在 GPU 着色器中处理图像数据。在这种情况下,数据将始终为 RGB,在具有 OpenGL 2.0 的 GLSL 着色器中作为纹理访问。