Quantcast
Channel: 午後わてんのブログ
Viewing all articles
Browse latest Browse all 420

Zipファイルの中の画像ファイルを読み込んでPictureBoxに表示する VB .NET Visual Studio Community 2015

$
0
0
画像ファイルだけ入っているzipファイルの中の画像を読み込んで表示する
Visual Studio Community 2015で作成

イメージ 4
7つの画像ファイルが入っているzipファイルを読み込んで画像を表示したところ

デザイン画面(デザイナー)
イメージ 5
最初からあるForm1にFlowLayoutPanelを一個追加しただけ
Form1をダブルクリックしてコードを書く

コード
イメージ 6
エラーの処理とか書いていないので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っていうのが出てこない!
イメージ 7
System.IO.Compression.って入れたら上の画像みたいに出てくるはずなんだけど
出てこないから真似できない!っていろいろ検索したけどわかんなくて
以前にエクセルVBAでも似たようなことがあったのを思い出して解決できた
答えは「System.IO.Compressionを参照に追加する」
以下はその方法


参照マネージャーを開く
イメージ 1
ソリューションエクスプローラーの上から2番目あたりを右クリック→
追加→参照

参照マネージャー
イメージ 2
アセンブリのフレームワークの中から
System.IO.Compressionを検索してチェックを入れてOK

イメージ 3
参照にSystem.IO.Compressionが追加された
これでzipファイルが扱えるようになった

イメージ 8
何かの追加なしにZipファイルを扱えるようになったのは最近らしく
.NET Framework4.5以降ということで確認したら4.5.2


画像ファルを読み込むときによく使っているのが
Image.FromStreamとImage.FromFile
FromFileは名前からもわかりやすい、ああファイルから読み込んでいるんだなあって
でもFromStreamはよくわからん、ストリームってなんなのって
ファルからメモリに読み込んで、そのメモリから読み込む感じなのかしら

イメージ 9
11行目でFileStreamをNewで作るときにZipファイルを指定してできたストリームを
12行目でZipArchiveをNewで作るときに読み込んでいる
18行目でそのZipArchiveの中のZipArchiveEntryそれぞれにOpenメソッドで開いて
開いた中から出てきたものをImage.FromStreamで取り込んでいる
ZipArchiveEntryってのはZipファイルの中にあるファイルやフォルダっぽい
それをOpenするとストリーム形式で渡してくれるってことかな
ストリーム大活躍だなあ(よくわかっていない)


Viewing all articles
Browse latest Browse all 420

Trending Articles