我正在尝试编写一个轻量级的图像查看应用程序。但是,.NET存在系统内存限制。
当尝试加载大型位图(9000 x 9000 px或更大,24位)时,会出现System.OutOfMemoryException错误。这是在一台拥有2GB RAM的Windows 2000 PC上发生的(其中1.3GB已被使用)。尝试加载文件也需要很长时间。
以下代码会生成此错误:
Image image = new Bitmap(filename);
using (Graphics gfx = this.CreateGraphics())
{
gfx.DrawImage(image, new Point(0, 0));
}
就像这段代码一样:
Stream stream = (Stream)File.OpenRead(filename);
Image image = Image.FromStream(stream, false, false);
using (Graphics gfx = this.CreateGraphics())
{
gfx.DrawImage(image, new Rectangle(0, 0, 100, 100), 4000, 4000, 100, 100, GraphicsUnit.Pixel);
}
此外,仅需执行以下操作即可:
Bitmap bitmap = new Bitmap(filename);
IntPtr handle = bitmap.GetHbitmap();
这段代码原本是为GDI设计的。 在研究中,我发现这实际上是一个内存问题,即.NET尝试在单个连续的内存块中分配比所需空间多两倍的内存。
http://bytes.com/groups/net-c/279493-drawing-large-bitmaps
我从其他应用程序(如Internet Explorer、MS Paint等)中知道,可以快速打开大型图像。我的问题是:如何在.NET中使用大型位图?
是否有任何方式可以流式传输它们或非内存加载它们?