画像ファイルを取り出しPictureBoxで表示する処理
ZIPファイルに格納されているファイル数が分かったら、続いて画像ファイルを1つずつ読み出し、PictureBoxコントロールとLabelコントロールを作成して、フォームのパネルに表示していきます。格納されているファイル数が分かったので、その数だけ処理を繰り返していきます。
まず、C1ZipEntryCollectionから最初のJPEGファイルのC1ZipEntryオブジェクトにアクセスし、OpenReaderメソッドで画像ファイルを読み出します。OpenReaderメソッドは、ディスクに抽出せずにZIP内に格納されたファイルを、データの読み取りに使用できる「C1ZStreamReader」というStreamオブジェクトとして返してきます。そして、ファイルから読み取るときにデータは自動的に圧縮解除されるので、このOpenReaderメソッドを実行するだけで、ZIPファイル内の圧縮ファイルを取り出すことができます。
'画像ファイルを取り出しPictureBoxで表示する Dim s As Stream w = 150 h = 100 For i = 0 To cnt - 1 '画像ファイルをストリームに読み込む s = zip.Entries(i).OpenReader()
//画像ファイルを取り出し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ファイル内のファイル数ぶん繰り返します。
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
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のストリームを使うことができるので、オンメモリでデータをすぐに圧縮することもでき、高速に圧縮処理を行うことができます。パスワードの設定もできるので、圧縮機能と合わせデータのセキュリティ設定にも役立つ機能をアップロードに組み込むことも可能です。
サンプルプログラムで使用している写真は、すべて「アルペンガーデンやまくさ」が所有しています。無断で、転載・販売・掲載することを禁止します。