Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在位图中显示10位整数_C#_Bitmap - Fatal编程技术网

C# 在位图中显示10位整数

C# 在位图中显示10位整数,c#,bitmap,C#,Bitmap,我有一个摄像头,返回10位像素。我得到的数组是图片大小的两倍,因为它使用两个8位字节来生成一个10位整数 因此,一个像素=两个字节 因此,我有一个工作转换的一部分。但是,我需要在位图中显示一个整数数组 我该怎么做 public static Bitmap ByteToImage(int[] blob) { MemoryStream mStream = new MemoryStream(); int[] pData = blob; mStre

我有一个摄像头,返回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;
    }
我在这个问题上有个错误。
但我真的不知道如何做到这一点。

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

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


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

解释“在位图中显示整数数组”的含义。告诉我们
blob
包含什么内容。告诉我们你得到的是什么“错误”。我有一个数组int,值从0到1023,这是我从相机得到的。我需要把它转换成位图。blob是整数数组如果值是单色的10位,最好只需将其向下移动2位,最终得到精度稍低的8位,即可完美显示为
format8bpindexed
,带有黑白渐变调色板。如何使用SetPixel?它需要一个X和Y位置,它需要一种颜色。我只有一个16位的数字,所以X是你的宽度,Y是你的高度?对吗?还有,我应该使用什么样的像素格式?还有,我的相机是单声道相机,所以它实际上只有黑色或白色。我怎么做颜色?它想要多少红色、蓝色和绿色,但相机只能返回或返回white@brandonSetPixel在这里是个可怕的主意。它为写入的每个像素锁定和解锁图像数据,速度慢得可笑。您最好构建一个字节数组,然后一次性将其加载到位图中。看见