链接此帖。我想读取图像文件的高度和宽度,而不必将整个文件读入内存。
在该帖中,Frank Krueger提到可以使用一些WPF Imaging类来实现此操作。如何实现?
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;
根据Sir Juice的建议,这里有一些避免锁定图像文件的替代代码:
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;
}
GC.GetTotalMemory(false)
中进行了一次粗略的内存分配检查。我检查了一个4k位图图像(4096x2160,磁盘上约34MB),分配的内存量大约为16kB。 - cod3monk3yReadFile
事件在 (offset,length) = (0,16), (0,14), (14,4), (18,36)
处,总共读取了 70 字节的文件。太棒了! - cod3monk3y