2016-10-10 52 views
0

我不确定我在做什么错了下面的代码示例。在内存中编辑ZipArchiveEntries(图像)

我没有得到任何错误和图像看起来像这样应用的压缩后:

Using _stm = _ZipArchiveEntry.Open 
     Dim _ims = New MemoryStream 
     Image.FromStream(_stm, True, True).Save(_ims, _codec, params) 
     _stm.Seek(0, SeekOrigin.Begin) 
     _stm.SetLength(_ims.Length) 
     _ims.CopyTo(_stm) 
    End Using 

Corrupt image

注意:如果我写磁盘它的工作原理虽然图像。我想避免删除并重新插入zip存档条目。

Using _stm = _ZipArchiveEntry.Open 
    Image.FromStream(_stm, True, True).Save("C:\test.jpeg", _codec, params) 
End Using 

Image written to disk

+0

你能内存流“_ims”保存到磁盘和文件与您直接保存在你的第二个中一个比较例? –

+0

我想通了。我忘了将_ims上的位置重置为0。 – user1932634

回答

0

我忘了“_ims”流位置重置为0。不幸的是,我认为.CopyTo()会为我做到这一点。所以这是我居然检查的最后一件事...

这工作:

Using _stm = p_ZipArchiveEntry.Open 
     Using _ims As New MemoryStream 
      Image.FromStream(_stm, True, True).Save(_ims, _codec, params) 
      _stm.SetLength(_ims.Length) 
      _stm.Seek(0, SeekOrigin.Begin) 
      _ims.Seek(0, SeekOrigin.Begin) 
      _ims.CopyTo(_stm) 
     End Using 
    End Using