2012-01-13 77 views
6

¿Cómo puedo determinar si una imagen que tengo como bytes sin procesar está corrupta o no? ¿Hay alguna biblioteca de código abierto que maneje este problema para múltiples formatos en C#?Lea la imagen y determine si está corrupta C#

Gracias

+0

¿Qué formatos de imagen necesitas apoyar? Si solo es el 4 básico (bmp/​​png/gif/jpg) puede usar la clase de mapa de bits y simplemente intente cargarlos. – Will

+0

posible duplicado de [Cómo validar una imagen JPEG en C#/.Net no está dañado] (http://stackoverflow.com/questions/1173349/how-do-i-validate-a-jpeg-image-in- c-sharp-net-is-not-corrupt) – V4Vendetta

+0

He editado la pregunta. –

Respuesta

11

intenta crear un GDI + Mapa de bits en el archivo. Si falla la creación del objeto Bitmap, entonces podría suponer que la imagen está dañada. GDI + admite un número de file formats: BMP, GIF, JPEG, Exif, PNG, TIFF.

Algo parecido a esta función debería funcionar:

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

Usted puede ser capaz de limitar la Exception sólo ArgumentException, pero me gustaría experimentar con que primero antes de hacer el cambio.

EDITAR
Si usted tiene un byte[], entonces esto debería funcionar:

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

Bueno, tengo bytes sin formato ... así que he editado la pregunta –

+0

OK. bien parece que es justo lo que necesitaba! Gracias. –

+0

Esto debe usarse con cuidado. Es importante que libere el mapa de bits creado con * utilizando *. De lo contrario, es muy posible que obtenga OutOfMemory Exception mientras comprueba una gran cantidad de archivos porque el sistema se quedó sin recursos y no porque la imagen esté dañada. – Indy9000

Cuestiones relacionadas