Imports System
Imports System.Diagnostics
Imports System.IO
Imports System.Drawing
Class FastLoadImage
Shared Sub main()
Dim dir As String = "C:\jpgs"
Dim jpgFiles As String() = Directory.GetFiles(dir, "*.jpg")
Dim sw As Stopwatch
' 画像データの検証をオフにしてロード
sw = Stopwatch.StartNew()
For Each jpg As String In jpgFiles
Using fs As FileStream = File.OpenRead(jpg)
Using img As Image = Image.FromStream(fs, False, False)
Console.WriteLine("{0} : {1} x {2}", jpg, img.Width, img.Height)
End Using
End Using
Next
sw.Stop()
Console.WriteLine(sw.ElapsedMilliseconds & "ミリ秒")
' 出力例:
' C:\jpgs\IMG_0001.jpg : 3456 x 2304
' C:\jpgs\IMG_0002.jpg : 3456 x 2304
' ……省略……
' C:\jpgs\IMG_0199.jpg : 3456 x 2304
' C:\jpgs\IMG_0200.jpg : 3456 x 2304
' 651ミリ秒
' Image.FromFileメソッドによるロード
sw = Stopwatch.StartNew()
For Each jpg As String In jpgFiles
Using img As Image = Image.FromFile(jpg)
Console.WriteLine("{0} : {1} x {2}", jpg, img.Width, img.Height)
End Using
Next
sw.Stop()
Console.WriteLine(sw.ElapsedMilliseconds & "ミリ秒")
' 出力例:
' C:\jpgs\IMG_0001.jpg : 3456 x 2304
' C:\jpgs\IMG_0002.jpg : 3456 x 2304
' ……省略……
' C:\jpgs\IMG_0199.jpg : 3456 x 2304
' C:\jpgs\IMG_0200.jpg : 3456 x 2304
' 60069ミリ秒
End Sub
End Class
コメントで記述している出力例は、筆者のPC(CPU:Intel Core 2 Duo 2.4GHz、メモリ:1Gbytes)でプログラムを実行したときのものだ。C:\jpgsディレクトリには200個のJPEGファイルが保存されている(ファイルの平均サイズは約1.9Mbytes)。処理時間から、画像データの検証を行わない方が90倍以上も速くなっていることが分かる。