SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ComponentZine(ComponentOne)

ZIPファイル内の画像を表示する.NET アプリケーションの作成

ComponentOne Studio 2010JのC1Zipコントロールを使ったZIP形式ファイルから画像を表示するアプリケーションの作成

  • このエントリーをはてなブックマークに追加

画像ファイルを取り出しPictureBoxで表示する処理

 ZIPファイルに格納されているファイル数が分かったら、続いて画像ファイルを1つずつ読み出し、PictureBoxコントロールとLabelコントロールを作成して、フォームのパネルに表示していきます。格納されているファイル数が分かったので、その数だけ処理を繰り返していきます。

 まず、C1ZipEntryCollectionから最初のJPEGファイルのC1ZipEntryオブジェクトにアクセスし、OpenReaderメソッドで画像ファイルを読み出します。OpenReaderメソッドは、ディスクに抽出せずにZIP内に格納されたファイルを、データの読み取りに使用できる「C1ZStreamReader」というStreamオブジェクトとして返してきます。そして、ファイルから読み取るときにデータは自動的に圧縮解除されるので、このOpenReaderメソッドを実行するだけで、ZIPファイル内の圧縮ファイルを取り出すことができます。

Visual Basic
'画像ファイルを取り出しPictureBoxで表示する
Dim s As Stream
w = 150
h = 100

For i = 0 To cnt - 1
    '画像ファイルをストリームに読み込む
    s = zip.Entries(i).OpenReader()
C#
//画像ファイルを取り出しPictureBoxで表示する
Stream s;
w = 150;
h = 100;

for(i=0; i<=cnt-1;i++)
{
    //画像ファイルをストリームに読み込む
    s = zip.Entries[i].OpenReader();

 次に、PictureBoxコントロールを作成してImageプロパティに画像をセットし、パネル「Panel2」に組み込みます。また、Labelコントロールも作成し、Textプロパティにファイル名を設定し、PictureBoxコントロールの下に配置します。

 このとき、Try...Catchステートメントを使用して、PictureBoxコントロールへの画像セットのエラー処理を設定しておきます。もし、Imageオブジェクト以外のファイルが解凍された場合は、メッセージボックスで表示し処理を中止します。最後に、ストリームを閉じます。

 この処理を、ZIPファイル内のファイル数ぶん繰り返します。

Visual Basic
            Try
                'PictureBoxを作成して画像をセットしパネルに組み込む
                Dim pb As New PictureBox
                pb.Image = CType(Image.FromStream(s), Image)
                pb.Visible = True
                pb.SizeMode = PictureBoxSizeMode.StretchImage
                pb.Size = New Size(w, h)
                pb.Left = ((w + 5) * i) + 5
                pb.Top = 10
                Me.Panel2.Controls.Add(pb)

                'ファイル名の設定
                fname = zip.Entries(i).FileName
                Dim lbl As New Label
                lbl.Text = fname
                lbl.Visible = True
                lbl.Left = ((w + 5) * i) + 5
                lbl.Top = 120
                Me.Panel2.Controls.Add(lbl)


            Catch ex As Exception
                MessageBox.Show("指定された形式のZIPファイルではありません。" + Chr(13) _
                                + "もう一度ファイルを選んでください", ex.Message, _
                                MessageBoxButtons.OK, MessageBoxIcon.Stop)
                Exit Sub
            End Try
            s.Close()
        Next
    End Sub
End Class
C#
                
                try
                {
                    //PictureBoxを作成して画像をセットしパネルに組み込む
                    PictureBox pb = new PictureBox();
                    pb.Image = Image.FromStream(s);
                    pb.Visible = true;
                    pb.SizeMode = PictureBoxSizeMode.StretchImage;
                    pb.Size = new Size(w, h);
                    pb.Left = ((w + 5) * i) + 5;
                    pb.Top = 10;
                    panel2.Controls.Add(pb);

                    //ファイル名の設定
                    fname = zip.Entries[i].FileName;
                    Label lbl = new Label();
                    lbl.Text = fname;
                    lbl.Visible = true;
                    lbl.Left = ((w + 5) * i) + 5;
                    lbl.Top = 120;
                    panel2.Controls.Add(lbl);


                }catch( Exception ex)
                {
                    ret = MessageBox.Show("指定された形式のZIPファイルではありません。" + "\r\n"
                                    + "もう一度ファイルを選んでください", ex.Message,
                                    MessageBoxButtons.OK, MessageBoxIcon.Stop);
                    return;
                }
                s.Close();
            }
        }
    }
}

まとめ

 C1Zipコントロールは、市販のZIPアプリケーションと違い、ファイル圧縮・解凍機能を直接アプリケーションに実装させることができ、圧縮ファイルの追加・削除、読み出し、格納情報の取得などZIPファイルを自在に操作できます。

 また、ファイルシステムだけでなく.NETのストリームを使うことができるので、オンメモリでデータをすぐに圧縮することもでき、高速に圧縮処理を行うことができます。パスワードの設定もできるので、圧縮機能と合わせデータのセキュリティ設定にも役立つ機能をアップロードに組み込むことも可能です。

※注

サンプルプログラムで使用している写真は、すべて「アルペンガーデンやまくさ」が所有しています。無断で、転載・販売・掲載することを禁止します。

製品情報

修正履歴

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
ComponentZine(ComponentOne)連載記事一覧

もっと読む

この記事の著者

瀬戸 遥(セト ハルカ)

8ビットコンピュータの時代からBASICを使い、C言語を独習で学びWindows 3.1のフリーソフトを作成、NiftyServeのフォーラムなどで配布。Excel VBAとVisual Basic関連の解説書を中心に現在まで40冊以上の書籍を出版。近著に、「ExcelユーザーのためのAccess再...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5266 2010/07/06 15:48

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング