C:Drawing a Memory Bitmap with Allegro

From GPWiki

Contents

Loading and Displaying Bitmaps with Allegro

Memory Bitmap

A memory bitmap is the basic way of loading and displaying a bitmap in allegro.

This is nowhere near as fast as a bitmap stored in video memory, but in some instances you need to use a memory bitmap rather than a video bitmap.

#include <allegro.h>

using namespace std;

int main(int argc, char *argv[])
{
    BITMAP *image;
    PALETTE pal;
    
    allegro_init();
    install_keyboard();
    
    set_color_depth(16);
    
    //For more info on set_gfx_mode > http://www.allegro.cc/manual/view_function.php?_id=1152
    if (set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0) != 0) //GFX_SAFE can also be used, that enables software mode with no video card support.
    {
        set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
        allegro_message("Unable to set resolution\n%s\n", allegro_error);
        return 1;
    }
    
    //Load the Bitmap. Allegro dose not support .GIF files, but you can download libarys to load them.
    image = load_bitmap("gpwiki.bmp", pal);
    if (!image) 
    {
        set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
        allegro_message("Error reading bitmap file '%s'\n", allegro_error);
        return 1;
    }
    
    /* blit the image onto the screen */
    blit(image, screen, 0, 0, (SCREEN_W-image->w)/2, (SCREEN_H-image->h)/2, image->w, image->h);
    
    /* destroy the bitmap */
    destroy_bitmap(image);
    
    readkey();
    return 0;
}

END_OF_MAIN();

Video Bitmap

#include <allegro.h>

using namespace std;

int main(int argc, char *argv[])
{
    BITMAP *image;
    BITMAP *bTemp;
    PALETTE pal;
    
    allegro_init();
    install_keyboard();
    
    set_color_depth(16);
    
    if (set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0) != 0) //GFX_SAFE can also be used, that enables software mode with no video card support.
    {
        set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
        allegro_message("Unable to set resolution\n%s\n", allegro_error);
        return 1;
    }
    
    bTemp=load_bitmap("gpwiki.bmp", pal);
    image=create_video_bitmap(bTemp->w, bTemp->h);
    blit(bTemp, image, 0, 0, 0, 0, bTemp->w, bTemp->h);
    if (!image) 
    {
        set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
        allegro_message("Error reading bitmap file '%s'\n", allegro_error);
        return 1;
    }
    
    blit(image, screen, 0, 0, (SCREEN_W-image->w)/2, (SCREEN_H-image->h)/2, image->w, image->h);
    
    destroy_bitmap(image);
    
    readkey();
    return 0;
}

END_OF_MAIN();

My Custom Load_Surface() Function


Image=Load_Surface(Image, "Filename.bmp",0);

#define cStr std::string

BITMAP *Load_Surface(BITMAP *tBitmap, string Path, int Hardware)
{
    BITMAP *btemp;
    PALETTE pal;
    
    if (Hardware!=0)
    {
        btemp=load_bitmap(Path.c_str(), pal);
        tBitmap=create_video_bitmap(btemp->w, btemp->h);
        blit(btemp, tBitmap, 0, 0, 0, 0, btemp->w, btemp->h);
    }
    else
    {
        tBitmap=load_bitmap(Path.c_str(), pal);
    }
    
    if (!tBitmap)
    {
        set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
        allegro_message("Not enough memory could be found when loading up surfaces, Read log for deatils.\n");
        return NULL;
    }
    
    destroy_bitmap(btemp);
    
    return tBitmap;
}

- Chris Fesko "cdfbr"

Added May 14, 2005