画像ファイルだけ入っているzipファイルの中の画像を読み込んで表示する
![イメージ 4]()
最初からあるForm1にFlowLayoutPanelを一個追加しただけ
System.IO.Compression.って入れたら上の画像みたいに出てくるはずなんだけど
![イメージ 1]()
アセンブリのフレームワークの中から
参照にSystem.IO.Compressionが追加された
画像ファルを読み込むときによく使っているのが
![イメージ 9]()
Visual Studio Community 2015で作成
7つの画像ファイルが入っているzipファイルを読み込んで画像を表示したところ
デザイン画面(デザイナー)
Form1をダブルクリックしてコードを書く
コード
エラーの処理とか書いていないので9行目で指定しているzipファイルに
画像以外のファイルが入っているとエラーになる
Imports System.IO.Compression
Imports System.IO
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.FlowLayoutPanel1.Dock = DockStyle.Fill
Me.FlowLayoutPanel1.AutoScroll = True
Dim dir As String ="D:\ブログ用\作業用\画像をまとめたもの.zip"
Dim pb As PictureBox
Dim fs As New FileStream(dir, FileMode.Open, FileAccess.Read)
Dim zip As New ZipArchive(fs, ZipArchiveMode.Read)
'PictureBoxを作成してzipファイルの中の画像ファイルを読み込んでImageに指定する
For Each z As ZipArchiveEntry In zip.Entries
pb = New PictureBox 'PictureBox作成
With pb
'Zipファイルの中の画像ファイルを読み込んでPictureBoxのImageに指定する
.Image = Image.FromStream(z.Open())
.SizeMode = PictureBoxSizeMode.Zoom '画像の表示モードの指定
.Size = New Size(120, 90) 'サイズ指定
End With
Me.FlowLayoutPanel1.Controls.Add(pb) 'FlowLayoutPanel1にPictureBoxを追加
Next
'後片付け
fs.Dispose()
zip.Dispose()
End Sub
End Class
参照したところは
ここなんだけど自分のところではなんか違う
zipファイルを扱うのに必要なZipArchiveっていうのが出てこない!
出てこないから真似できない!っていろいろ検索したけどわかんなくて
以前にエクセルVBAでも似たようなことがあったのを思い出して解決できた
答えは「System.IO.Compressionを参照に追加する」
以下はその方法
参照マネージャーを開く
ソリューションエクスプローラーの上から2番目あたりを右クリック→
追加→参照
参照マネージャー
System.IO.Compressionを検索してチェックを入れてOK
これでzipファイルが扱えるようになった
何かの追加なしにZipファイルを扱えるようになったのは最近らしく
.NET Framework4.5以降ということで確認したら4.5.2
Image.FromStreamとImage.FromFile
FromFileは名前からもわかりやすい、ああファイルから読み込んでいるんだなあって
でもFromStreamはよくわからん、ストリームってなんなのって
ファルからメモリに読み込んで、そのメモリから読み込む感じなのかしら
11行目でFileStreamをNewで作るときにZipファイルを指定してできたストリームを
12行目でZipArchiveをNewで作るときに読み込んでいる
18行目でそのZipArchiveの中のZipArchiveEntryそれぞれにOpenメソッドで開いて
開いた中から出てきたものをImage.FromStreamで取り込んでいる
ZipArchiveEntryってのはZipファイルの中にあるファイルやフォルダっぽい
それをOpenするとストリーム形式で渡してくれるってことかな
ストリーム大活躍だなあ(よくわかっていない)