我试图通过c#应用程序从指纹扫描仪获取图像,但是当通过UART传输时,为了加快速度,只传输像素的高4位(即16灰度)。并且在传输之前,同一行的两个相邻像素将形成一个字节。
所以将该字节流转换回图像我正在使用以下代码: -
MemoryStream ms = new MemoryStream(byteArrayIn);
Image returnImage = Image.FromStream(ms);
pictureBox2.Image = returnImage;
但它给我的错误是
“参数无效”
for:
Image returnImage = Image.FromStream(ms);
我得到大约500字节的数据。任何人都可以提供任何解决方案,以便上传到PC时的图像,16灰度图像可以扩展到256灰度格式,即8位BMP格式。
答案 0 :(得分:1)
您可以将半字节转换为字节,然后使用转换后的数据,如下所示:
public byte[] NibblesToBytes(byte[] data)
{
byte[] result = new byte[data.Length*2];
int i = 0;
foreach (var bits in data)
{
// You may need to reverse these two lines, depending on data format:
result[i++] = (byte)((bits & 0x0F) << 4);
result[i++] = (byte)(bits & 0xF0);
}
return result;
}
这些字节将是灰度值。要将每个值转换为RGB值,您需要将每个R,G和B值设置为灰度值(我希望您已经知道这一点,但我提到它以防万一)。
但是你需要做的不仅仅是这个。您将需要标题信息等。
这些主题可能对此有所帮助: