Question

J'aimerais connaître la hauteur/largeur d'une image sur le disque sans l'ouvrir, si possible (pour des raisons de performances).

Le volet des propriétés Windows pour les images contient des informations telles que la largeur, la hauteur, la profondeur de bits, etc., ce qui me porte à croire qu'il stocke quelque part des métadonnées sur le fichier.Comment puis-je accéder à ces informations ?

Était-ce utile?

La solution

Il existe quelques questions de stackoverflow sur la façon de lire les informations EXIF ​​​​à partir d'images, telles que : Comment obtenir les données EXIF ​​d'un fichier en utilisant C#

Autres conseils

Utiliser la classe System.Drawing.Image.

        Image img = Image.FromFile(fileName);
        ImageFormat format = img.RawFormat;
        Console.WriteLine("Image Type : "+format.ToString());
        Console.WriteLine("Image width : "+img.Width);
        Console.WriteLine("Image height : "+img.Height);
        Console.WriteLine("Image resolution : "+(img.VerticalResolution*img.HorizontalResolution));

        Console.WriteLine("Image Pixel depth : "+Image.GetPixelFormatSize(img.PixelFormat));
        Console.WriteLine("Image Creation Date : "+creation.ToString("yyyy-MM-dd"));
        Console.WriteLine("Image Creation Time : "+creation.ToString("hh:mm:ss"));
        Console.WriteLine("Image Modification Date : "+modify.ToString("yyyy-MM-dd"));
        Console.WriteLine("Image Modification Time : "+modify.ToString("hh:mm:ss"));

Le moyen le plus simple d'y parvenir est, en supposant que l'image est carrée, de prendre la taille du fichier en octets et de prendre la racine carrée.Ce seront votre largeur et votre hauteur.

256 bytes = 16px x 16px

:-)

Vous pouvez également essayer de lire les informations EXIF ​​de l'image en utilisant ceci bibliothèque codeplex

Windows ne stocke pas (ce) métadonnées dans un endroit spécial dans le système de fichiers; la fenêtre Propriétés les lit simplement de l'image elle-même fichier.

Je ne pense pas que .NET offre toutes les fonctions de lire les métadonnées d'une image sans charger l'image entière. Si vous avez affaire à un nombre limité de différents formats d'image (par exemple que JPEG, PNG et GIF), il ne devrait pas être trop difficile de lire la taille de l'image vous-même en-tête.

Si, d'autre part, vous devez traiter de nombreux formats d'image, vous pouvez peut-être un coup d'oeil au code source de Unix file utilitaire . Il parvient à détecter la taille de beaucoup, beaucoup de formats d'image différents, et est extrêmement rapide à démarrer.

Afin d'obtenir la largeur et la hauteur d'une image (essentiellement, comme vous le dites, les méta-données), vous DEVONS ouvrir le fichier, Parse une sorte d'informations d'en-tête et d'obtenir ce que vous veulent de cette façon.

Vous auriez pas à lire toutes les informations de couleur / bitmap, que l'en-tête.

Ceci est la même façon Windows est capable de charger des icônes à partir de fichiers d'application sans réellement les exécuter.

Pour lire les propriétés affichées par Windows Explorer, vous pouvez utiliser les Contrôles Microsoft Shell et automatisation composant. L'avantage est que vous ne avez pas besoin de bibliothèque tierce partie (l'objet COM est déjà là) ou un code supplémentaire pour analyser l'en-tête d'image et qu'il fonctionne avec une variété de formats.

Exemple de code se trouve dans une réponse à une question relative .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top