gpt4 book ai didi

c# - 如何在不先将位图保存到文件系统的情况下将内存中的位图保存到 ZipArchive?

转载 作者:太空宇宙 更新时间:2023-11-03 10:29:03 27 4
gpt4 key购买 nike

所以我有一些代码可以捕获屏幕并将其保存到 jpeg 文件中。这工作正常,但是我想将 jpeg 编码的捕获保存到新的 ZipArchive,而不是先将位图写入文件系统。

这是我目前所拥有的:

FileInfo zipArchive = new FileInfo(fileToZip.FullName + ".zip");

using (ZipArchive zipFile = ZipFile.Open(zipArchive.FullName, ZipArchiveMode.Create)))
{
ZipArchiveEntry zae = zipFile.CreateEntry(fileToZip.FullName, CompressionLevel.Optimal);
using (Stream zipStream = zae.Open())
bmp.Save(zipStream, ImageFormat.Jpeg);
}

问题是在 bmp.Save() 上a线System.NotSupportedException被抛出

This stream from ZipArchiveEntry does not support seeking.

我见过很多直接写入从 zae.Open() 返回的 Stream 的示例所以我不确定为什么这不起作用,因为我认为所有 bmp.Save()需要做的是写,而不是寻求。我不知道这是否可行,但我不想将位图保存到 MemoryStream以及从 zae.Open() 返回的 Stream 的副本因为这感觉像是不必要的额外工作。我是否遗漏了一些明显的东西?

最佳答案

许多文件格式都有指向文件其他部分的指针,或者事先可能不知道的长度值。最简单的方法是先写入零,然后写入数据,然后寻求更改值。如果使用这种方式,就没有办法得到这个,所以你需要先将数据写入MemoryStream,然后将结果数据写入ZipStream ,正如您提到的。

这实际上并没有添加那么多代码,只是对问题的简单修复。

关于c# - 如何在不先将位图保存到文件系统的情况下将内存中的位图保存到 ZipArchive?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30815119/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com