C#图像到字节数组错误

C#图像到字节数组错误,c#,image,paint,pixel,C#,Image,Paint,Pixel,这是我的密码: Image img; int height = 0; int weight = 0; int size = 0; DialogResult result = openFileDialog1.ShowDialog(); if (result == DialogResult.OK) // Test result. { try { img = Image.FromFile(openFileDialog1.FileName); ccdIma

这是我的密码:

Image img;
int height = 0;
int weight = 0;
int size = 0;
DialogResult result = openFileDialog1.ShowDialog();
if (result == DialogResult.OK) // Test result.
{
    try
    {
        img = Image.FromFile(openFileDialog1.FileName);
        ccdImageAnalyzer1.Image = img;
        byte[] image = imageToByteArray(img);
         height = img.Height;
        weight = img.Width;
        size = height * weight;
    }
    catch( Exception err)
    {
        MessageBox.Show(err.ToString());
    }
}
MessageBox.Show(result.ToString());
问题是我得到了:

高度256,宽度256

尺寸是65536

但是,我的字节数组映像的大小为{byte[262198]}长

这是怎么回事

像素从0到255,255是1111111,这是一个字节,所以数组应该只有65536长

那么到底发生了什么

public byte[] imageToByteArray(Image imageIn)
{
    MemoryStream ms = new MemoryStream();
    imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
    return ms.ToArray();
}
我使用的是.Bmp图片

65536*4=262198

那么一个像素是4个字节

另外,如果这是真的,那么像素img(0,0)=图像[0]、图像[1]、图像[2]、图像[3]

如果是,

我应该把它转换成整数吗?这样我就能得到255号了

我把一张白色的图片保存在paint中,作为bmp,然后运行我的程序,不知怎的,我在图像数组中得到了非0的值

怎么样? 我甚至看到了255个 但是白色是0

我只保存了一张白色的照片


数组应该完全为零

我敢肯定,字节数组中的每像素RGB信息不止这些。它还存储各种元数据、编码、alpha值、大小等“那么一个像素有4个字节?”显然,正如您已经发现的,您的图像(至少在内存中表示)使用32位/像素(R、G、B和alpha,每个像素有8位)。您可以通过查询
img.PixelFormat
属性来检查使用的像素格式。“我应该将其转换为int吗?”您是否可以/应该坚持使用byte[]数组,或者重写代码以获得int[]数组是否有益,主要取决于您以后在程序中希望如何使用该数组。因此,我有一张黑色图片,上面有一个白色圆圈。我试图在像素MacCettura中找到圆的半径,如何从数组中删除或移除元数据?我只需要这个pixels@BBoone当前您正在将图像另存为图像文件。图像文件格式不可避免地包含一个文件头。。。最重要的是,bmp会把你的图像倒过来保存。如果您只需要裸图像数据字节本身,请查看。