Lien this10 post Je souhaite pouvoir lire une image en hauteur et en largeur sans lire dans l'ensemble du fichier en mémoire. Dans l'article, Frank Krueger mentionne qu'il existe une façon de le faire avec certaines classes d'imagerie WPF. Une idée sur la façon de le faire ??Utilisation des classes WPF Imaging - Obtention des dimensions de l'image sans lire le fichier entier
Répondre
Cela devrait le faire:
var bitmapFrame = BitmapFrame.Create(new Uri(@"C:\Documents and Settings\All Users\Documents\My Pictures\Sample Pictures\Winter.jpg"), BitmapCreateOptions.DelayCreation, BitmapCacheOption.None);
var width = bitmapFrame.PixelWidth;
var height = bitmapFrame.PixelHeight;
Suite à la recommandation de jus Monsieur, voici un code alternatif qui évite le verrouillage du fichier image:
using (var stream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read))
{
var bitmapFrame = BitmapFrame.Create(stream, BitmapCreateOptions.DelayCreation, BitmapCacheOption.None);
var width = bitmapFrame.PixelWidth;
var height = bitmapFrame.PixelHeight;
}
J'ai fait une vérification rapide de l'allocation de mémoire en enveloppant ce code avec 'GC.GetTotalMemory (false)'. J'ai vérifié une image bitmap 4k (4096x2160, ~ 34MB sur le disque) et la quantité de mémoire allouée était d'environ 16ko. – cod3monk3y
De plus, en utilisant [SysInternals ProcessMonitor] (https://technet.microsoft.com/en-us/sysinternals/bb896645.aspx), j'ai observé seulement 4 événements 'ReadFile' à' (offset, length) = (0,16) , (0,14), (14,4), (18,36) 'pour un grand total de 70 octets lus dans le fichier. Fantastique! – cod3monk3y
@ cod3monk3y référencement ProcMon – JJS
Vive je vais donner thiis un bon et laissez-vous savoir comment je vais. – vdhant
Fonctionne un régal, merci. –
Tu m'as battu Kent. :-) –