簡體   English   中英

C#和EmguCV:內存中的ZIP圖像

[英]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()解決方案-

從字節創建zip文件[]

使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM