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 шт):

Автор решения: Keronon

Что же. Как и сказал @rotabor , я немного поисследовал файлы с исключениями. Это всё .jpg-файлы, и их отличие от обработанных - глубина цвета в 32b.

Немного поискав я встретил следующую информацию:

JPEG - трехцветный формат. Обычно он имеет 8 бит на цвет, но может иметь 12 или 16. Следовательно, 24 = 3x8 бит цвета приемлемо, но 16 или 32 просто невозможно. Это просто не делится на три. 3x16 = 48 возможно, но это более высокая глубина цвета. JPEG предназначен для фотографий, и нет смысла поддерживать меньшую битовую глубину, чем 3x8. В этом нет никакой пользы.

Следовательно, изображения не обрабатываются потому, что они кривые изначально. Вероятно, кто-то где-то сменил им расширение, не заботясь о внутренностях.

Так что вопрос можно считать закрытым.

→ Ссылка