0

我正在尝试通过 c# 应用程序从指纹扫描仪获取图像,但是当通过 UART 传输时,为了加快速度,只传输像素的高 4 位(即 16 灰度)。并且同一行的两个相邻像素在传输之前将形成一个字节。

因此,我使用以下代码将该字节流转换回图像:-

MemoryStream ms = new MemoryStream(byteArrayIn);
Image returnImage = Image.FromStream(ms);
pictureBox2.Image = returnImage;

但这给了我错误

“参数无效”

为了 :

Image returnImage = Image.FromStream(ms);

我得到大约 500 字节的数据。任何人都可以提供任何解决方案,以便在将图像上传到 PC 时,16 度灰度图像可以扩展为 256 度灰度格式,即 8 位 BMP 格式。

4

1 回答 1

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 值设置为灰度值(我希望您已经知道这一点,但我提一下以防万一)。

但您需要做的不仅仅是这些。您将需要标题信息等。

这些线程可能会对此有所帮助:

从像素数据的字节数组创建位图

将字节数组或文件存储转换为位图图像

于 2013-08-06T09:11:11.307 回答