Прочитайте изображение и определите, поврежден ли он C # - PullRequest
6 голосов
/ 13 января 2012

Как определить, повреждено ли изображение, которое у меня есть в виде необработанных байтов. Есть ли библиотека с открытым исходным кодом, которая обрабатывает эту проблему для нескольких форматов в C #?

Спасибо

Ответы [ 2 ]

12 голосов
/ 13 января 2012

Попробуйте создать GDI + Bitmap из файла.Если создать объект Bitmap не удастся, вы можете предположить, что изображение повреждено.GDI + поддерживает ряд форматов файлов : BMP, GIF, JPEG, Exif, PNG, TIFF.

Что-то вроде этой функции должно работать:

public bool IsValidGDIPlusImage(string filename)
{
    try
    {
        using (var bmp = new Bitmap(filename))
        {
        }
        return true;
    }
    catch(Exception ex)
    {
        return false;
    }
}

Вы можетебыть в состоянии ограничить Exception только ArgumentException, но я бы сначала поэкспериментировал с этим перед переключением.

EDIT Если у вас есть byte[], то это должно работать:

public bool IsValidGDIPlusImage(byte[] imageData)
{
    try
    {
        using (var ms = new MemoryStream(imageData))
        {
            using (var bmp = new Bitmap(ms))
            {
            }
        }
        return true;
    }
    catch (Exception ex)
    {
        return false;
    }
}
0 голосов
/ 13 января 2012

Вы можете посмотреть эти ссылки для принятия идеи.Первый здесь; Проверка изображений

И второй здесь; Как проверить поврежденные изображения TIFF

И извините, я не знаю никакой внешней библиотеки для этого.

...