[英]C# and EmguCV: ZIP image from memory
我想將一組圖像添加到C#中的ZIP文件中。 我使用EmguCV保存圖像。 目前,我先將圖像保存在本地,然后按如下所示添加到ZIP中。
無論如何,有沒有在本地保存直接將圖像直接添加到ZIP文件的方法?
抱歉,如果重復的話,我幾天都找不到明確的答案。
using (FileStream zipToOpen = new FileStream(this.path, FileMode.Create))
{
using (ZipArchive zipArchive = new ZipArchive(zipToOpen, ZipArchiveMode.Update))
{
for (int i = 0; i < clouds.Count; i++)
{
string imageCname = kinectId + "_" + dateTimes[i] + ".jpg";
imageCt = imageCs[i];
imageCt.Save("imageCt.jpg");
zipArchive.CreateEntryFromFile(@"imageCt.jpg", imageCname);
Console.WriteLine("Flushing rgb " + i + " of " + clouds.Count);
}
}
}
更新1:
如#CarbineCoder所建議,我按如下方式編輯了代碼。 保存文件。 但是不能作為圖像打開。 我猜想,它只保存了Byte流。 我還可以做什么將其另存為jpeg圖像。
string imageCname = kinectId + "_" + dateTimes[i] + ".jpg";
imageCt = imageCs[i];
ZipArchiveEntry zipEntryC = zipArchive.CreateEntry(imageCname);
using (var originalFileStream = new MemoryStream(imageCt.Bytes))
{
using (var zipEntryStream = zipEntryC.Open())
{
originalFileStream.CopyTo(zipEntryStream);
}
}
您可以發布更改的代碼嗎?
使用zipArchive.CreateEntry()解決方案-
使用System.IO.Compression在內存中創建ZIP存檔
是的,您可能需要指定文件的擴展名,例如zipArchive.CreateEntry("FileName.jpg")
。 這可能會解決您的問題
最終通過CarbineCoder建議解決了該問題。 以下是工作代碼。
string imageCname = kinectId + "_" + dateTimes[i] + ".jpg";
imageCt = imageCs[i];
ZipArchiveEntry zipEntryC = zipArchive.CreateEntry(imageCname);
using (var stream = new MemoryStream())
{
using (var zipEntryStream = zipEntryC.Open())
{
System.Drawing.Image userImage = imageCt.ToBitmap();
userImage.Save(stream, ImageFormat.Jpeg);
stream.Seek(0, SeekOrigin.Begin);
stream.CopyTo(zipEntryStream);
}
}
Console.WriteLine("Flushing rgb " + i + " of " + clouds.Count);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.