MiniGUI - 位图

(1)位图文件的装载

int GUIAPI LoadBitmapFromFile (HDC hdc, PBITMAP pBitmap, const char* spFileName);
#define LoadBitmap LoadBitmapFromFile
void GUIAPI UnloadBitmap (PBITMAP pBitmap);
 
在从文件中装载位图时,MiniGUI 通过文件的后缀名判断位图文件的类型。MiniGUI 库中内建有对 Windows BMP 和 GIF 格式的支持,而对 JPEG 以及 PNG 等位图格式的支持,是通过 libjpeg 和 libpng 库实现的。
MiniGUI的图片格式包括:bmp/lbm/pcx/tga/gif/jpg/jpeg/png 
 
libminigui-gpl-3.0.12/src/include/readbmp.h
 1 typedef struct _BITMAP_TYPE_INFO BITMAP_TYPE_INFO;
 2 
 3 /*
 4  * structure for Image operations
 5  * The idea comes from readbmp.c in Allegro by Shawn Hargreaves.
 6  */
 7 struct _BITMAP_TYPE_INFO
 8 {  
 9     char ext[8];
10     void* (*init)       (MG_RWops* fp, MYBITMAP *my_bmp, RGB *pal);
11     int (*load)         (MG_RWops* fp, void* init_info, MYBITMAP *my_bmp,
12                          CB_ONE_SCANLINE cb, void* context);
13     void (*cleanup)     (void* init_info);
14     int (*save)         (MG_RWops* fp, MYBITMAP *my_bmp, RGB *pal);
15     BOOL (*check)       (MG_RWops* fp);
16 };

 

libminigui-gpl-3.0.12/src/mybmp.c
 1 #define MAX_BITMAP_TYPES   9
 2 
 3 static BITMAP_TYPE_INFO bitmap_types[MAX_BITMAP_TYPES] =
 4 {
 5    { "bmp", __mg_init_bmp, __mg_load_bmp, __mg_cleanup_bmp,
 6 #ifdef _MGMISC_SAVEBITMAP
 7     __mg_save_bmp, __mg_check_bmp },
 8 #else
 9     NULL, __mg_check_bmp },
10 #endif
11 
12 #ifdef _MGIMAGE_LBM
13    { "lbm", __mg_init_lbm, __mg_load_lbm, __mg_cleanup_lbm, NULL, __mg_check_lbm },
14 #endif
15 #ifdef _MGIMAGE_PCX
16    { "pcx", __mg_init_pcx, __mg_load_pcx, __mg_cleanup_pcx, NULL, NULL },
17 #endif
18 #ifdef _MGIMAGE_TGA
19    { "tga", __mg_init_tga, __mg_load_tga, __mg_cleanup_tga, NULL, NULL },
20 #endif
21 #ifdef _MGIMAGE_GIF
22    { "gif", __mg_init_gif, __mg_load_gif, __mg_cleanup_gif, NULL, __mg_check_gif },
23 #endif
24 #ifdef _MGIMAGE_JPG
25    { "jpg", __mg_init_jpg, __mg_load_jpg, __mg_cleanup_jpg, NULL, __mg_check_jpg },
26    { "jpeg", __mg_init_jpg, __mg_load_jpg, __mg_cleanup_jpg, NULL, __mg_check_jpg },
27 #endif
28 #ifdef _MGIMAGE_PNG
29    { "png", __mg_init_png, __mg_load_png, __mg_cleanup_png, NULL, __mg_check_png },
30 #endif
31 };

 

(2)位图填充
FillBoxWithBitmap 用设备相关位图对象填充矩形 框,可以用来扩大或者缩小位图;FillBoxWithBitmapPart 用设备相关位图对象的部分填充矩形框,也可以扩大或缩小位图。 
void GUIAPI FillBoxWithBitmap (HDC hdc, int x, int y, int w, int h, PBITMAP pBitmap);
void GUIAPI FillBoxWithBitmapPart (HDC hdc, int x, int y, int w, int h, int bw, int bh, PBITMAP pBitmap, int xo, int yo);
 
(3)位块传送
“位块传送(bit block transfer)”操作指的是把内存或显示RAM中的某块矩形区域的颜色数据复制到另一个内存或显示区域。 位块传送通常是一个高速的图像传送操作。
BitBlt 函数用来实现两个相同或不同的设备上下文之间的显示内存复 制,StretchBlt 则在 BitBlt的基础上进行缩放操作。
void GUIAPI BitBlt (HDC hsdc, int sx, int sy, int sw, int sh,  HDC hddc, int dx, int dy, DWORD dwRop);
void GUIAPI StretchBlt (HDC hsdc, int sx, int sy, int sw, int sh, HDC hddc, int dx, int dy, int dw, int dh, DWORD dwRop);
 
 
posted @ 2014-05-29 17:41  paullam  阅读(2212)  评论(0编辑  收藏  举报