难以将图像保存到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。