В подобном потоке есть хорошее однострочное решение:
рекурсивно решает все файлы, а затем расширяет расширения файлов с помощью LINQ
Или, если LINQ не может использоваться, а затем использовать RegEx для фильтрации расширений файлов:
var files = Directory.GetFiles("C:\\path", "*.*", SearchOption.AllDirectories)
List imageFiles = new List();
foreach (string filename in files)
{
if (Regex.IsMatch(filename, @".jpg|.png|.gif$"))
imageFiles.Add(filename);
}