SVG是二維的向量圖像格式,是由W3C和3GPP的提出的標準,實現(xiàn)了內(nèi)置的交互性,支持跨越顯示環(huán)境的縮放,文件尺寸比BMP, JPEG,GIF等格式還要小。SVG的編輯工具非常簡單易用,基于XML的格式從而容易創(chuàng)建和修改,支持富文本選項。

在BREW 3.1.4開始,IMediaSVG 接口開始支持SVG的播放,暫停,終止,快進和快退等,同時支持按鍵,筆操作,旋轉(zhuǎn)和縮放等操作。

?????? 希望使用SVG的時候,首先需要使用一些商用的圖像編輯工具來創(chuàng)建SVG文件,例如 Beatware Mobile Designer 2.0?, Beatware e-PicturePro 5.0?,Ikivo Animator 2.0 ?,Adobe? Illustrator CS2?,Adobe? GoLive CS2?和Open source Inkscape 0.44.1等等。

?????? 然后,生成BREW中需要的相關(guān)內(nèi)容,例如:

其中定義了 ‘nav-prev’和 ‘nav-next’兩個元素等等,來保證導(dǎo)航功能。一般的情況下,需要禁止聚焦功能,例如,并且需要使用gzip壓縮目標文件。

在SVG的內(nèi)容生成之后,一般使用web瀏覽就可以了解SVG的基本顯示,并進行一下交互性測試。但需要注意的是,不同瀏覽器對SVG的支持程度也不相同。SVG中的XML 文檔結(jié)構(gòu)可以通過Opera 瀏覽器來驗證,而且該瀏覽器還能夠報告出錯誤的行號。在安裝了SVG的擴展類之后,BREW模擬器就能夠播放SVG了。

在BREW應(yīng)用中,首先要獲得IMediaSVG接口:

ISHELL_CreateInstance(pme->m_pIShell,AEECLSID_MEDIASVG,(void**)pme->m_pIMediaSVG);

其次,確定需要播放的文件內(nèi)容:

AEEMediaData mData;

mData.clsData = MMD_FILE_NAME;

mData.pData = svg_filename;

mData.dwSize = 0;

IMEDIA_SetMediaData(pMe->pIMediaSVG, &mData);

然后,注冊回調(diào)函數(shù):

IMEDIA_RegisterNotify(pMe->pIMediaSVG, MediaNotifyCB, pMe);

最后,就可以使用IMEDIA_Play(pMe->pIMediaSVG)來播放文件了。其中回調(diào)函數(shù)MediaNotifyCB負責(zé)獲取SVG文件中的一個幀,并顯示在屏幕上。

void MediaNotifyCB(void * pUser, AEEMediaCmdNotify * pCmdNotify){

APP_CLASS * pMe = (APP_CLASS*) pUser;

switch(pCmdNotify->nStatus)

{

case MM_STATUS_FRAME:

{

AEEDeviceInfo di;

IBitmap* frameBuf;

IMEDIA_GetFrame(pMe->pIMediaSVG, &frameBuf);

ISHELL_GetDeviceInfo(pMe->a.m_pIShell, &di);

IDISPLAY_BitBlt(pme->m_pIDisplay,0,0,di.cxScreen,di.cyScreen, frameBuf,0,O,AEE_RO_C0PY );

IDISPLAY_UpdateEx(pMe->a.m_pIDisplay, FALSE);

break;

}

}

return;

}

對于SVG中的交互事件,在應(yīng)用中要做相應(yīng)的消息處理:

case EVT_KEY:

switch(wParam)

{

case AVK_DOWN:

nErr=IMEDIASVG_Focus(pme->pIMediaSVG,MM_SVG_FOCUS_EVENT_NEXT);

break;

case AVK_UP:

nErr=IMEDIASVG_Focus(pme->pIMediaSVG,MM_SVG_FOCUS_EVENT_PREVIOUS);

break;

case AVK_SELECT:

nErr=IMEDIASVG_Focus(pme->pIMediaSVG,MM_SVG_FOCUS_EVENT_ACTIVATE);

break;

case AVK_END:

nErr = IMEDIA_Stop(pMe->pIMediaSVG);

break;

}

在手機上測試支持SVG應(yīng)用的時候,要注意手機可能不支持SVG的壓縮狀態(tài)。

?