在Silverlight中,使用VideoSink.OnSample方法获取原始摄像头数据。函数签名如下:
protected abstract void OnSample(
long sampleTimeInHundredNanoseconds,
long frameDurationInHundredNanoseconds,
byte[] sampleData
)sampleData文档显示
包含视频数据的字节流。字节流应根据相关的视频格式信息处理为样本。
转到VideoFormat类的文档,您将得到VideoFormat.PixelFormat属性,该属性根据文档只能有两个可能的值。
我想了解sampleData方法的VideoSink.OnSample参数是什么样子的。它仅仅是像下面这样的像素数组吗?
sampleData[0] = image[x = 0, y = 0].R;
sampleData[1] = image[x = 0, y = 0].G;
sampleData[2] = image[x = 0, y = 0].B;
sampleData[3] = image[x = 0, y = 0].A;
sampleData[4 to 7] = image[x = 0, y = 1];
sampleData[8 to 11] = image[x = 0, y = 2];
sampleData[4*Height-4 to 4*Height-1] = image[x = 0, y = Height];
sampleData[4*Height to 4*Height+3] = image[x = 1, y = 0];
// ...如果简单的话:订购正确吗?
发布于 2011-05-18 10:04:19
Format32bppArgb像素格式的字节流如下所示:
sampleData[0- 3] = image[x=0, y=0]
sampleData[4- 7] = image[x=1, y=0]
sampleData[8-11] = image[x=2, y=0]
... ...
image[x=w, y=0]
image[x=0, y=1]
...
image[x=w, y=h]因此,它是逐行存储的。
对于以字节I到i+3存储的每个像素,信息如下:
sampleData[i+0] = BLUE
sampleData[i+1] = GREEN
sampleData[i+2] = RED
sampleData[i+3] = ALPHA所有通道都作为整数存储在0;255范围内,其中255表示颜色通道的最大强度,而对于alpha通道则表示不透明。所以,除了排序,它的工作原理是预期的。
https://stackoverflow.com/questions/6027397
复制相似问题