免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1246 | 回复: 0
打印 上一主题 下一主题

Nano-X 程式設計, #3:顯示圖片(image.c) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-22 14:02 |只看该作者 |倒序浏览
程式範例 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 www.jollen.org
*
* - 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;
   }
}
注釋


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/98913/showart_2057574.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP