In general, Allegro is designed to be used in only one color depth at a time, so you will call set_color_depth() once and then store all your bitmaps in the same format. If you want to mix several different pixel formats, you can use create_bitmap_ex() in place of create_bitmap(), and call bitmap_color_depth() to query the format of a specific image. Most of the graphics routines require all their input parameters to be in the same format (eg. you cannot stretch a 15 bit source bitmap onto a 24 bit destination), but there are three exceptions: blit() can copy between bitmaps of any format, converting the data as required, draw_sprite() can draw 256 color source images onto destinations of any format, and draw_character() _always_ uses a 256 color source bitmap, whatever the format of the destination.
Expanding a 256 color source onto a truecolor destination is fairly fast (obviously you must set the correct palette before doing this conversion!). Converting between different truecolor formats is slightly slower, and reducing truecolor images to a 256 color destination is very slow (it can be sped up significantly if you set up the global rgb_map table before doing the conversion).
int bestfit_color(PALLETE pal, int r, int g, int b);
Searches the specified palette for the closest match to the requested
color, which are specified in the VGA hardware 0-63 format. Normally you
should call makecol8() instead, but this lower level function may be
useful if you need to use a palette other than the currently selected
one, or specifically don't want to use the rgb_map lookup table.
extern RGB_MAP *rgb_map;
To speed up reducing RGB values to 8 bit paletted colors, Allegro uses a
32k lookup table (5 bits for each color component). You must set up this
table before using the gouraud shading routines, and if present the table
will also vastly accelerate the makecol8() function. RGB tables can be
precalculated with the rgbmap utility, or generated at runtime. The
RGB_MAP structure is defined as:
typedef struct { unsigned char data[32][32][32]; } RGB_MAP;void create_rgb_table(RGB_MAP *table, PALETTE pal, void (*callback)(int pos));
void hsv_to_rgb(float h, float s, float v, int *r, int *g, int *b);
void rgb_to_hsv(int r, int g, int b, float *h, float *s, float *v);
Convert color values between the HSV and RGB colorspaces. The RGB values
range from 0 to 255, hue is from 0 to 360, and saturation and value are
from 0 to 1.