我必须制作一个简单的应用程序,它会破坏Android上相机预览的饱和度,亮度等。我的代码现在将图像发送到以下数据:
public void onPreviewFrame(byte[] data, Camera camera){
}
...如果我没错,那就是YUV420SP格式。我试图找到一些关于此的信息但不成功。谁能告诉我如何管理这种格式?
答案 0 :(得分:2)
请参阅Android文档:http://developer.android.com/reference/android/hardware/Camera.Parameters.html#setPreviewFormat(int);此处描述了图像格式:http://www.fourcc.org/yuv.php#NV21。
简而言之,这个byte[]
包含两个部分:亮度和色度。您可以使用摄像头对象查找当前参数(在每次调用onPreviewFrame()
时都不要在生产代码中使用此参数,因为这些调用是性能负担,但重用值):
int w = camera.getParameters().getPreviewSize().width;
int h = camera.getParameters().getPreviewSize().height;
byte[] luma = new byte[w*h];
byte[] chroma = new byte[w*h/2];
System.arraycopy(data, 0, luma, 0, w*h);
System.arraycopy(data, w*h, chroma, 0, w*h/2);
int Y_at_x_y = luma[x + y*w]; // or data[x + y*w]
int U_at_x_y = chroma[x/2 + y*w/2 + 1]; // or data[w*h + x/2 + y*w/2 + 1]
int V_at_x_y = chroma[x/2 + y*w/2]; // or data[w*h + x/2 + y*w/2]