DOBON.NETプログラミング道掲示板
(現在 過去ログ2 を表示中)

[ 最新記事及び返信フォームをトピックトップへ ]

■33739 / inTopicNo.1)  ListViewに動画ファイルのサムネイルを表示する
  
□投稿者/ けい 一般人(1回)-(2017/12/05(Tue) 17:50:18)
  • アイコン環境/言語:[Windows10、VB.NET、.NET Framework4.5.2] 
    分類:[.NET] 

    お世話になります。

    Windows10、VB.NET2015、.NET Framework4.5.2で開発しています。

    Form上に、Button1と、ListView1、ImageList1があります。

    Button1を押した時に、ある画像フォルダの中にあるファイル一覧を、
    サムネイルで、ListView1に取得したいと思います。

    ファイルには、JPEGファイル(静止画)とAVIファイル(動画)とがあります。

    コードは以下の通りです。

    -----------------------------

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    Dim imageDir As String = "(画像フォルダのディレクトリ)"
    Dim stFiles As String() = System.IO.Directory.GetFiles(imageDir, "*.*")

    Dim width As Integer = 100
    Dim height As Integer = 80

    ImageList1.ImageSize = New Size(width, height)
    ListView1.LargeImageList = ImageList1

    For i As Integer = 0 To stFiles.Length - 1
    Dim original As Image = Bitmap.FromFile(stFiles(i))'・・・・※
    Dim thumbnail As Image = createThumbnail(original, width, height)

    ImageList1.Images.Add(thumbnail)
    ListView1.Items.Add(stFiles(i), i)

    original.Dispose()
    thumbnail.Dispose()
    Next

    Private Function createThumbnail(ByVal image As Image, ByVal w As Integer, ByVal h As Integer) As Image

    Dim canvas As New Bitmap(w, h)

    Dim g As Graphics = Graphics.FromImage(canvas)
    g.FillRectangle(New SolidBrush(Color.White), 0, 0, w, h)

    Dim fw As Double = CDbl(w) / CDbl(image.Width)
    Dim fh As Double = CDbl(h) / CDbl(image.Height)
    Dim scale As Double = Math.Min(fw, fh)

    Dim w2 As Integer = CInt(image.Width * scale)
    Dim h2 As Integer = CInt(image.Height * scale)

    g.DrawImage(image, (w - w2) \ 2, (h - h2) \ 2, w2, h2)
    g.Dispose()

    Return canvas

    End Function

    -----------------------------

    上記のコードを実行しますと、※のところで、
    以下のエラーが発生します。

    -----------------------------
    型 'System.OutOfMemoryException' のハンドルされていない例外が System.Drawing.dll で発生しました

    追加情報:メモリが不足しています。
    -----------------------------

    AVIファイルのところで引っかかります。
    JPEGだけの場合は成功します。

    動画ファイルのサムネイル表示には、
    DirectShowを使うしかないとネットにありました。

    PictureBoxに動画を表示させるのは出来るのですが、
    ListView上にサムネイルを表示させる際の、
    DirectShowの使い方が分かりませんでした。

    改善方法をご教示頂けましたら幸いです。

    どうぞよろしくお願い致します。

引用返信 削除キー/
■33742 / inTopicNo.2)  Re[1]: ListViewに動画ファイルのサムネイルを表示する
□投稿者/ まりもん 一般人(1回)-(2017/12/06(Wed) 11:05:37)
  • アイコンまず、静止画と動画の表示の方法は異なります。
    静止画の場合はそのまま表示できますが、動画の場合はサムネイルのjpegファイルを作成してやる必要があります。

    サムネイル画像を作成する手順ですが、
    動画の場合、どのフレームをサムネイルとして表示するかという問題があります。
    まず、この部分の仕様を決定しましょう。(開始から10秒後のフレームを表示等)

    次に動画からサムネイルを取得する方法ですが、DirectShowを使用して自分で取得する方法と
    ffmpeg等の外部プログラムを使用してjpegファイル等の画像ファイルを出力する方法があるかと
    思います。
    ffmpegを利用する方法は
    http://blog.shibayan.jp/entry/20140708/1404745200
    C#ですがこちらが参考になるかと思います。
    Microsoft Expression Encoder 4を利用する方法が、こちらもC#ですが
    http://elicon.blog57.fc2.com/blog-entry-264.html
    にありました。

    サムネイル用のjpegファイルが作成できれば、あとは同じですので問題はないかと思います。

引用返信 削除キー/
■33746 / inTopicNo.3)  Re[2]: ListViewに動画ファイルのサムネイルを表示する
□投稿者/ けい 一般人(5回)-(2017/12/06(Wed) 16:17:43)
  • アイコンNo33742に返信(まりもんさんの記事)

    ありがとうございます。
    研究してみます。
引用返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

Mode/  Pass/


- Child Tree -