Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.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# 像素数据到图像的字节数_C#_Image Processing - Fatal编程技术网

C# 像素数据到图像的字节数

C# 像素数据到图像的字节数,c#,image-processing,C#,Image Processing,我已经学会了如何将图像的像素数据导出到字节数组,下面是我的代码 void Button2Click(object sender, EventArgs e) { Bitmap img = new Bitmap (@"24x30.bmp"); var BitmapData = img.LockBits( new Rectangle(0,0,img.Width,img.Height),ImageLockMode.ReadOnly,img.PixelFormat); var le

我已经学会了如何将图像的像素数据导出到字节数组,下面是我的代码

void Button2Click(object sender, EventArgs e)
{
    Bitmap img = new Bitmap (@"24x30.bmp");
    var BitmapData = img.LockBits( new Rectangle(0,0,img.Width,img.Height),ImageLockMode.ReadOnly,img.PixelFormat);
    var length = BitmapData.Stride * BitmapData.Height;
    MessageBox.Show(BitmapData.Width.ToString());
    byte[] bytes = new byte[length];
    Marshal.Copy(BitmapData.Scan0, bytes, 0, length);
    img.UnlockBits(BitmapData);
    string test = ByteArrayToBinary(bytes);
}
我将字节转换为字符串位,但让我们忽略它。我想知道的是,如何将像素数据的字节转换为图像?请分享代码和参考资料

我读了很多参考文献,但直到现在才明白

编辑:


在我的案例摘要中,我有步幅、宽度、高度和像素数据的字节[]。感谢相同的代码,但以另一种方式复制,我如何将其重建为图像。(您可以读取一个虚拟图像或使用另一个图像构造函数。)

显然,您的第一步应该是以某种方式将文本转换回字节数组,但随后您将看到,您实际上无法仅从该数据创建图像

正如您在注释中已经提到的,转储的二进制块缺少所有头数据。在将数据转换回图像之前,需要原始宽度、高度和像素格式

此外,如果这是一个索引图像,将有一个调色板,你也不保存它

最后,复制图像内存中的所有数据。每行像素的图像都保存在内存中,但这些行通常四舍五入到四个字节的下一个倍数(我认为某些索引像素格式除外)。这意味着,除非您的图像每像素使用四个字节(每像素32位),否则您最终使用的字节可能在每行末尾包含垃圾数据。你不会以任何方式修剪它,这意味着你不仅需要宽度和高度,还需要步幅,然后才能重建图像

至于如何构建图像,方法基本相同。您制作了一个具有正确尺寸和像素格式的新图像,使用
LockBits
但处于
WriteOnly
模式打开其备份内存,并将数据复制到其中


我以前在这个网站上发布过,所以请随意查看。

如果你有
位图,你已经有了图像<代码>位图
扩展
图像
。那你为什么要重拍呢?我想把我的图像转换成字节,然后再转换成比特。在另一种情况下,我必须将位重构为字节,然后再重构为图像。但是我坚持使用recostruct code.byte或byte[]?您可以使用BitmapEncoder并使用流保存位图。对不起,请enlight MeeeNonse。字节数组本身不足;它缺少关于图像尺寸和像素格式的所有标题信息。@nyrguds:你不明白我的答案。这并不奇怪;你只给了一个。