views:

78

answers:

2

I'm trying to load an extremely large image (14473x25684), but I'm hitting into a memory limitation.

Here's a simple program to demonstrate the problem:

static void Main(string[] args)
{
    string largeimage = @"C:\Temp\test_image.jpg"; // 14473x25684

    Image i = Bitmap.FromFile(largeimage); // OutofMemoryException was unhandled
}

Now I understand that the issue isn't relevant to how much physical memory I have, but rather is an addressing limitation. Is there anything I can do to get around this limitation?

The image is indeed valid and it opens fine in Photoshop (VM Size: 916MB) and ACDSee. Also don't bother to Google the dimensions as the dimensions listed aren't exact. :)

Thank you for your time.

A: 

OS can not allocate contiguous amount of memory. All you can do about that is use of MemoryFailPoint and catch InsufficientMemoryException. But this only save you from app crashing.
As for me, to open such a big file you should use binary reader and draw a file via System.Drawing.

here is good question and answers http://stackoverflow.com/questions/2117142/when-is-it-ok-to-catch-an-outofmemoryexception-and-how-to-handle-it

Sergey Mirvoda
The OS can do it (if it's a 64-bit OS), but the .NET framework can't (even if it's 64 bits).
Windows programmer
+1  A: 

The Bitmap class will require around 1.5GB of memory to hold that instance. The .NET memory allocator normally chokes around the 1GB mark.

leppie