回 帖 发 新 帖 刷新版面

主题:[原创]发个ALLEGRO库的介绍文章吧

以前写的,就算给别人窥下ALLEGRO吧
可做从TC图形程序到WIN DX程序的过渡
=====================================================
来看一段ALLEGRO的代码:

#include<stdlib.h>
#include<stdio.h>
#include"allegro.h" /*ALLEGRO的头文件*/

int main()
{
    BITMAP *b1,*b2;/*定义两个BITMAP类型变量用于储存位图信息。BITMAP类型见ALLEGRO手册*/
    PALLETE pallete1,pallete2;/*定义两个调色板类型*/
    b1=load_pcx("a.pcx",pallete1);/*读PCX图片a.pcx,将调色板信息存入pallete1中,并返回一个BITMAP指针给b1*/
    if(b1==NULL)/*load_pcx()函数读图错误会返回一个NULL,这是错误处理部分*/
    {
        printf("ERROR!");
        return 0;
    }
    b2=load_pcx("gwl.pcx",pallete2);/*同上*/
    if(b2==NULL)/*同上*/
    {
        printf("ERROR!");
        return 0;
    }
    allegro_init();/*ALLEGRO初始化*/
    install_keyboard();/*键盘处理初始化*/
    set_gfx_mode(GFX_VGA,320,200,0,0);/*设置显示模式,这里的设置是320*200 256色VGA模式*/
    set_palette(pallete1);/*将pallete1中的调色板信息设置到调色板中*/
    blit(b1,screen,0,0,0,0,b1->w,b1->h);/*把b1指针所指的位图数据放到屏幕中显示;位图要显示的部分左上角坐标是前面的0,0;显示到屏幕的位置的左上角坐标是后面的0,0;显示的长宽取了位图的长宽*/
    set_palette(pallete2);/*同上*/
    blit(b2,screen,0,0,255,0,b2->w,b2->h);/*同上*/
    text_mode(-1);/*设置文字输出模式为负数-1,即背景透明*/
    textout(screen, font, "NO.7 GHOST GAME STDIO", 150, 180, 2);/*显示文字到屏幕,文字块的左上角在(150,180)处,2是颜色*/
    textout(screen, font, "http://7ggs.27h.com", 166, 190, 67);/*同上*/
    readkey();/*读一个键值,类似getch(),起暂停作用*/
    fade_out(5);/*屏幕渐变黑色,5是速度,1—64从慢到快*/
    return 0;/*程序结束,返回0值*/
}
注明一下,这是DJGPP+ALLEGRO的程序,不适用于DEV C++。

相信这么详细的注释,你一定能轻松的明白一个基本的ALEGRO程序是怎么样的。
不过还是应该多说几句。

BITMAP和PALLETE都是ALLEGRO里定义的类型。

load_pcx()只是读图函数之一,ALLEGRO还支持BMP,TGA两种格式。

如果是256色的图片,那么图片就有一个调色板信息,记录了256个RGB引索值。

如果同时把两幅不同调色板的256色图片显示在一个屏幕上,就会出现花版。
解决的方法是:1 用软件把图片的调色板换成标准调色板;2 把两幅图合成一幅图。
方法2与1比较,图片失真度要好点。

有allegro_init(),就一定有allegro_exit()函数,但是allegro_init()把它在atexit()中加载了,程序退出会自动调用allegro_init(),无须你亲自动手。

ALEGRO支持的显示模式有很多种,你可以参看ALLEGRO的手册,云风工作室有其中文翻译版。

blit()不仅可以实现向屏幕screen贴图,还可以实现几个BITMAP类型之间贴。

注意一点:ALLEGRO的屏幕是自动剪裁的,如果用blit()向屏幕输出图象,超出的部分不会显示,是不是很方便?

text_mode()函数中的参数为负时,文字输出背景是透明的,为0或正数时,背景是色块。

fade_out()函数是一个操纵调色板的函数,这样的函数还有一些,可以实现一定的特效。

回复列表 (共1个回复)

沙发

http://www.1110.net/down.asp?UserID=342917

我来回复

您尚未登录,请登录后再回复。点此登录或注册