我在将图像(在本例中为jpg)中的字节流保存到System.IO.MemoryStream
对象时遇到了一些困难。目标是将System.Drawing.Image
保存到MemoryStream
,然后使用MemoryStream
将图像写入字节数组(我最终需要将其插入数据库)。但是,在data
关闭后检查变量MemoryStream
表明所有字节都是零...我很难过,不知道我在哪里做错了......
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...
}
非常感谢任何见解!
答案 0 :(得分:31)
要将数据从流加载到数组中,您读取,而不是写(并且您需要回放)。但是,在这种情况下更简单,ToArray()
:
using (MemoryStream m = new MemoryStream())
{
image.Save(m, image.RawFormat);
data = m.ToArray();
}
答案 1 :(得分:4)
如果目的是将图像字节保存到数据库,您只需执行以下操作:
byte[] imgData = System.IO.File.ReadAllBytes(@"path/to/image.extension");
然后插入数据库逻辑以保存字节。
答案 2 :(得分:0)
我在几秒钟之前找到了这篇文章的另一个原因,也许你会发现它很有用: http://www.codeproject.com/KB/recipes/ImageConverter.aspx
基本上我不明白为什么你试图在有图像的内存流上写一个空数组。这是清洁图像的方法吗?
如果不是这样,请使用ToArray方法读取您在内存流中编写的内容并将其分配给字节数组
这就是全部
答案 3 :(得分:0)
试试这种方式,它适合我
Set fso = CreateObject("Scripting.FileSystemObject")
Set list = CreateObject("ADOR.Recordset")
list.Fields.Append "name", 200, 255
list.Fields.Append "date", 7
list.Open
DIM strServerName
strServerName = "Put_Server_Name_Here"
Set objRe = New RegExp
objRe.IgnoreCase = True
objRe.Pattern = strServerName + "\.vm-\d+?(\d{4}-\d{2}-\d{2})T\d{6}\.vib"
For Each f In fso.GetFolder("J:\Files").Files
If (fso.GetExtensionName(f) = "vib") AND (objRe.Test(f.Name)) Then
list.AddNew
list("name").Value = f.Path
list("date").Value = f.DateLastModified
list.Update
End If
Next
list.Sort = "date DESC"
list.MoveFirst
WScript.Echo list("name").Value
WScript.Echo objRE.Execute(list("name").Value).Item(0).Submatches(0)
list.Close
我没有使用Image控件,而是使用了Panel Control。