【问题标题】:Converting byte array of 16 grey degrees into 256-grey-degree format将 16 灰度的字节数组转换为 256 灰度格式
【发布时间】:2013-08-07 04:58:54
【问题描述】:

我正在尝试通过 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 格式。

【问题讨论】:

  • 那么数据是什么格式的?
  • Image.FromStream 或其处理其他来源的兄弟姐妹之一实际上期望完全格式化的图像文件,即。完整的 Jpeg 或 PNG 文件,而不仅仅是原始像素值。图像文件格式不仅仅是像素。现在,将半字节(4 位)解码为字节是一个问题,但将其放入Image 对象是另一个问题。你需要帮助哪一个?两者都有?
  • 此外,大约 500 个字节的数据,每个包含 2 个 4 位半字节,转换为大约 1000 个像素。图片有多大? 40*25?

标签: c#


【解决方案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

【讨论】:

  • 非常感谢您的帮助
猜你喜欢
  • 2013-03-18
  • 2015-08-11
  • 1970-01-01
  • 1970-01-01
  • 2014-09-29
  • 1970-01-01
  • 2016-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多