Zip for WPF/Silverlight
zip ファイルから画像を取得する
タスク別ヘルプ > zip ファイルから画像を取得する

この例では、2個のボタンと1個のリストボックスを使用して、.zip ファイルから画像を取得する方法を示します。

zip ファイルから画像を直接取得するために、最初に、いくつかの画像ファイルを1つの zip ファイルに圧縮するコードを追加します。この例では、btnNew_Click イベントにこのコードを追加します。ここで、ボタンがクリックされたときに画像の新しい .zip ファイルを作成します。

コードのコピー
' リソースディレクトリにある画像のリストを構築し、すべての画像を 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()
        ' 自分自身はスキップします。
        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
コードのコピー
// リソースディレクトリにある画像のリストを構築し、すべての画像を 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();
        // 自分自身はスキップします。
        if (fname.EndsWith("zip")) continue;
        // リストに追加します。
        listBox1.Items.Add(Path.GetFileName(fname));
        // zip ファイルに追加します。
        zip.Entries.Add(fname);
    }
}

 

画像を選択できるようにするには、画像データを含むストリームを取得し(OpenReader メソッド)、次のコードを listBox1_SelectionChanged イベントと StreamCopy イベントに追加します。

コードのコピー
' 選択された画像を表示します。
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
コードのコピー
// 選択された画像を表示します。
private void listBox1_SelectedIndexChanged(object sender, System.EventArgs e)
{
    // 選択された項目を取得します。
    string item = (string)listBox1.SelectedItem;
    // 画像を圧縮ストリームから直接ロードします。
    Stream s = zip.Entries[item].OpenReader();
    try
    {
        pictureBox1.Image = (Image)Image.FromStream(s);
    }
    catch {}
    // ストリームを閉じます。
    s.Close();
}

このトピックの作業結果

ICO、TIFF、BMP、JPG などのいくつかのタイプの画像が表示されます。