¿Cómo puedo determinar si un archivo es un archivo de imagen en .NET?

No quiero confiar en la extensión del archivo. No me importa saber qué tipo de imagen es (.jpg, .png, etc.), simplemente quiero saber si el archivo es una imagen o no. Preferiría no usar ningún dll que no sea .NET si es posible.

La mejor manera de saber cómo hacer esto es la siguiente:

bool isImageFile;
try
{
    Image.FromFile(imageFile).Dispose();
    isImageFile = true;
}
catch (OutOfMemoryException)
{
    isImageFile = false;
}

Como se señala aquí:http: //msdn.microsoft.com/en-us/library/stf701f5.asp, Image.FromFile() lanza unOutOfMemoryException si el archivo no es un formato de imagen válido. Usar lo anterior me daexactamente el resultado que quiero, sin embargo, preferiría no usarlo por los siguientes motivos:

Creo que usar try-catches para la ejecución normal del programa es una mala práctica por razones de rendimiento.Image.FromFile() carga todo el archivo de imagen (si es un archivo de imagen) en la memoria. Supongo que esto es un desperdicio porque solo necesito el tipo de archivo y no necesito realizar ninguna otra manipulación de imágenes en este punto de mi código. No me gusta atraparOutOfMemoryExceptions porque ¿qué pasa si hay un problema REAL de falta de memoria y mi programa lo traga y continúa?

¿Hay alguna forma mejor de hacer esto? O,Alguna / todas mis inquietudes mencionadas anteriormente no están justificadas?

Editar Desde que recibí las respuestas aquí, estas son lastres soluciones Ahora estoy al tanto de:

Cargue toda la imagen en la memoria a través deImage.FromFile() y un try-catch. Pros: Hace una comprobación más profunda del contenido de los archivos de imagen; cubre muchos tipos de imágenes.Contra: Más lento; sobrecarga de try-catch y cargando el archivo de imagen completo en la memoria; peligro potencial de atrapar una excepción 'real' OutOfMemoryException.Compruebe los bytes del encabezado del archivo de imagen. Pros: Rápido, bajo uso de memoria.Contra: potencialmente frágil; necesita programar para cada tipo de archivo.Compruebe la extensión del archivo. Pros: Más rápido; más simple.Contra: No funciona en todas las situaciones; más fácilmente equivocado.

(No veo un "ganador" claro, ya que puedo imaginar una situación en la que cada uno sería apropiado. Para los propósitos de mi aplicación, la verificación del tipo de archivo ocurre con poca frecuencia como para que los problemas de rendimiento del método 1 no sean un problema. )

Respuestas a la pregunta(12)

Su respuesta a la pregunta