English 中文(简体)
页: 1 缩略语
原标题:Read .png Image from a zipped file

I am trying to get an image from a .zip archive and show it in a PictureBox.
I have a method to get text from a file inside the archive, but now I just need to get the image. I ve tried different things on this site, but none seem to work for me.

我的守则如下:

using System.Text;
using System.IO.Compression;
using System.Windows.Forms;

public partial class Form1 : Form
{
    private void Form1_Load(object sender, EventArgs e)
    {
        string zipFileFullPath = "C:\Tester\adv.jar";
        string targetFileName = "pack.mcmeta";
        string text = new string(
                    (new System.IO.StreamReader(
                     ZipFile.OpenRead(zipFileFullPath)
                     .Entries.Where(x => x.Name.Equals(targetFileName,
                                                  StringComparison.InvariantCulture))
                     .FirstOrDefault()
                     .Open(), Encoding.UTF8)
                     .ReadToEnd())
                     .ToArray());
    }
}

基本上,我想使用同样的方法,但不是案文,而是想把它作为蓝图。

问题回答

您只能使用Image.FromStream()生成来自DeflateStream的图像,ZipArchiveEntry.Open()。

The overload of Image.FromStream() used here informs to use ICM information (colorspace information) is available and skips pornography accreditation (takes a Much of time and sediments anyway):

string zipFileFullPath = "[Some archive path]";
string imageFileName = "[Some Image file name]";

var entry = ZipFile.OpenRead(zipFileFullPath)
    .Entries.Where(x => x.Name.Equals(imageFileName, StringComparison.InvariantCulture))
    .FirstOrDefault();

Image? entryImage = null;
if (entry != null) {
    using (var stream = entry.Open()) {
        entryImage = Image.FromStream(stream, true, false);
    };
}

从上述例子来看,你应当推断,在现行法典中有一些东西可以确定。

  • The archive may have no entries.
  • The file name you specify may not be found, so FirstOrDefault() returns null, and you re not handling this, which is going to crash you application
  • There s no need of new string() + string.ToArray(). StreamReader.ReadToEnd() already returns the content of the file as string

令人满意的是:

string zipFileFullPath = "C:\Tester\adv.jar";
string targetFileName = "pack.mcmeta";

var entry = ZipFile.OpenRead(zipFileFullPath)
    .Entries?.Where(x => x.Name.Equals(targetFileName, StringComparison.InvariantCulture))
    .FirstOrDefault();

string entryTextContent = string.Empty;
if (entry != null) {
    using (var reader = new StreamReader(entry.Open(), Encoding.UTF8)) {
        entryTextContent = reader.ReadToEnd();
    };
}

Here,BigreReader 结束了输入。





相关问题
Bring window to foreground after Mutex fails

I was wondering if someone can tell me what would be the best way to bring my application to the foreground if a mutex was not able to be created for a new instance. E.g.: Application X is running ...

How to start WinForm app minimized to tray?

I ve successfully created an app that minimizes to the tray using a NotifyIcon. When the form is manually closed it is successfully hidden from the desktop, taskbar, and alt-tab. The problem occurs ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

Handle DataTable.DataRow cell change event

I have a DataTable that has several DataColumns and DataRow. Now i would like to handle an event when cell of this DataRow is changed. How to do this in c#?

Apparent Memory Leak in DataGridView

How do you force a DataGridView to release its reference to a bound DataSet? We have a rather large dataset being displayed in a DataGridView and noticed that resources were not being freed after the ...

ALT Key Shortcuts Hidden

I am using VS2008 and creating forms. By default, the underscore of the character in a textbox when using an ampersand is not shown when I run the application. ex. "&Goto Here" is not ...

WPF-XAML window in Winforms Application

I have a Winforms application coded in VS C# 2008 and want to insert a WPF window into the window pane of Winforms application. Could you explain me how this is done.

热门标签