Chinaunix首页 | 论坛 | 博客
  • 博客访问: 387726
  • 博文数量: 107
  • 博客积分: 2536
  • 博客等级: 少校
  • 技术积分: 781
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-14 15:19
文章分类

全部博文(107)

文章存档

2017年(11)

2016年(8)

2015年(14)

2014年(32)

2012年(1)

2011年(1)

2010年(7)

2009年(33)

我的朋友

分类: LINUX

2009-09-22 14:02:09

程式範例 image.c 是以 hello.c 為基礎,加上顯示圖片的功能。透過 image.c 我們可以學到以下的 Nano-X 程式設計方法:
˙ 如何使用嵌入式圖片
˙ 如何將圖片顯示於視窗上
由檔案讀取圖片檔並顯示顯示圖片是一般常見的做法,這裡我們所要實作的範例是希望可以將圖片直接嵌入程式裡,而不是由外部檔案讀取。
如何使用嵌入式圖片
要將圖片嵌入於程式裡,首先必須將圖片轉換成數值資料形式的 C 程式。Nano-X 提供一個檔名為 convbmp 的工具來將 BMP 格式的圖片轉換成 C 程式。
convbmp工具的原始程式位於 src/mwin/bmp/convbmp.c,這是提供給 Microwindows API 使用者的工具,因此我們在設定 Nano-X 編譯選項時,除了勾選 Nano-X API 外,還要勾選 Microwindows API 選項才能產生 convbmp 執行檔。編譯後可以在 src/bin/ 目錄下找到 convbmp,我們手動將此工具安裝到 /usr/bin/目錄下,以方便我們使用:
# cd microwin-0.89/
# cp src/bin/convbmp /usr/bin
先將取得的圖檔轉換成 BMP 的格式,再利用 convbmp 轉換成 C 程式。例如,我想轉換圖檔 jollen.bmp,那麼將圖檔轉換成 C 程式的指令就是:
$ convbmp jollen.bmp


圖(jollen.bmp)
轉換後便會得到 jollen.c。接著我們再修改 hello.c 將圖片顯示於視窗上。
如何將圖片顯示於視窗上
因為圖片資料屬於外部變數,因此先在程式裡宣告外部圖片變數:
extern GR_IMAGE_HDR image_jollen;
image_jollen 是一個陣列,存放圖檔的 pixel 資料,此陣列由 convbmp 轉換後產生,詳見 jollen.c 程式。接著,在處理 GR_EVENT_TYPE_EXPOSURE 事件的地方呼叫 GrDrawImageBits() 函數畫出圖片即可:
GrDrawImageBits(wid, gc, 0, 0, &image_jollen);
編譯時別忘了與 jollen.c 程式做連結,這個部份可以寫一個簡單的 Makefile rule來完成:
mage: image.o jollen.o
        $(CC) $(CFLAGS) $(LDFLAGS) $^ -o $@
以下是 image.c 的完整程式,粗體字是新加入的程式碼。
/*
* Copyright(c) 2003,2004
*
* - Nano-X API example.
* - image.c
*/
#include
#define MWINCLUDECOLORS
#include
GR_WINDOW_ID wid;
GR_GC_ID gc;
/* 外部圖片 */
extern GR_IMAGE_HDR image_jollen;
void event_handler (GR_EVENT *event);
int main (void)
{
   if (GrOpen() type)
   {
      case GR_EVENT_TYPE_EXPOSURE:
           GrDrawImageBits(wid, gc, 0, 0, &image_jollen);
           break;
      case GR_EVENT_TYPE_CLOSE_REQ:
           GrClose();
      default: break;
   }
}
注釋
阅读(1784) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~