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会把你的图像倒过来保存。如果您只需要裸图像数据字节本身,请查看。