Если вы хотите получить эту информацию без фактического создания экземпляра объекта Image
для каждого изображения, вам необходимо написать код, который читает каждый отдельный файл изображения и извлекает информацию. Хотя, конечно, возможно, вы найдете это несколько сложным. Во-первых, вам понадобится код, который считывает первые несколько байтов файла, чтобы определить, какой тип изображения (.bmp, .gif, .png, .jpg и т. Д.) Содержится в файле, а затем вам понадобится специальный код для извлечения информации для каждого поддерживаемого вами типа изображения.
Принимая во внимание, что вышеупомянутое почти наверняка будет быстрее, чем код, который загружает все изображение, извлекает соответствующие данные, а затем уничтожает изображение, я не могу сказать, насколько быстрее. Вполне возможно, что экономия времени выполнения не оправдывает количество времени, которое вы потратите на такое решение.
Если бы я писал эту программу, то мой первый крой сделал бы так, как предлагал ChrisF, и написал бы что-то вроде:
foreach (string filename in ImageFilenames)
{
using (Bitmap bmp = new Bitmap(filename))
{
// extract and store needed information
}
}
Как только вы начнете работать, вы сможете решить, достаточно ли это быстро для ваших целей. Если это не так, то я бы предложил тест, в котором вы модифицируете этот цикл, чтобы имитировать извлечение информации, читая первый килобайт или около того из каждого файла:
foreach (string filename in ImageFilenames)
{
using (File f = File.OpenRead(filename))
{
// read the first 1K from the file
// store some placeholder data for height/width
}
}
Если это работает значительно быстрее, чем первое, то, вероятно, стоит изучить возможность выполнения собственного анализа заголовка изображения. Имейте в виду, что вы открываете большую банку с червями. Синтаксический анализ заголовка изображения может быть довольно сложным.