如何在ushort中存储12位值?

时间:2018-02-19 12:48:49

标签: c# arrays

我有一个来自设置为12位像素格式的相机的流。 我的问题是如何将像素值存储在数组中?

在我用16位像素格式拍摄照片之前,现在我改为12位并且我得到相同的全尺寸图像,屏幕上显示四个图像,我用来将这些值存储在一个ushort数组中然后

当我将相机设置为8位像素格式时,我将数据存储在一个字节数组中,但在12位时应该使用什么?

2 个答案:

答案 0 :(得分:1)

根据我的评论,我们可以处理3字节"块"中的传入流,每个块提供2个像素。

// for a "chunk" of incoming array a[0], a[1], a[2]
ushort pixel1 = ((ushort)a[0] << 4) | ((a[1] >> 4) & 0xFF);
ushort pixel2 = ((ushort)(a[1] & 0xFF) << 4) | a[2];

(假设是big-endian)

答案 1 :(得分:-2)

您可以分配的最小内存大小是一个字节(8位),这意味着如果您需要12位数据来存储帧阵列中的一个像素,则应使用ushort。并留下4位。这就是为什么用两个数字来设计这类东西更有效率的原因 (1 2 4 8 16 32 64 128 ..蚀刻)