WPF 中的 10/11/12 位编码像素

10/11/12 bit coded pixels in WPF

我需要使用单色相机 API,其手册中说明如下:

Each pixel (10, 11 or 12 bits) is coded on 16 bits. Pixel value is placed on the LSB of the 16 bits.

我将 WPF/C# 与位图一起使用;或者我可以将 WPF 与 OpenGL 一起使用。我没有任何专业知识。

只有这样才能将像素向下转换为 8 位吗?(here 有人提到)

我遇到了最接近的问题 here 但没有答案。

您可以使用将 Format 设置为 PixelFormats.Gray16 的 BitmapSource。

然后像这样将源像素值转换为 16 位像素值:

public static int ConvertTo16Bit(int pixelValue, int sourceBitsPerPixel)
{
    const int maxTargetValue = (1 << 16) - 1;
    int maxSourceValue = (1 << sourceBitsPerPixel) - 1;

    return maxTargetValue * pixelValue / maxSourceValue;
}

像这样转换像素缓冲区数组:

public static void ConverTo16Bit(
    ushort[] target, ushort[] source, int sourceBitsPerPixel)
{
    const int maxTargetValue = (1 << 16) - 1;
    int maxSourceValue = (1 << sourceBitsPerPixel) - 1;

    for (int i = 0; i < source.Length; i++)
    {
        target[i] = (ushort)(maxTargetValue * source[i] / maxSourceValue);
    }
}

或者当你想创建一个新的目标像素缓冲区时,像这样:

public static ushort[] ConverTo16Bit(ushort[] source, int sourceBitsPerPixel)
{
    const int maxTargetValue = (1 << 16) - 1;
    int maxSourceValue = (1 << sourceBitsPerPixel) - 1;

    return source
        .Select(value => (ushort)(maxTargetValue * value / maxSourceValue))
        .ToArray();
}