Programming 版 (精华区)

发信人: lansh (沧海一粟), 信区: Programming
标  题: Allegro 游戏程序库 (载入图片文件)
发信站: 哈工大紫丁香 (2002年09月11日20:04:59 星期三), 站内信件

发信人: cloudwu (云风), 信区: GAME_Designer
标  题: Allegro 游戏程序库 (载入图片文件)
发信站: BBS 水木清华站 (Sun May 17 09:38:48 1998)

     ______   ___    ___
    /\  _  \ /\_ \  /\_ \
    \ \ \L\ \\//\ \ \//\ \      __     __   _ __   ___
     \ \  __ \ \ \ \  \ \ \   /'__`\ /'_ `\/\`'__\/ __`\
      \ \ \/\ \ \_\ \_ \_\ \_/\  __//\ \L\ \ \ \//\ \L\ \
       \ \_\ \_\/\____\/\____\ \____\ \____ \ \_\\ \____/
        \/_/\/_/\/____/\/____/\/____/\/___L\ \/_/ \/___/
                                       /\____/
                                       \_/__/        3.0 版
                    一个游戏程序库
               By Shawn Hargreaves, 1994/97
                      云风  译    5/16/1998
                      http://www.nease.net/~cloudwu
                      E-mail: cloudwu@nease.net
=============================================
============  载入图片文件       ============
=============================================
警告: 当使用真彩图片时, 你必须在载入任何位图数据前
设置图形模式! 否则点格式 (RGB 或 BGR)
将无法得知, 因此文件可能转换错误.
BITMAP *load_bitmap(char *filename, RGB *pal);
   从一个文件里装入位图, 返回一个位图指针并且将
   调色板数据存到指定的位置, 调色板是 256 个 RGB 结构的数组.
   你有责任在你使用完它以后释放掉位图.
   如果出错则返回 NULL. 目前这个函数
   支持 BMP, LBM, PCX, 和 TGA 文件, 以文件的后缀来决定类型.
   如果文件包含一个真彩图片, 你必须设置显示模式
   或者在装载图片前调用 set_color_conversion().
BITMAP *load_bmp(char *filename, RGB *pal);
   调入一个 Windows 或 OS/2 的 256 色或 24 位真彩 BMP 文件.
BITMAP *load_lbm(char *filename, RGB *pal);
   调入一个 256 色 IFF ILBM/PBM 文件.
BITMAP *load_pcx(char *filename, RGB *pal);
   调入一个 256 色或 24 位真彩 PCX 文件.
BITMAP *load_tga(char *filename, RGB *pal);
   调入一个 256 色, 15 位高彩, 或 24 位真彩 TGA 文件.
int save_bitmap(char *filename, BITMAP *bmp, RGB *pal);
   将位图写入文件, 使用指定的调色板, 就是 256 个 RGB 结构的调色板.
   如果出错则返回非零值. 输出
   格式从文件的后缀检测到: 目前这个
   函数支持 BMP, PCX 和 TGA 格式. 一件需要提防的事:
   如果你使用这个来将屏幕拷入文件,可能得到一个
   比你希望的大的多的图片, 因为 Allegro 经常创建
   比可见屏幕大的多的虚拟屏幕. 你能通过
   使用一个子位图来指定屏幕的一部分来避免这个问题而保存屏幕, 比如:
      BITMAP *bmp;
      PALETTE pal;
      get_palette(pal);
      bmp = create_sub_bitmap(screen, 0, 0, SCREEN_W, SCREEN_H);
      save_bitmap("dump.pcx", bmp, pal);
      destroy_bitmap(bmp);
int save_bmp(char *filename, BITMAP *bmp, RGB *pal);
   将位图写到 256 色 或 24 位真彩 BMP 文件.
int save_pcx(char *filename, BITMAP *bmp, RGB *pal);
   将位图写到 256 色或 24 位真彩 PCX 文件.
int save_tga(char *filename, BITMAP *bmp, RGB *pal);
   将位图写到 256 色, 15 位高彩, 或 24 位真彩 TGA 文件.

void register_bitmap_file_type(char *ext,
                    BITMAP *(*load)(char *filename, RGB *pal),
                    int (*save)(char *filename, BITMAP *bmp, RGB *pal));
   告之 load_bitmap() 和 save_bitmap() 函数一个新的文件类型,
   提供例程用来读写这种图片格式 (其中某个函数可以为 NULL).

void set_color_conversion(int mode);
   指定当从外部位图文件或数据文件里读取图片时,怎样在
   有效的颜色深度之间转换. mode 是一个
   指定允许何种转换类型的位掩码. 如果
   合适的位被设置, 数据将被转换到当前的点
   格式 (由调用 set_color_depth() 函数来选择), 否则它将
   保留为磁盘文件中的同一格式, 把
   它在显示之前的转换工作留给你. 缺省模式是
   全部格式转换, 以便于所有的图片将以合适的
   格式被载入来适应当前的显示模式. 有效的位标志有:
      COLORCONV_EXPAND_256          // 扩展 256 色到真彩
      COLORCONV_REDUCE_TO_256       // 将真彩减少到 256 色
      COLORCONV_EXPAND_15_TO_16     // 扩展 15 位高彩到 16 位
      COLORCONV_REDUCE_16_TO_15     // 将 16 位高彩减少到 15 位
      COLORCONV_EXPAND_HI_TO_TRUE   // 扩展 15/16 位到 24/32 位
      COLORCONV_REDUCE_TRUE_TO_HI   // 减少 24/32 位到 15/16 位
      COLORCONV_24_EQUALS_32        // 在 24 和 32 位之间转换
   下面这些宏可以用来选择常用的标志组合:

      COLORCONV_NONE       // 关闭所有的格式转换
      COLORCONV_TOTAL      // 转换所有的格式到当前的格式
      COLORCONV_PARTIAL    // 转换 15 <-> 16 和 24 <-> 32 位
      COLORCONV_MOST       // 打开所有的转换,除了真彩 <-> 256 之间的转换

--
http://www.nease.net/~cloudwu
http://computer.igd.edu.cn/~cloud
E-mail: cloudwu@163.net 
--
人生得意需尽欢,莫使金樽空对月。
天生我才必有用,千金散尽还复来。

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: hitsat.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.558毫秒