Jump to content

Out of memory to load/edit an image? Read this first!


david.atwell

Recommended Posts

Are you getting a "Not enough memory to load this image." error? Is the program refusing to create a new layer, or resize the image?

If you're getting a "file too large" error, your problem might not be what you think it is. Here's Rick's explanation, from another thread:
 

 

Rick Brewster said:
Paint.NET's architecture is such that it must:

1) Hold the entire image in memory
2) Have a bitmap used for compositing the image
3) Have a scratch surface

(3) is not always in use, but it's important to have it allocated because it makes error handling much simpler. If you clicked on the Clone Stamp and suddenly got an out of memory error, that would be lame. (2) is not always important, as a single layer image effectively needs no compositing.

So, to compute the memory requirements for an image, the following formula can be used:

(W x H x 4) x (L + 2)

W is the width of the image in pixels, H is the height in pixels, 4 is because each pixel takes 4 bytes, L is the number of layers, and the +2 accounts for (2) and (3) above.

So for your 7680x2880 image, which I assume has 1 layer, the total memory required is:

(7680 x 2880 x 4) x (1 + 2)
= (88473600) x (3)
= 265,420,800
= 253.125 MB RAM

When you resize an image, you must have enough memory to hold the image at both its old and new sizes. Other factors influence how much memory is available. For instance, just because there is still 1 GB of virtual address space available does not mean that there is 1 GB available contiguously.

Programs like Photoshop and The GIMP have complicated memory managers that tile the image, swapping it out to scratch pads (disk) as necessary. This impacts coding complexity because every part of the application that works with the image must take the tiling in to consideration. It also affects performance, but has the advantage of being able to work with much larger images. For Paint.NET, I purposely chose a design that enabled coding simplicity for many reasons.

If you have a 64-bit CPU and OS, you will have a much harder time running out of memory.

 

In addition,

 

Rick Brewster said:
Memory management is not as simple as Empty or Full, so even after the algebra you are unfortunately not guaranteed anything.

The current solution for this is to upgrade to a 64-bit version of Windows. [if] your CPU supports it. Then the virtual memory manager will have an enormous amount of breathing room in which to find the contiguous blocks necessary.

 

 

----

 

Please be aware that all of this was written prior to the release of PdN 4.0, and some things may have changed.

Edited by toe_head2001

 

The Doctor: There was a goblin, or a trickster, or a warrior... A nameless, terrible thing, soaked in the blood of a billion galaxies. The most feared being in all the cosmos. And nothing could stop it, or hold it, or reason with it. One day it would just drop out of the sky and tear down your world.
Amy: But how did it end up in there?
The Doctor: You know fairy tales. A good wizard tricked it.
River Song: I hate good wizards in fairy tales; they always turn out to be him.

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...