In Windows, there are 2 basic kinds of bitmaps:
DDB - Device Dependent Bitmaps which are a legacy from the early
days of the OS.
DIB - Device Independent Bitmaps.
The basic difference is that the former are stored in a formatto
match the display adapter settings and so have a problem porting
the colour system whereas the latter do not and therefore are the
preferred choice for graphics. However, the stored format of DDBs
means that they can have better performance than DIBs. Windows is
forced to accomodate both for the sake of backwards compatibility.
ARWEN uses a DIB section library. DIB sections are
DIBs stored in memory that the user can directly write to. The
library has a basic set of routines for manipulating DIBs
including pixel and line drawing routines. Please see the
DibSection documentation
and the source code for details.
DIBs can be created from scratch or can be loaded from a bitmap on disk or pasted from the
clipboard. They can also be saved to disk as bitmaps or copied to
the clipboard. The library supports only 8-bit or 32-bit DIBs.
Whenever a bitmap of a different colour depth is encountered, the
library will convert it into one of the supported formats. 8-bit
DIBs have an associated 256 entry palette which is easy &
fast to manipulate to provide effects such as fading, contrast
& brightness adjustment etc.. These DIBs also have better
blitting performance than 32-bit DIBs, however, those have
unlimited access to all possible colours so they are useful for
high-resolution graphics but they do require about 4 times as
much memory and are slower to manipulate. An important advantage
of DIB sections is that the user is not forced to use the
cumbersome Windows GDI system - those fast action games you may
have seen for Windows probably use DirectX or OpenGL but NOT the
normal GDI functions. Since the DIB pixels are directly accesible
we can use routines like mem_set() to do things like clear the
whole image or draw horizontal lines at near maximum speeds. The
library also has a fast line-drawing routine that takes advantage
of having direct access to the DIB. Drawing text on DIBs is also
possible but the font used is a default (stock) one as Font
creation in Arwen has not been added yet. Lastly, all graphics
routines in the library are written entirely in Euphoria. This
means that direct operations, such as line drawing, will benefit
greatly from translation & compilation as there is no
overhead for calling a DLL routine to perform the operation. Such
applications can be highly graphic performant.