难以将图像保存到MemoryStream

我在将一个字节流从图像(在本例中为jpg)保存到System.IO.MemoryStream对象时遇到了一些困难。 目标是将System.Drawing.Image保存到MemoryStream ,然后使用MemoryStream将图像写入字节数组(我最终需要将其插入到数据库中)。 但是,在MemoryStream关闭后检查变量data表明所有字节都是零…我很难过,不知道我在哪里做错了…

 using (Image image = Image.FromFile(filename)) { byte[] data; using (MemoryStream m = new MemoryStream()) { image.Save(m, image.RawFormat); data = new byte[m.Length]; m.Write(data, 0, data.Length); } // Inspecting data here shows the array to be filled with zeros... } 

任何见解将不胜感激!

要将数据从流加载到数组中,您需要读取而不是写入 (并且需要回放)。 但是,更简单的是在这种情况下, ToArray()

 using (MemoryStream m = new MemoryStream()) { image.Save(m, image.RawFormat); data = m.ToArray(); } 

如果目的是将图像字节保存到数据库,您只需执行以下操作:

 byte[] imgData = System.IO.File.ReadAllBytes(@"path/to/image.extension"); 

然后插入数据库逻辑以保存字节。

几秒钟前我发现这篇文章的另一个原因,也许你会发现它很有用: http : //www.codeproject.com/KB/recipes/ImageConverter.aspx

基本上我不明白为什么你试图在具有图像的内存流上写一个空数组。 这是清洁图像的方法吗?

如果不是这种情况,请使用ToArray方法读取您在内存流中编写的内容并将其分配给字节数组

就这样

试试这种方式,它对我有用

  MemoryStream ms = new MemoryStream(); Bitmap bmp = new Bitmap(panel1.Width, panel1.Height); panel1.DrawToBitmap(bmp, panel1.Bounds); bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); byte[] Pic_arr = new byte[ms.Length]; ms.Position = 0; ms.Read(Pic_arr, 0, Pic_arr.Length); ms.Close(); 

好吧,而不是Image控件,我使用了Panel Control。