Je voudrais trouver la hauteur / la largeur d'une image sur disque sans l'ouvrir, si possible (pour des raisons de performance). P>
Le volet Propriétés Windows pour les images contient des informations telles que la largeur, la hauteur, la profondeur de bits, etc., ce qui me conduit à croire qu'il stocke des métadonnées sur le fichier quelque part. Comment puis-je accéder à ces informations? P>
7 Réponses :
Le moyen le plus simple d'accomplir cela est, en supposant que l'image est carrée consiste à prendre la taille du fichier en octets et à prendre la racine carrée. Ce sera votre largeur et votre hauteur.
256 bytes = 16px x 16px
Grande hypothèse que les images sont carrées.
Wow! Les images pourraient ne pas être carrées. Hmmmmmmm cela jette une clé de la clé! ;)
Pour les images qui ne sont pas carrées, cette méthode devient infiniment plus difficile.
Votez-vous juste parce que c'est cool. Peut-être pas avoir raison, mais c'est assez soigné de savoir.
En toute gravité, si vous effectuez une compression (telle que JPEG), un raffinement sur cette méthode pourrait être raisonnablement précis.
Cela pourrait fonctionner pour (carré) bitmaps, mais sûrement pas des formats compressés?
Fonctionne uniquement si l'image est carrée, 1 octet par pixel, aucun canal alpha, le fichier n'a pas d'en-tête, de rembourrage, de métadonnées, de cartes de couleur, d'index, non comprimé ou codé, ... I.e. jamais.
Une blague de type bitmap parfaitement carrée? Ou est ce genre de blague non carrée comprimée?
Il existe des questions sur StackoverFlow sur la manière de lire les informations EXIF à partir d'images, telles que: Comment obtenir les données exif d'un fichier à l'aide de C # p>
Les données EXIF sont stockées dans le fichier, de sorte que cela nécessiterait de l'ouvrir. Qui ne répond pas aux critères de l'OP - ne disant pas que les critères de OP ne ressentent aucun sens :)
Je pense que l'exigence de l'OP est plus dans la direction qu'il souhaite ignorer la décompression de la mémoire d'image et d'allocation pour les données bitmap. Si tel était le cas, l'accès aux métadonnées est bien.
IMO signifie que ne pas charger les données d'image réelles, l'ouverture et la lecture des métadonnées devraient être correctes. Sinon, il n'y a aucune manière à inspecter ce fichier. Le véritable goulot d'étranglement de Perf chargera les données d'image, pas les métadonnées.
Windows ne stocke pas (ceci) métadonnées dans n'importe quel endroit spécial du système de fichiers; La fenêtre Propriétés les lit simplement à partir du fichier image lui-même. P>
Je ne pense pas que .NET offre des fonctions à lire uniquement les métadonnées d'une image sans chargement de l'image entière. Si vous utilisez uniquement un nombre limité de formats d'image différents (par exemple, JPEG, PNG et GIF), il ne devrait pas être trop difficile de lire la taille de l'en-tête de l'image. P>
Si, d'autre part, vous devez faire face à de nombreux formats d'image, vous pouvez peut-être consulter le code source du Unix fichier code> utilitaire . Il parvient à détecter la taille de plusieurs formats d'image différents et est floue rapide pour démarrer. P>
Pour obtenir la largeur et la hauteur d'une image (essentiellement, comme vous le mettez, les métadonnées), vous devrez em> ouvrir le fichier, analyser une sorte d'information d'en-tête et obtenir ce que vous avez Voulez-vous de cette façon. p>
Vous n'auriez pas à lire toutes les informations couleur / bitmap, uniquement l'en-tête. p>
Ceci est la même manière que Windows est capable de charger des icônes à partir de fichiers d'application sans les exécuter réellement. P>
Vérifiez cette question: p>
Pour lire les propriétés affichées par Windows Explorer, vous pouvez utiliser le composant Microsoft Shell Controls and Automation em>. L'avantage de ceci est que vous n'avez pas besoin d'une bibliothèque tierce partie (l'objet COM est déjà présent) ou d'un code supplémentaire pour analyser l'en-tête d'image et qu'il fonctionnera avec une variété de formats. P>
Un code exemple peut être trouvé dans une réponse à un Question associée < / a>. p>
Utiliser System.Drawing.Mage de classe.
duplicaté possible de Comment obtenir les données Exif de Un fichier utilisant c #