1,12位图像数组扩展到16位图像数组
public ushort[] ConvertTwelveBitToSixteenBit(ushort[] twelveBitArray)
{
ushort[] sixteenBitArray = new ushort[twelveBitArray.Length];
for (int i = 0; i < twelveBitArray.Length; i++)
{
// 左移4位来扩展12位值到16位
sixteenBitArray[i] = (ushort)(twelveBitArray[i] << 4);
}
return sixteenBitArray;
}
2,14位图像数组扩展到16位图像数组
public ushort[] Convert14BitTo16Bit(ushort[] image14Bit)
{
ushort[] image16Bit = new ushort[image14Bit.Length];
for (int i = 0; i < image14Bit.Length; i++)
{
// 将14位值扩展到16位
image16Bit[i] = (ushort)((image14Bit[i] << 2) | (image14Bit[i] >> 12));
}
return image16Bit;
}
3,将16位图像数组转换为图片显示
/// <summary>
/// 将Ushort数组转换为WriteableBitmap
/// </summary>
/// <param name="array"></param>
/// <returns></returns>
private WriteableBitmap GetBitMap(ushort[] array)
{
var finalSize = _camera.GetFinalSize(); //图像宽高
int width = Convert.ToInt32(finalSize.Width);
int height = Convert.ToInt32(finalSize.Height);
// 创建WriteableBitmap并设置像素数据
WriteableBitmap writeableBitmap = new WriteableBitmap(width, height, 96, 96, PixelFormats.Gray16, null);
writeableBitmap.WritePixels(new Int32Rect(0, 0, width, height), array, width * sizeof(ushort), 0);
return writeableBitmap;
}