有沒有快速的方法來獲取與特定文件擴展名關聯的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;
這就需要實際打開和測試圖像 - 文件擴展名被忽略。假設你打開文件,這比信任一個文件擴展名要穩健得多。
如果你不打開文件,沒有比字符串比較「更快」(在性能意義上) - 當然不會調用操作系統來獲取文件擴展名映射。
看到文件關聯的CodeProject上的文章http://www.codeproject.com/KB/dotnet/System_File_Association.aspx
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();
}
}
如果打開文件不可行,這是更好的選擇。例如,加載非常大的圖像可能會導致「OutOfMemory」異常。這不是很健壯,對許多用例都會這樣做。 – TEK 2016-05-09 15:56:20
private static ImageFormat GetImageFormat(string format)
{
ImageFormat imageFormat = null;
try
{
var imageFormatConverter = new ImageFormatConverter();
imageFormat = (ImageFormat)imageFormatConverter.ConvertFromString(format);
}
catch (Exception)
{
throw;
}
return imageFormat;
}
我不明白爲什麼這是upvoted! imageFormatConverter.ConvertFromString繼承自TypeConverter並始終返回null或引發NotSupportedException! [見此](https://stackoverflow.com/a/3594313/2803565) – 2017-12-10 11:45:09
- 1. 獲取文件擴展名
- 2. 如何從沒有擴展名的文件名獲取文件擴展名?
- 3. 從文件獲取擴展
- 4. 從System.Drawing.Image.RawFormat獲取ImageFormat
- 5. 獲取除擴展名外沒有擴展名的文件名
- 6. 從URL和帶文件擴展名獲取文件名
- 7. 獲取文件的擴展名,但無法獲取文件名
- 8. 從文件名中獲取文件名和擴展名沒有文件名
- 9. 獲取Php文件/圖像擴展名
- 10. 獲取文件的擴展名(編輯)
- 11. Primefaces FileUpload獲取文件擴展名
- 12. FileUpload獲取文件擴展名
- 13. Node.js獲取文件擴展名
- 14. 獲取文件擴展名 - jquery
- 15. 使用preg_replace獲取文件擴展名
- 16. 在java中獲取文件擴展名
- 17. 獲取文件擴展名C錯誤
- 18. 獲取文件擴展名C
- 19. 獲取擴展類的文件名
- 20. Nodejs獲取文件擴展名
- 21. Android - 如何獲取文件擴展名?
- 22. asp.net mvc HttpPostedFileBase獲取文件擴展名
- 23. Smarty獲取文件擴展名
- 24. PHP,獲取文件名沒有擴展
- 25. Angularjs如何獲取文件擴展名?
- 26. php:從損壞的文件中獲取文件擴展名
- 27. 從file_get_contents獲得文件擴展名
- 28. 從* .gz擴展名中提取文件
- 29. 如何從URL中獲取文件名和擴展名?
- 30. 從wget響應中獲取「文件名」和擴展名
爲什麼你需要行'圖形gInput = Graphics.FromImage(imgInput);'? 'gInput'根本不使用。 – 2014-09-25 08:15:49
也許,他想把所有這些都放在Try-Catch中,看看它是否有效。 – RealityDysfunction 2014-10-08 15:58:49
儘管如此,這對於「另存爲...」場景來說是無用的。 – Nyerguds 2015-02-26 09:55:52