画像ファイルを取り出し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のストリームを使うことができるので、オンメモリでデータをすぐに圧縮することもでき、高速に圧縮処理を行うことができます。パスワードの設定もできるので、圧縮機能と合わせデータのセキュリティ設定にも役立つ機能をアップロードに組み込むことも可能です。
サンプルプログラムで使用している写真は、すべて「アルペンガーデンやまくさ」が所有しています。無断で、転載・販売・掲載することを禁止します。

