Zipファイルの中の画像ファイルを読み込んでPictureBoxに表示する VB .NET Visual Studio Community 2015
画像ファイルだけ入っているzipファイルの中の画像を読み込んで表示する
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を参照に追加する」
以下はその方法
参照マネージャーを開く
Image.FromStreamとImage.FromFile
FromFileは名前からもわかりやすい、ああファイルから読み込んでいるんだなあって
でもFromStreamはよくわからん、ストリームってなんなのって
ファルからメモリに読み込んで、そのメモリから読み込む感じなのかしら
11行目でFileStreamをNewで作るときにZipファイルを指定してできたストリームを
12行目でZipArchiveをNewで作るときに読み込んでいる
18行目でそのZipArchiveの中のZipArchiveEntryそれぞれにOpenメソッドで開いて
開いた中から出てきたものをImage.FromStreamで取り込んでいる
ZipArchiveEntryってのはZipファイルの中にあるファイルやフォルダっぽい
それをOpenするとストリーム形式で渡してくれるってことかな
ストリーム大活躍だなあ(よくわかっていない)