难以将图像保存到MemoryStream

时间:2011-10-02 23:19:11

标签: c# image stream

我在将图像(在本例中为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...
}

非常感谢任何见解!

4 个答案:

答案 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。