Zip for .NET
Zip ファイルからイメージを検索する
タスク別ヘルプ > Zip ファイルからイメージを検索する

ZIP ファイルから直接画像を取り出すには、以下のコードを Form_Load イベントに追加して複数の画像ファイルを ZIP ファイルに圧縮します。

Visual Basic コードの書き方

Visual Basic
コードのコピー
 'リソースディレクトリに画像一覧を作成し、ZIP ファイルに追加します。
Dim zip As New C1ZipFile()
Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     ' アプリケーションディレクトリを取得します。
    Dim s As String = Application.ExecutablePath
    s = s.Substring(0, s.IndexOf("\bin")) + "\resources"
     ' ZIP ファイルを作成します。
    zip.Create((s + "\images.zip"))
     ' 画像をZIPファイルとリストボックスに追加します。
    Dim f As String
    For Each f In  Directory.GetFiles(s) 
        Dim fname As String = f.ToLower()
         'zip ファイルをスキップします。
        If fname.EndsWith("zip") Then
          GoTo ContinueForEach1
        End If 
         ' 画像一覧をリストボックスに追加します。
        ListBox1.Items.Add(Path.GetFileName(fname))
         ' 画像をZIPファイルに追加します。
        zip.Entries.Add(fname)
        ContinueForEach1:
    Next f
End Sub

C# コードの書き方

C#
コードのコピー
 //リソースディレクトリに画像一覧を作成し、ZIP ファイルに追加します。
C1ZipFile zip = new C1ZipFile();
private void Form1_Load(object sender, System.EventArgs e)
{
    // アプリケーションディレクトリを取得します。
    string s = Application.ExecutablePath;
    s = s.Substring(0, s.IndexOf(@"\bin")) + @"\resources";
    // ZIPファイルを作成します。
    zip.Create(s + @"\images.zip");
    //画像をZIPファイルとリストボックスに追加します。
    foreach (string f in Directory.GetFiles(s))
    {
        string fname = f.ToLower();
    // ZIPファイルをスキップします。
        if (fname.EndsWith("zip")) continue;
    //画像一覧をリストボックスに追加します。
        listBox1.Items.Add(Path.GetFileName(fname));
    //画像をZIPファイルに追加します。
     zip.Entries.Add(fname);
    }
}

画像を選択し、画像データ格納しているストリームを取得し(OpenReader メソッド)、画像を読み込む(Image.FromStream メソッド)には、以下のコードを SelectedIndexChanged イベントに追加します。

Visual Basic コードの書き方

Visual Basic
コードのコピー
 ' 選択された画像を表示します。
Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
ListBox1.SelectedIndexChanged
' 選択された項目を取得します。 Dim item As String = CStr(listBox1.SelectedItem) ' 圧縮ストリームから画像を直接読み込みます。 Dim s As Stream = zip.Entries(item).OpenReader() Try pictureBox1.Image = CType(Image.FromStream(s), Image) Catch End Try ' ストリームを終了します。 s.Close() End Sub

C# コードの書き方

C#
コードのコピー
// 選択された画像を表示します。
private void listBox1_SelectedIndexChanged(object sender, System.EventArgs eventArgs e)
{
     // 選択された項目を取得します。
    string item = (string)listBox1.SelectedItem
     // 圧縮ストリームから画像を直接読み込みます。
    Stream s = zip.Entries[item].OpenReader()
    try
    {
        pictureBox1.Image = (Image)Image.FromStream(s)
    }
    catch {}
     // ストリームを終了します。
    s.Close();
}

コードの結果

下図には、 ICO、 GIF、 TIFF、 BMP や JPG など複数の種類の画像は表示されます。