2009-04-24 13 views

risposta

42

Questo dovrebbe farlo:

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

Acclamazioni ti darò thiis una buona e si lasciano sapere come vado – vdhant

+0

Funziona a meraviglia, grazie. –

+0

Mi hai battuto nel Kent. :-) –

17

seguito della raccomandazione di Sir succo, ecco alcune codice alternativo che evita il blocco del file di immagine:

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

Ho eseguito un controllo rapido per l'allocazione della memoria avvolgendo questo codice con 'GC.GetTotalMemory (false)'. Ho controllato un'immagine bitmap 4k (4096x2160, ~ 34 MB su disco) e la quantità di memoria allocata era di circa 16kB. – cod3monk3y

+1

Inoltre, utilizzando [SysInternals ProcessMonitor] (https://technet.microsoft.com/en-us/sysinternals/bb896645.aspx) ho osservato solo 4 eventi 'ReadFile' a' (offset, length) = (0,16) , (0,14), (14,4), (18,36) 'per un totale complessivo di 70 byte letti dal file. Fantastico! – cod3monk3y

+0

@ cod3monk3y referencing ProcMon – JJS

Problemi correlati