2012-01-13 2 views
6

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

Благодаря

+0

Какие форматы изображений вам нужны для поддержки? Если его просто базовый 4 (bmp/​​png/gif/jpg), вы можете использовать класс растрового изображения и просто пытаться их загрузить. – Will

+0

Возможный дубликат [Как проверить изображение JPEG на C#/.Net не повреждено] (http://stackoverflow.com/questions/1173349/how-do-i-validate-a-jpeg-image-in- c-sharp-net-is-not-corrupted) – V4Vendetta

+0

Я отредактировал вопрос. –

ответ

11

Попытка создать GDI + Bitmap из файла. Если создание объекта Bitmap не удается, вы можете предположить, что изображение повреждено. GDI + поддерживает число file formats: 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

Ну, у меня есть сырые байты ... поэтому я отредактировал вопрос –

+0

OK. прекрасный внешний вид, это то, что мне нужно! Благодарю. –

+0

Это следует использовать с осторожностью. Важно, чтобы вы выпустили Bitmap, созданный с помощью * using *. Кроме того, вполне возможно, что вы получите OutOfMemory Exception при проверке большого количества файлов, потому что в системе закончились ресурсы, а не потому, что изображение повреждено. – Indy9000

0

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

И второй здесь; How to check corrupt TIFF images

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