C# | new Bitmap(path)
Вопрос максимально плоский.
Есть получение изображений:
string[] imgs;
int look_index = 0;
while ((imgs = Directory.GetFiles(folder_path)).Length > look_index)
{
// ...
int w = 0, h = 0;
try
{
using (Image img = new Bitmap(imgs[look_index]))
{
w = img.Width;
h = img.Height;
}
}
catch { }
// ...
// тут File.Move(imgs[look_index], folder_path + THIN + img_name);
// ...
}
Путь в imgs[0] соответствует:
"D:\_A_Private\Interested\Изображения\телефон\favorites\-TdhtbhWpKk.jpg"
Изображения по данному пути наличествуют.
В части итераций в отмеченном месте (при создании изображения) ловится затык:
Вызвано исключение: "System.ArgumentException" в System.Drawing.dll
Изображения с разными именами и разных размеров, но никакой зависимости в выпадающих исключениях не вижу.
В чём может быть проблема?
Ответы (1 шт):
Что же. Как и сказал @rotabor , я немного поисследовал файлы с исключениями. Это всё .jpg-файлы, и их отличие от обработанных - глубина цвета в 32b.
Немного поискав я встретил следующую информацию:
JPEG - трехцветный формат. Обычно он имеет 8 бит на цвет, но может иметь 12 или 16. Следовательно, 24 = 3x8 бит цвета приемлемо, но 16 или 32 просто невозможно. Это просто не делится на три. 3x16 = 48 возможно, но это более высокая глубина цвета. JPEG предназначен для фотографий, и нет смысла поддерживать меньшую битовую глубину, чем 3x8. В этом нет никакой пользы.
Следовательно, изображения не обрабатываются потому, что они кривые изначально. Вероятно, кто-то где-то сменил им расширение, не заботясь о внутренностях.
Так что вопрос можно считать закрытым.