gpt4 book ai didi

c# - 从 DotNetZip 条目加载图像

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

如何使用 DotNetZip ZipEntry 类在 WPF 中加载图像。

using (ZipFile file = ZipFile.Read ("Images.zip"))
{
ZipEntry entry = file["Image.png"];
uiImage.Source = ??
}

最佳答案

ZipEntry 类型公开了一个返回可读流的 OpenReader() 方法。这可能以这种方式为您工作:

// I don't know how to initialize these things
BitmapImage image = new BitmapImage(...?...);
ZipEntry entry = file["Image.png"];
image.StreamSource = entry.OpenReader();

我不确定这是否有效,因为:

  • 我不知道 BitmapImage 类,也不知道如何管理它,或者如何从流中创建一个。我可能那里的代码有误。

  • ZipEntry.OpenReader() 方法在内部设置和使用由 ZipFile 实例管理的文件指针,可读流仅在 ZipFile 实例本身的生命周期内有效。
    ZipEntry.OpenReader() 返回的流必须在为其他条目对 ZipEntry.OpenReader() 的任何后续调用之前以及 ZipFile 超出范围之前读取。如果您需要从一个 zip 文件中提取和读取多个图像,没有特定的顺序,或者您需要在完成 ZipFile 后阅读,那么您需要解决这个限制。为此,您可以调用 OpenReader() 并将每个特定条目的所有字节读取到不同的 MemoryStream 中。

是这样的:

  using (ZipFile file = ZipFile.Read ("Images.zip"))        
{
ZipEntry entry = file["Image.png"];
uiImage.StreamSource = MemoryStreamForZipEntry(entry);
}

....

private Stream MemoryStreamForZipEntry(ZipEntry entry)
{
var s = entry.OpenReader();
var ms = new MemoryStream(entry.UncompressedSize);
int n;
var buffer = new byte[1024];
while ((n= s.Read(buffer,0,buffer.Length)) > 0)
ms.Write(buffer,0,n);
ms.Seek(0, SeekOrigin.Begin);
return ms;
}

关于c# - 从 DotNetZip 条目加载图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7105144/

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