将16灰度的字节数组转换为256灰度格式

时间:2013-08-06 09:05:52

标签: c#

我试图通过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格式。

1 个答案:

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

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

这些主题可能对此有所帮助:

Create Bitmap from a byte array of pixel data

Convert byte Array or File Storage to Bitmap Image