2009-08-26 3 views
21

특정 파일 확장명과 관련된 ImageFormat 객체를 빠르게 가져올 수 있습니까? 나는 각 형식에 대한 문자열 비교보다 빠르다. 파일 확장자는 무시됩니다 -이 실제로 열고 이미지를 테스트 할 필요파일 확장자에서 ImageFormat 가져 오기

string InputSource = "mypic.png"; 
System.Drawing.Image imgInput = System.Drawing.Image.FromFile(InputSource); 
Graphics gInput = Graphics.fromimage(imgInput); 
Imaging.ImageFormat thisFormat = imgInput.RawFormat; 

:

답변

30

여기에 내가 그 트릭을해야 발견 된 일부 이전 코드의 참조 . 어쨌든 파일을 여는 것으로 가정하면 파일 확장명을 신뢰하는 것보다 훨씬 강력합니다.

파일을 열지 않으면 문자열 비교보다 성능면에서 '빠름'이 없습니다. 파일 확장명 매핑을 얻기 위해 OS를 호출하지 않아도됩니다. `;

+4

왜 라인'그래픽 gInput = Graphics.FromImage (imgInput)가 필요합니까? 'gInput'은 전혀 사용되지 않습니다. –

+0

어쩌면 그는이 모든 것을 Try-Catch에 넣고 작동하는지 확인하려고했을 것입니다. – RealityDysfunction

+0

이것은 "다른 이름으로 저장 ..."시나리오에서는 오히려 쓸모가 없습니다. – Nyerguds

25
private static ImageFormat GetImageFormat(string fileName) 
{ 
    string extension = Path.GetExtension(fileName); 
    if (string.IsNullOrEmpty(extension)) 
     throw new ArgumentException(
      string.Format("Unable to determine file extension for fileName: {0}", fileName)); 

    switch (extension.ToLower()) 
    { 
     case @".bmp": 
      return ImageFormat.Bmp; 

     case @".gif": 
      return ImageFormat.Gif; 

     case @".ico": 
      return ImageFormat.Icon; 

     case @".jpg": 
     case @".jpeg": 
      return ImageFormat.Jpeg; 

     case @".png": 
      return ImageFormat.Png; 

     case @".tif": 
     case @".tiff": 
      return ImageFormat.Tiff; 

     case @".wmf": 
      return ImageFormat.Wmf; 

     default: 
      throw new NotImplementedException(); 
    } 
} 
+0

파일을 열 수없는 경우 더 좋은 옵션입니다. 예를 들어 매우 큰 이미지를로드하면 'OutOfMemory' 예외가 발생할 수 있습니다. 이것은 강력하지는 않으며 많은 유스 케이스에 도움이 될 것입니다. – TEK

5
private static ImageFormat GetImageFormat(string format) 
    { 
     ImageFormat imageFormat = null; 

     try 
     { 
      var imageFormatConverter = new ImageFormatConverter(); 
      imageFormat = (ImageFormat)imageFormatConverter.ConvertFromString(format); 
     } 
     catch (Exception) 
     { 

      throw; 
     } 

     return imageFormat; 
    } 
+0

나는 이것이 왜 upvoted인지 이해하지 못한다! imageFormatConverter.ConvertFromString은 TypeConverter에서 상속되며 항상 null을 반환하거나 NotSupportedException을 throw합니다. [this this] (https://stackoverflow.com/a/3594313/2803565) –