C# VideoSink.OnSample中的字节流看起来如何?

C# VideoSink.OnSample中的字节流看起来如何?,c#,silverlight,image,image-processing,webcam,C#,Silverlight,Image,Image Processing,Webcam,在Silverlight中,该方法用于获取原始网络摄像头数据。函数签名如下: protected abstract void OnSample( long sampleTimeInHundredNanoseconds, long frameDurationInHundredNanoseconds, byte[] sampleData ) sampleData[i+0] = BLUE sampleData[i+1] = GREEN sampleData[i+2] = RE

在Silverlight中,该方法用于获取原始网络摄像头数据。函数签名如下:

protected abstract void OnSample(
    long sampleTimeInHundredNanoseconds,
    long frameDurationInHundredNanoseconds,
    byte[] sampleData
)
sampleData[i+0] = BLUE
sampleData[i+1] = GREEN
sampleData[i+2] = RED
sampleData[i+3] = ALPHA
样本数据的文档说明

包含视频数据的字节流。字节流应根据相关视频格式信息处理成样本

转到该类的文档,我们将获得一个属性,根据以下条件,该属性只能有两个可能的值:

  • 未知-格式未知
  • Format32bppArgb-该格式每像素使用32位颜色信息,并使用alpha、红色、蓝色和绿色通道报告颜色信息
我想了解方法的
sampleData
参数是什么样子的。它仅仅是如下所示的像素阵列吗

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];
// ...
如果有那么简单:订购正确吗

  • 对于每个像素,A之前的R在G之前,B之前
  • 第一列的所有像素在第二列的所有像素之前,依此类推

格式化32bppargb像素格式的字节流如下所示:

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中的每个像素,信息如下所示:

protected abstract void OnSample(
    long sampleTimeInHundredNanoseconds,
    long frameDurationInHundredNanoseconds,
    byte[] sampleData
)
sampleData[i+0] = BLUE
sampleData[i+1] = GREEN
sampleData[i+2] = RED
sampleData[i+3] = ALPHA

所有通道都存储为[0;255]范围内的整数,其中255表示颜色通道的最大强度,而不透明表示alpha通道的最大强度。因此,除了排序之外,它的工作方式与预期一致。

格式化32bppargb像素格式的字节流如下所示:

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中的每个像素,信息如下所示:

protected abstract void OnSample(
    long sampleTimeInHundredNanoseconds,
    long frameDurationInHundredNanoseconds,
    byte[] sampleData
)
sampleData[i+0] = BLUE
sampleData[i+1] = GREEN
sampleData[i+2] = RED
sampleData[i+3] = ALPHA
所有通道都存储为[0;255]范围内的整数,其中255表示颜色通道的最大强度,而不透明表示alpha通道的最大强度。因此,除了排序之外,它的工作方式与预期的一样