Como posso determinar se um arquivo é um arquivo de imagem no .NE

Não quero confiar na extensão do arquivo. Não quero saber que tipo de imagem é (.jpg, .png etc.). Quero apenas saber se o arquivo é uma imagem ou não. Prefiro não usar dlls que não sejam do .NET, se possíve

A melhor maneira de saber como fazer isso é o seguinte:

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

Conforme observado aqui:http: //msdn.microsoft.com/en-us/library/stf701f5.asp, Image.FromFile() lança umOutOfMemoryException se o arquivo não for um formato de imagem válido. Usando o acima me dá exatamente o resultado que eu quero, no entanto, prefiro não usá-lo pelos seguintes motivos:

É minha convicção que o uso de try-catchs para execução normal do programa é uma prática ruim por razões de desempenhImage.FromFile() carrega o arquivo de imagem inteiro (se for um arquivo de imagem) na memória. Isso é um desperdício, presumo, porque eu só preciso do tipo de arquivo e não preciso mais manipular imagens neste momento do meu códig Eu não gosto de pegarOutOfMemoryException porque o que acontece se houver um problema REAL de falta de memória e meu programa o engole e continu

Existe alguma maneira melhor de fazer isso? Ou alguma / todas as minhas preocupações listadas acima são injustificadas?

Editar Desde que recebemos as respostas aqui, estas são as três soluções Agora estou ciente de:

Carregue a imagem inteira na memória viaImage.FromFile() e um try-catch. Pros: Faz uma verificação mais profunda do conteúdo dos arquivos de imagem; abrange muitos tipos de imagens. Contras: Mais lento; sobrecarga de try-catch e carregamento de arquivo de imagem completo na memória; risco potencial de pegar uma OutOfMemoryException 'real'. Verifique os bytes do cabeçalho do arquivo de image Pros: Uso rápido e com pouca memóri Contras: potencialmente quebradiço; precisa programar para cada tipo de arquivo. Verifique a extensão do arquiv Pros: Mais rápido; mais simples. Contras: Não funciona em todas as situações; mais facilmente errado.

(Não vejo um "vencedor" claro, pois posso imaginar uma situação em que cada um seria apropriado. Para os fins do meu aplicativo, a verificação do tipo de arquivo ocorre com pouca frequência, de modo que os problemas de desempenho do método 1 não foram um problema. )

questionAnswers(12)

yourAnswerToTheQuestion