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