Existe-t-il un moyen rapide d'obtenir l'objet ImageFormat associé à une extension de fichier particulière? Je cherche des comparaisons plus rapides que les chaînes pour chaque format.Obtenir ImageFormat à partir de l'extension de fichier
Répondre
Voici un vieux code que je trouve que devrait faire l'affaire:
string InputSource = "mypic.png";
System.Drawing.Image imgInput = System.Drawing.Image.FromFile(InputSource);
Graphics gInput = Graphics.fromimage(imgInput);
Imaging.ImageFormat thisFormat = imgInput.RawFormat;
Cela nécessite réellement ouvrir et tester l'image - l'extension de fichier est ignoré . En supposant que vous ouvrez le fichier de toute façon, c'est beaucoup plus robuste que de faire confiance à une extension de fichier.
Si vous n'ouvrez pas les fichiers, il n'y a rien de plus "rapide" (dans le sens des performances) qu'une comparaison de chaîne - ne pas appeler le système d'exploitation pour obtenir des mappages d'extension de fichier.
voir l'article CodeProject sur les associations de fichiers 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();
}
}
C'est la meilleure option si l'ouverture du fichier n'est pas possible. Par exemple, le chargement d'une très grande image peut entraîner une exception 'OutOfMemory'. Ce n'est pas aussi robuste, fera pour de nombreux cas d'utilisation. – TEK
private static ImageFormat GetImageFormat(string format)
{
ImageFormat imageFormat = null;
try
{
var imageFormatConverter = new ImageFormatConverter();
imageFormat = (ImageFormat)imageFormatConverter.ConvertFromString(format);
}
catch (Exception)
{
throw;
}
return imageFormat;
}
Je ne comprends pas pourquoi c'est upvoted! imageFormatConverter.ConvertFromString est hérité de TypeConverter et renvoie toujours null ou déclenche une exception NotSupportedException! [voir ceci] (https://stackoverflow.com/a/3594313/2803565) –
- 1. Obtenir de nouvelles lignes à partir d'un fichier avec FileSystemWatcher
- 2. Comment obtenir un nom de fichier à partir d'un chemin?
- 3. Comment obtenir un fichier modifié à partir du fichier de base et du fichier diff?
- 4. Obtenir le nom d'un fichier à partir d'un emplacement de fichier en Java
- 5. Obtention de la taille de fichier à partir de OpenFileDialog?
- 6. Obtenir le code IL à partir du fichier binaire DLL
- 7. Obtenir un FlowDocument à partir d'un fichier modèle XAML
- 8. Obtenir ThreadName à partir de ThreadID
- 9. Obtenir SelectedItem à partir de TreeView?
- 10. Obtenir ProgID à partir de l'assembly .NET
- 11. Obtenir l'année à partir de boost ptime
- 12. Comment puis-je obtenir un handle de fichier à partir de la ligne de commande?
- 13. Comment obtenir Content-Type lors du téléchargement de fichier à partir de flash - est-ce possible?
- 14. Comment puis-je obtenir le nom de fichier d'un document Word à partir de C#?
- 15. Comment obtenir des informations de version de fichier à partir d'un C++ exe en C#?
- 16. Comment faire pour obtenir une trace de pile à partir du fichier de vidage sous Windows
- 17. Win32API - Comment obtenir le nom de fichier du processus à partir du handle de processus?
- 18. Comment restaurer un fichier de vidage à partir de mysqldump?
- 19. Recherche d'un fichier à partir de VB.NET
- 20. Fichier CHM à partir de fichiers XSD
- 21. Lecture de données à partir d'un fichier
- 22. MSBuild obtenir la référence d'assembly à partir de ProjectReference
- 23. Obtenir FontWeight/FontStyle/TextDecorations à partir de WPF RichTextBox
- 24. Obtenir des données XML à partir de Xerces (C++)
- 25. Obtenir une chaîne à partir de fichiers xml
- 26. Détermination du nom de fichier (ouvert) à partir d'un fichier *
- 27. Obtention de l'inputtream à partir d'une ressource classpath (fichier XML)
- 28. obtenir des valeurs de structure de données à partir d'arraylist
- 29. Obtenir l'état de la batterie à partir de J2ME
- 30. Pour obtenir les valeurs de décalage à partir de jquery
Pourquoi avez-vous besoin de la ligne 'Graphics gInput = Graphics.FromImage (imgInput);'? 'gInput' n'est pas utilisé du tout. –
Peut-être, il voulait mettre tout cela dans un Try-Catch et voir si cela fonctionne. – RealityDysfunction
Ceci est plutôt inutile pour un scénario "enregistrer sous ...", cependant. – Nyerguds