在位图中显示10位整数

时间:2019-06-06 22:44:30

标签: c# bitmap

我有一个返回10位像素的凸轮。我得到的数组是图片大小的两倍,因为它使用两个8位字节来使一个10位整数。

一个像素=两个字节。

因此,我对该部分进行了工作转换。但是,我需要在位图中显示一个整数数组。

我该怎么做?

public static Bitmap ByteToImage(int[] blob)
    {
        MemoryStream mStream = new MemoryStream();
        int[] pData = blob;
        mStream.Write(pData, 0, Convert.ToInt32(pData.Length));

        Bitmap bm = new Bitmap(mStream, false);
        mStream.Dispose();
        return bm;
    }

我在此错误。 但是我真的不确定如何做到这一点。

1 个答案:

答案 0 :(得分:1)

您不能只将原始像素数组放入流中并期望将其作为位图加载。位图需要标头和精确且字对齐格式的像素数据流才能从字节流中加载。您可以通过一些研究和仔细的代码手动形成这样的结构,然后将其加载到Bitmap中。

但是,最简单的写位图的方法是使用new Bitmap(int width, int height, PixelFormat pxlFmt)构造函数创建一个位图,然后多次使用SetPixel()根据传入的10位数据设置像素容易,但是很慢。

如果需要更快的速度,可以一次使用Bitmap.LockBits来锁定位图的各个部分,并直接在位图的锁定位上从字节数组中复制大块数据。这是很多更快,但是要使用更高级的代码(并且必须非常小心地将数据复制到非托管内存,以​​避免写超出指向由提供的指针指向的锁定区域) LockBits)。像素数据将类似于我上面讨论的原始位图数据,但至少您不必弄乱BMP标头。