C# 难以将图像保存到内存流

C# 难以将图像保存到内存流,c#,image,stream,C#,Image,Stream,我在将一个图像(在本例中是jpg)中的字节流保存到System.IO.MemoryStream对象时遇到了一些困难。目标是将系统.Drawing.Image保存到内存流,然后使用内存流将图像写入字节数组(我最终需要将其插入数据库)。但是,在内存流关闭后检查变量数据,表明所有字节都为零。。。我很困惑,不知道我做错了什么 using (Image image = Image.FromFile(filename)) { byte[] data; using (MemoryStream

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

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()


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

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

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

几秒钟前,我发现这篇文章还有另一个原因,也许你会发现它很有用:

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

如果不是这样,请使用ToArray方法读取您在memorystream中写入的内容,并将其分配给字节数组


就这些

试试这个方法,它对我有用

                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();

我使用了面板控件,而不是图像控件。

谢谢链接。实际上,我正在尝试对上传到网站上的图像进行一些处理,然后再将其保存到数据库中。我想System.Drawing.Image命名空间有一些调整大小的功能,所以我使用了Image类。是的,这绝对是个好主意。那是你应该搜索的地方。考虑到性能,Image类很容易消耗大量内存(这让我在当前项目中非常恼火)。谢谢,我实际上只是在本地pc上使用一个文件来隔离我遇到的问题。在我使用的应用程序中,图像实际上是以字节数组的形式出现的。我试图实例化一个Image类,以便在将其保存到数据库之前进行一些处理。很高兴了解ReadAllBytes!谢谢很酷,直到现在,我一直误解关于流的阅读和写作。谢谢
                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();