2009-04-24 5 views

Répondre

42

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; 
+0

Vive je vais donner thiis un bon et laissez-vous savoir comment je vais. – vdhant

+0

Fonctionne un régal, merci. –

+0

Tu m'as battu Kent. :-) –

17

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; 
} 
+0

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

+1

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

+0

@ cod3monk3y référencement ProcMon – JJS

Questions connexes