C# 如何避免位图字节数组中的头数据

C# 如何避免位图字节数组中的头数据,c#,bitmap,c#-2.0,bitmapimage,bitmapdata,C#,Bitmap,C# 2.0,Bitmapimage,Bitmapdata,我正在尝试将位图图像转换为C#中的字节数组。但按照位图格式,位图头将有12个字节 // Converting the bitmap image data to byte array byte[] bitmapFileData = System.IO.File.ReadAllBytes(bitmapImageFilePath); 我调试了这段代码,但是对于我给定的monochorme位图图像,它的前56个字节填充了一些其他数据,从那时起它的开头是(0,0,0,255,255255……)。 由于

我正在尝试将位图图像转换为C#中的字节数组。但按照位图格式,位图头将有12个字节

// Converting the bitmap image data to byte array
 byte[] bitmapFileData = System.IO.File.ReadAllBytes(bitmapImageFilePath);
我调试了这段代码,但是对于我给定的monochorme位图图像,它的前56个字节填充了一些其他数据,从那时起它的开头是(0,0,0,255,255255……)。 由于其单色位图图像,字节数组仅包含(0,0,0255和255255)的RGB

这里我的问题是,如何从字节数组中过滤位图头,以便将数组的其余部分用作位图数据。我知道位图格式的偏移值可以解释。那么字节数组的哪个元素给出偏移量值呢

请原谅,如果这是一个基本的问题或在不同的论坛讨论。 我对成像部分还不熟悉,在谷歌上搜索了很多,但没能完全理解

你能提供我所需要的信息吗

意图: 1.将位图图像转换为二进制数据的步骤 2.了解更多关于图像格式的知识

我使用的地方:
1.要在其中一台打印机上打印给定的位图图像,该打印机将获取图像的十六进制字符串或二进制数据。

为什么不将其作为位图打开并从中转换

using(Stream BitmapStream = System.IO.File.Open(fileName,System.IO.FileMode.Open ))
    {
         Image img = Image.FromStream(BitmapStream);

         mBitmap=new Bitmap(img);
         //...do whatever
    }
这篇文章讨论如何将图像转换为字节数组

根据,该文件包含后跟的。
BITMAPFILEHEADER
包含一个字段,
bOffBits
,该字段给出位图数据的第一个字节的偏移量。因此,您应该能够读取文件,找到
bOffBits
字段,并使用该字段索引到数组中

例如:

byte[] imageBytes = File.ReadAllBytes("filename.bmp");
int dataOffset = BitConverter.ToInt32(imageBytes, 10);
int firstPixelValue = imageBytes[dataOffset];
如果要知道有多少像素,必须读取
BitMapInfo标头
。您最好获取pinvoke签名(参见pinvoke.net)并使用一些不安全的代码来设置指向这些结构的指针,以便它们引用数组中的值

比如:

BITMAPFILEHEADER* bfh = (BITMAPFILEHEADER*)(&imageBytes[0]);
BITMAPINFOHEADER* bih = (BITMAPINFOHEADER*)(&imageBytes[14]);

也就是说,如果你真的想处理原始数据,而不是从文件中构造一个
Bitmap
对象。

我现在试过了。位图对象在构造时包含一些输入。在C#中,我没有找到加载位图图像的加载函数。我得到了你的意图,比如,如果我们加载位图图像,它会自动过滤位图标题。但我想换一种方式,当我从位图中提取字节数组时,我应该能够借助偏移量值避免标题信息。这个偏移值也在字节数组中提到,但我不知道偏移值取哪个位置?如果我对你的评论理解错误,请你详细解释一下。谢谢你。