Memory Storage Types for Bitmaps

There are several types of bitmaps:

image\sqrblit.gif Conventional bitmaps: The most common bitmaps - support all bits/pixel and with the fastest access time. But they also require the highest amount of memory.

image\sqrblit.gif Compressed bitmaps: 1-bit only, using a proprietary RLE compression. They usually require less memory than the conventional bitmaps.

image\sqrblit.gif Super-Compressed bitmaps: 1-bit (uses Fax G4 compression), 8-bit, or 24-bit (uses MCMP compression) only. They require little memory but the read and write operations performed on the bitmap are slower. Also, the 24-bit and 8-bit compression are lossy, which means there is some small amount of degradation each time the 24-bit or 8-bit super-compressed bitmap changes. (The 1-bit super-compressed bitmap uses lossy compression, so there is never any quality loss).

image\sqrblit.gif Disk bitmaps: all the bitmap data is on disk. But a memory view is used to access the disk, which causes more and more conventional memory to be used the as you read or write more bitmap pixels.

image\sqrblit.gif Tiled bitmaps: the bitmap is broken into separate tiles. Tiles can be disk or conventional memory.

To instruct LEADTOOLS to react dynamically depending on the bitmap size or the amount of available memory, use the SetMemoryThresholds method. This method will use the values set in the following properties to set the thresholds:

MaxConventionalSize property

MemoryConventionalBuffers property

MemoryConventionalTiles property

TiledBitmapsSize property

MemoryFlags property

MemoryTiledThreshold property

When LEADTOOLS has to allocate a conventional bitmap, it does the following:

1.

If the size of the bitmap being allocated is less than the fixed tile size (set through the SetMemoryThresholds method when the TiledBitmapsSize property is > 0), the bitmap is allocated as conventional. If the allocation fails, the memory allocation function fails. If the allocation succeeds, the memory allocation function returns SUCCESS. No other steps are executed.

2.

Checks the maximum size for a conventional bitmap (set through SetMemoryThresholds). If the size of the bitmap being allocated is greater than this threshold, a tiled bitmap will be allocated. Go to step 5. If the size of the bitmap being allocated is lower than the threshold, go to step 3.

3.

Checks whether there is enough available memory to allocate a conventional bitmap. (This threshold is set in the MaxConventionalSize property). If there is not enough free memory, a tiled bitmap will be allocated and go to step 5. Else, go to step 4.

4.

Try to allocate a conventional memory bitmap (bitmap which is contained entirely in conventional memory. If the allocation succeeds, the memory allocation returns success and no other steps are performed. If the allocation fails, go to step 5.

5.

Try to allocate a tiled bitmap. There can be a mix of disk and conventional memory tiles. If the function succeeds, the allocation function returns success and no other steps are performed. If the allocation fails, go to step 6.

6.

Try to allocate a tiled bitmap. Return success if the allocation succeeds, error otherwise.

To get the memory threshold information set by the SetMemoryThresholds method, call the GetMemoryThresholds method.

By default, the Windows temporary directory is used to store the disk files used for the disk tiles and disk images. You can get or set the location where these files are stored using the TempDirectory property.

Even when you have lots of RAM and enough space in the swap file, Windows might fail to allocate you one contiguous chunk of conventional memory. In this case, the bitmap will be allocated as tiled or disk.

Example: You attempt to allocate a 512MB bitmap. Windows might fail to allocate a contiguous 512MB memory chunk, but it might be able to allocate you 2x 256 MB chunks or 4x 128 MB chunks. In this case, LEADTOOLS allocates your 512MB bitmap using several smaller chunks in a tiled bitmap.

In a more extreme case, you might have not enough space to allocate the whole bitmap in conventional memory. Or you might have specified a maximum amount of conventional memory to be used with a bitmap. In either of these cases, LEADTOOLS will try to allocate a tiled bitmap with some tiles in conventional memory and others on disk.

The conventional memory tiles are always accessible (read further to see why this matters). Disk tiles will still need some chunks of conventional memory to read from disk/write to disk. We will refer to these chunks as "views". The more views you have, the more disk tiles can be accessed at a time and the faster the working with the bitmap will be. When you read or read from a disk tile, data is being cached to the view and no disk access is performed unless you move to another tile. The "move to another tile" operation is performed automatically when you read or write data to a certain row.

When you go to a disk tile that has no view, LEADTOOLS will:

image\sqrblit.gif create a new "view" (if you have not exceeded the maximum allowed of views and you have available memory) or

image\sqrblit.gif discard an old view and reassign it to the new tile. When the old view is discarded, data is written to the disk (if it has been modified since it was read). The writing of data to disk will cause a performance hit.

You can find out the memory allocation parameters for a bitmap using the GetMemoryInfo. You can change the memory allocation parameters using the SetMemoryInfo method. The memory properties are:

image\sqrblit.gif The MemoryInfoType property (conv, tiled, disk, etc)

These are for tiled bitmaps only:

image\sqrblit.gif The MemoryInfoTotalTiles property

image\sqrblit.gif The MemoryInfoTileSize property

image\sqrblit.gif The MemoryInfoConventionalTiles property

image\sqrblit.gif The MemoryInfoMaxTileViews property (for disk tiles only)

image\sqrblit.gif The MemoryInfoTileViews property (for disk tiles only)