資源簡介
實現了bmp格式圖像的顯示。主要包括16bit 565圖像的解碼和顯示。前翻、后翻觸摸屏事件的實現。? 需求設計
(1) 在ARM9平臺上,實現液晶屏顯示16位(R5 G6 B5)BMP彩色圖像;
(2) 實現觸摸屏的功能,利用觸摸屏可以實現BMP圖像“上一張”和“下一張”的輪換顯示;
(3) BMP文件的解碼函數的實現;
(4) 觸摸屏功能的實現;
? 詳細設計:
? BMP文件的構成
(1) BMP文件可以看成4大塊的內容:
(2) 位圖文件頭(bitmap-file header);
(3) 位圖信息頭(bitmapinformation-header);
(4) 色彩表(color table);
(5) 位圖的字節陣列(即位圖數據流);
(6) 如圖1所示。

代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?“msg.h“
#include?“utils.h“
#include?“key.h“
#include?“keyboard.h“
#include?“touch.h“
#include?“seatimer.h“
#include?“utils.h“
#include?“graph.h“
#include?“mainwindow.h“
#include?“button.h“
#include?“editbox.h“
#include?“cvcfg.h“
#ifdef?USING_CAL_DEMO
//以下是關于計算器幾何形狀的宏定義
#define?NBTN 15 //按鈕個數
#define?H_TEXTBOX?40//30 //結果顯示框的高度
#define?W_TEXTBOX?200//148 //結果顯示框的寬度
#define?G_DIGIT_BUTTON 6//按鍵之間的空隙
#define?W_DIGIT_BUTTON?((W_TEXTBOX?-?2*G_DIGIT_BUTTON)/3)//按鍵的寬度
#define?H_DIGIT_BUTTON H_PUSHBUTTON //按鍵的高度
#define?DW_DIGIT_BUTTON?(?W_DIGIT_BUTTON?+?G_DIGIT_BUTTON?) //按鍵加空隙的總長度
#define?DH_DIGIT_BUTTON?(H_DIGIT_BUTTON?+?G_DIGIT_BUTTON) //按鍵加空隙的總高度
//以下是按鍵編號1~9為數字按鍵1~9
#define?ZERO 10 //0
#define?PLUS 11 //加號
#define?MINUS 12 //減號
#define?EQUAL 13 //等于號
#define?BACKSPACE?14 //退格鍵
#define?CLEAR 15 //清除鍵
//以下是兩個加數的區分號
#define?ADDEND1 0
#define?ADDEND2 1
//為了簡化計算器輸入、計算、結果處理等過程,OPSTATE枚舉了計算器當前所處的狀態
typedef?enum?_OPSTATE{
O_ADDEND1_BEGIN?=?0 //開始輸入第一個加數
O_ADDEND1_GETTING?=1 //正在接收第一個加數的其他位
O_ADDEND2_BEGIN?=?2 //開始輸入第二個加數
O_ADDEND2_GETTING?=?3??//正在接收第二個加數的其他位
O_CALCULATE=?4 //計算結果
}OPSTATE;//請大家想想每個狀態是如何轉換的?每個狀態下對輸入按鍵應如何響應?
//為了標記每個狀態下的特征,DATASTATE枚舉了可能的情況
enum?DATASTATE
{
D_DIGIT_ONLY=0 //只能接收數字,在輸入加數時先輸入了符號,則接下來只能接收數字
D_NOMORE_ZERO=1 //輸入的零無效,在開始輸入一個數字時對個0只能當作一個0,例如000就是0
D_NOMORE_BS?=?2 //退格刪除時所有位都被刪除了,則對再次輸入退格鍵就無響應
D_BACKSPACE?=?3 //接收到的是退格鍵
D_ALL //可以接收所有按鍵輸入
};//這些標記對于加數的值和輸入結果在顯示框中更新很有用。
//_CState描述了計算器的狀態數據,每個狀態轉換函數會對其數據進行修改
typedef?struct?_CState{
int?state; //OPSTATE
int?flag; //DATASTATE
int?val[2]; //兩個加數的值
int?res; //結果的數字
char?addend[2][12];//兩個加數的字符數組
int?index[2]; //加數的字符數組的索引
char?result[12];//結果的加數的字符數組
char?op[2]; //運算符
}CState;
//一下是函數原型聲明
HSlot?void?onGetInput(Payload?*pdint?num);//按鈕的槽響應函數,每個按鈕是HButton類型控件,它有clicked信號,在按下后被觸發。也就是說每個按鈕按下后會調用此函數。
HSlot?void?onShowResult(Payload?*pdint?num);//每個按鈕初始化后加入了updateResult(int?key)信號。這個信號會觸發onShowResult函數,執行狀態轉換
HSlot?void?onFile(Payload?*pdint?num); //文件菜單響應槽
//下面的三個函數處理每個狀態下具體的細節,主要是對每個輸入的按鍵后的響應。參數:state,狀態參數;input,輸入按鈕的編號;key,按鍵的字符值;o,加數選擇,指明操作第一個加數還是第二個。返回值:是否需要更新顯示框
bool?stateChangeStepOne(CState*?stateint?inputchar?keyint?o);
bool?stateChangeStepTwo(CState*?stateint?inputchar?keyint?o);
bool?stateChangeStepThree(CState*?sint?inputchar?keyint?o);
void?updateResult(HWidget?*txtbxCState?*s);//更新結果顯示框。
HLocal?void?getResult(CState?*s);? //根據狀態數據計算結果
HLocal?void?cleanState(CState?*s); //清除狀態數據
//下面是初始化計算器,在窗口mwnd的xy位置,結果顯示框為txtbx,按鍵為btns
bool?initCalculator(HMainWindow?*mwndHWidget*txtbxint?nHButton?btns[]int?xint?y);
HSlot?void?onGetInput(Payload?*pdint?num)
{
int?kval;
object?*key;
key?=?getObj(pd); //得到接收者對象指針,即connect函數中指定的接收者。例如,本程序中是連接到按鈕本身,即指向按鈕的指針
if(strcmp(key->name“+“)?==?0) //每個按鍵的名字作為區分按鍵的標志。得到按鈕編號。
kval?=?PLUS;
else?if(strc
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????2513012??2010-04-14?21:14??rtware_arm9\lib\sealib_arm9.a
?????文件??????14408??2009-04-24?20:49??rtware_arm9\lib\2410init.o
?????文件?????????64??2009-08-30?22:14??rtware_arm9\lib\vssver.scc
?????文件????????129??2009-04-02?16:43??rtware_arm9\docs\說明.txt
?????文件?????????48??2009-08-30?22:14??rtware_arm9\docs\vssver.scc
?????文件?????165888??2010-03-30?08:54??rtware_arm9\docs\JPEG解碼算法的詳細分析.doc
?????文件?????846848??2010-03-30?08:58??rtware_arm9\docs\HGUI的文本框設計.doc
?????文件?????419328??2010-03-30?08:51??rtware_arm9\docs\HGUI的對話框設計.doc
?????文件????????274??2009-04-02?14:50??rtware_arm9\build\scat.scf
?????文件????????931??2000-11-05?02:28??rtware_arm9\build\reset.ini
?????文件?????221993??2010-04-15?08:03??rtware_arm9\build\rtware_arm9.mcp
?????文件?????????96??2009-08-30?22:14??rtware_arm9\build\vssver.scc
?????文件???????3450??2010-04-15?08:03??rtware_arm9\build\rtware_arm9_Data\CWSettingsWindows.stg
?????文件?????????48??2009-08-30?22:14??rtware_arm9\build\rtware_arm9_Data\vssver.scc
?????文件??????69613??2010-04-15?08:03??rtware_arm9\build\rtware_arm9_Data\Debug\TargetDataWindows.tdt
?????文件?????????48??2009-08-30?22:14??rtware_arm9\build\rtware_arm9_Data\Debug\vssver.scc
?????文件??????68239??2010-04-15?08:03??rtware_arm9\build\rtware_arm9_Data\Release\TargetDataWindows.tdt
?????文件?????????48??2009-08-30?22:14??rtware_arm9\build\rtware_arm9_Data\Release\vssver.scc
?????文件?????139512??2010-04-15?08:03??rtware_arm9\build\rtware_arm9_Data\DebugRel\TargetDataWindows.tdt
?????文件?????785832??2010-04-15?08:03??rtware_arm9\build\rtware_arm9_Data\DebugRel\rtware_arm9.axf
?????文件?????????64??2009-08-30?22:14??rtware_arm9\build\rtware_arm9_Data\DebugRel\vssver.scc
?????文件?????????64??2009-08-30?22:14??rtware_arm9\build\rtware_arm9_Data\DebugRel\rtware_arm9.bin\vssver.scc
?????文件????????928??2010-04-15?08:03??rtware_arm9\build\rtware_arm9_Data\DebugRel\rtware_arm9.bin\ROM1
?????文件?????366356??2010-04-15?08:03??rtware_arm9\build\rtware_arm9_Data\DebugRel\rtware_arm9.bin\ER_RO
?????文件????????160??2009-08-30?22:14??rtware_arm9\build\rtware_arm9_Data\DebugRel\ob
?????文件??????35732??2010-04-15?08:03??rtware_arm9\build\rtware_arm9_Data\DebugRel\ob
?????文件??????91552??2010-04-15?08:03??rtware_arm9\build\rtware_arm9_Data\DebugRel\ob
?????文件?????114460??2010-04-15?08:03??rtware_arm9\build\rtware_arm9_Data\DebugRel\ob
?????文件??????30552??2010-04-15?08:03??rtware_arm9\build\rtware_arm9_Data\DebugRel\ob
?????文件??????35736??2010-04-15?08:03??rtware_arm9\build\rtware_arm9_Data\DebugRel\ob
............此處省略108個文件信息
評論
共有 條評論