2009-04-24 8 views

Odpowiedz

42

ten powinien zrobić:

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

Cheers dam Thiis dobry i pozwala wiem, jak lecę. – vdhant

+0

Działa na poczęstunek, dzięki. –

+0

Uderzyłeś mnie w to Kent. :-) –

17

następstwie zalecenia Sir sok, oto jest jakaś alternatywa kod, który pozwala uniknąć blokowania pliku graficznego:

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

Zrobiłem pobieżną kontrolę alokacji pamięci, zawijając ten kod za pomocą 'GC.GetTotalMemory (false)'. Sprawdziłem obraz bitmapowy 4k (4096x2160, ~ 34MB na dysku), a ilość przydzielonej pamięci wynosiła około 16kB. – cod3monk3y

+1

Dodatkowo za pomocą [SysInternals ProcessMonitor] (https://technet.microsoft.com/en-us/sysinternals/bb896645.aspx) Obserwowałem tylko 4 zdarzenia "ReadFile' w' (offset, length) = (0,16) , (0,14), (14,4), (18,36) 'na sumę całkowitą 70 bajtów odczytanych z pliku. Fantastyczny! – cod3monk3y

+0

@ cod3monk3y odwołując się do ProcMon – JJS

Powiązane problemy