最近,想用c#调用电脑摄像头,参考了“赤色火焰”的博客http://www.cnblogs.com/mgod/archive/2008/06/18/1224351.html,但对码流解码方面的介绍没有,上网搜也没有找到。于是,开始分析FrameCallBack中的VideoData的码流结构发现其分辨率是640*480,排列方式是YCbYCr,一行的排列是Y0CbY1CrY2CbY3CrY4CbY5Cr...,采用从左到右 从上到下的排列方式。其中YCbYCr表示左右相邻的两个像素,这两个像素的Y值不同,共用Cb和Cr,例如:Y0CbY1Cr解码是应为:Y0CbCr、Y1CbCr。
根据,YCbYCr转RGB公式:
r = 1.164 * (y - 16) + 1.596 * (cr - 128);
g = 1.164 * (y - 16) - 0.391 * (cb - 128) - 0.813 * (cr - 128);
b = 1.164 * (y - 16) + 2.018 * (cb - 128);
编写解码函数,再调用解码函数
private double[] ycbcrToRGB(byte y, byte cb, byte cr)
{
double[] rgb = new double[3];
rgb[0] = 1.164 * (y - 16) + 1.596 * (cr - 128);
rgb[1] = 1.164 * (y - 16