2012-01-13 32 views
6

Ham bayt olarak sahip olduğum bir resmin bozuk olup olmadığını nasıl belirleyebilirim. Bu sorunu C# içinde birden çok biçim için işleyen herhangi bir açık kaynak kitaplığı var mı?Görüntüyü okuyun ve bozuk bozuk olup olmadığını belirleyin C#

Teşekkür

+0

Hangi görüntü biçimlerini desteklemeniz gerekiyor? Eğer sadece temel 4 (bmp/​​png/gif/jpg) ise, bitmap sınıfını kullanabilir ve sadece yüklemeyi deneyebilirsiniz. – Will

+0

olası yinelenmesi [Nasıl C#/.Net bir JPEG resmi doğrulayın yanlış değil] (http://stackoverflow.com/questions/1173349/how-do-i-validate-a-jpeg-image-in- c-keskin-net-bozuk değil) – V4Vendetta

+0

Soruyu düzenledim. –

cevap

11

deneyin dosyasından bir GDI + Bitmap oluşturun. Bitmap nesnesinin oluşturulması başarısız olursa, görüntünün bozuk olduğunu varsayabilirsiniz. GDI +, file formats sayısını destekler: 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; 
    } 
} 

Sen Exception sadece ArgumentException sınırlamak mümkün olabilir, ama geçiş yapmadan önce ilk deneme olacaktır: Bu işlev gibi

şey çalışmalıdır. Eğer bir byte[] varsa

DÜZENLEME
, o zaman bu çalışması gerekir:

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

Ehli baytım var ... bu yüzden –

+0

sorusunu düzelttim. iyi görünüyor sadece ihtiyacım olan şey bu! Teşekkürler. –

+0

Bu, dikkatli kullanılmalıdır. * Kullanarak * oluşturduğunuz Bitmap'i serbest bırakmanız önemlidir. Else OutOfMemory İstisnasını, sistem bozukluğu nedeniyle değil, kaynakların tükendiği için çok sayıda dosyayı kontrol ederken elde etmeniz oldukça olasıdır. – Indy9000