我正在尝试编写一个轻量级的图像查看应用程序。但是,.NET存在系统内存限制。如何在.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涂料等),它可以打开大的图像,并相当迅速。我的问题是,如何在.NET中使用大型位图?
是否有反正流它们,或非内存加载它们?
我不认为这将适用于基于限制的32位系统 – WiiMaxx 2014-01-31 13:04:05