• 正文
    • 加載指定路徑的圖片資源
    • 釋放圖片資源并重新加載
  • 推薦器件
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

【AWTK使用經(jīng)驗(yàn)】加載和釋放外部圖片

2024/04/24
2332
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

AWTK是基于C語(yǔ)言開(kāi)發(fā)的跨平臺(tái)GUI框架?!禔WTK使用經(jīng)驗(yàn)》系列文章將介紹開(kāi)發(fā)AWTK過(guò)程中一些常見(jiàn)問(wèn)題與解決方案,例如:如何加載外部資源?如何設(shè)計(jì)自定義進(jìn)度條?這些都會(huì)在系列文章進(jìn)行解答。

加載指定路徑的圖片資源

AWTK默認(rèn)加載資源方式有兩種,一種是將資源打包到程序中放入Flash,另一種是放在res資源目錄中。假設(shè)現(xiàn)在需要實(shí)現(xiàn)一個(gè)圖片瀏覽器并移植到 ZTP800示教器 設(shè)備上,該圖片瀏覽器需要加載U盤(pán)圖片,此時(shí)就要用到AWTK加載外部資源的功能來(lái)實(shí)現(xiàn)該需求。下面將分為有文件系統(tǒng)和無(wú)文件系統(tǒng)兩種情況來(lái)介紹此功能。圖1?ZTP800示教器加載U盤(pán)圖片效果

1. 有文件系統(tǒng)

在有文件系統(tǒng)時(shí)若想加載非AWTK默認(rèn)目錄結(jié)構(gòu)的圖片資源,可以使用:file://?+?圖片所在路徑的形式來(lái)加載圖片,并且可以使用C代碼或者xml形式來(lái)加載。

1.1 C代碼方式:

widget_t*?image?=?widget_lookup(win,?"image",?TRUE);image_set_image(image, "file:///media/sda1/AWTK.png");

1.2 XML方式:

<window?name="home_page?">??<image?name="image"?x="0"?y="0"?w="50"?h="50"?draw_type="default"?image="file:///media/sda1/AWTK.png"/></window>

2. 無(wú)文件系統(tǒng)

若是在沒(méi)有文件系統(tǒng)的設(shè)備中加載外部圖片,可以先讀取圖片文件數(shù)據(jù),再將數(shù)據(jù)作為參數(shù)傳給 assets_manager_add_data()?函數(shù)。該函數(shù)會(huì)將數(shù)據(jù)添加到AWTK資源管理器中,添加后就可以通過(guò)文件名的形式來(lái)顯示圖片了。

下面是一段STM32平臺(tái)加載SD卡圖片的示例代碼:

uint8_t?read_buffer[512];int?sdcard_status?=?HAL_SD_ReadBlocks(&sd_handle,?(uint8_t*)?read_buffer,?0,?1,?0xffff);if?(sdcard_status?==?HAL_OK)?{  assets_manager_add_data(assets_manager(),"AWTK",ASSET_TYPE_IMAGE,ASSET_TYPE_IMAGE_PNG,?read_buffer,?size);  image_set_image(image,?"AWTK");}

釋放圖片資源并重新加載

假設(shè)目前實(shí)現(xiàn)了圖片瀏覽器并移植到了ZTP800示教器上,但是需要圖片瀏覽器加載的圖片名稱(chēng)固定不變,而本地圖片數(shù)據(jù)會(huì)經(jīng)常發(fā)生改變,這時(shí)候就需要在AWTK重新加載并更新圖片到畫(huà)面中。

AWTK在加載一張圖片時(shí),會(huì)先將圖片緩存到assets_manager資源管理器當(dāng)中,接著再解碼放到image_manager圖片管理器,最后顯示的圖片來(lái)自圖片管理器解碼好的圖片,因此對(duì)于上面的需求就要手動(dòng)卸載與重新加載圖片緩存。下圖為ZTP800示教器上的示例程序重新加載圖片前后效果圖:

圖2?示例程序的初始圖

圖2?示例程序的初始圖

1. 卸載圖片緩存

假設(shè)在示例程序中已經(jīng)加載并顯示了一張圖片,并且此時(shí)本地圖片文件數(shù)據(jù)發(fā)生了改變,可以按照以下步驟卸載圖片管理器和資源管理器上的圖片緩存。

#define?IMAGE_NAME?"/media/sda1/AWTK.png"?//?圖片名默認(rèn)為assets_manager_load_file加載的路徑
static?ret_t?on_unload_button_click(void*?ctx,?event_t*?e)?{?//?點(diǎn)擊卸載圖片按鈕卸載圖片緩存??bitmap_t?bitmap?=?{0};??widget_t*?win?=?WIDGET(ctx);??widget_t*?image?=?widget_lookup(win,?"image",?TRUE);??
??//?卸載圖片管理器緩存??image_manager_get_bitmap(image_manager(),?IMAGE_NAME,?&bitmap);??image_manager_unload_bitmap(image_manager(),?&bitmap);
??//?卸載資源管理器緩存??assets_manager_clear_cache_ex(assets_manager(),?ASSET_TYPE_IMAGE,?IMAGE_NAME);??widget_invalidate(image,?NULL);?
??return?RET_OK;}

上面代碼中image_manager_unload_bitmap是用于卸載圖片在圖片管理器的緩存卸載緩存成功后會(huì)輸出“unload image xxx”的debug信息;assets_manager_clear_cache_ex是用于卸載資源管理器的該圖片緩存。

2. 重新加載圖片緩存

卸載圖片緩存后,可以通過(guò)以下步驟再次加載圖片到資源管理器中:

static?ret_t?on_load_button_click(void*?ctx,?event_t*?e)?{?//?點(diǎn)擊加載圖片按鈕重新加載圖片緩存??widget_t*?win?=?WIDGET(ctx);??widget_t*?image?=?widget_lookup(win,?"image",?TRUE);
??//?將新的圖片數(shù)據(jù)添加到資源管理器緩存中??asset_info_t*?img?=?assets_manager_load_file(assets_manager(),?ASSET_TYPE_IMAGE,?IMAGE_NAME);  assets_manager_add(assets_manager(), img);
  image_set_image(image, IMAGE_NAME);
??widget_invalidate(image,?NULL);??
??return?RET_OK;}

上面代碼調(diào)用assets_manager_load_file與assets_manager_add重新加載了一次圖片數(shù)據(jù)到AWTK資源管理器的緩存,此時(shí)加載的數(shù)據(jù)是新的圖片數(shù)據(jù)。

后續(xù)在調(diào)用image_set_image以及widget_invalidate刷新圖片控件時(shí)會(huì)自動(dòng)將位于資源管理器的緩存解碼并放到圖片管理器當(dāng)中,最后顯示新的圖片數(shù)據(jù)。

推薦器件

更多器件
器件型號(hào) 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊(cè) ECAD模型 風(fēng)險(xiǎn)等級(jí) 參考價(jià)格 更多信息
TJA1051T/E/1J 1 NXP Semiconductors TJA1051 - High-speed CAN transceiver SOIC 8-Pin

ECAD模型

下載ECAD模型
$0.39 查看
DP83848IVV/NOPB 1 National Semiconductor Corporation IC DATACOM, ETHERNET TRANSCEIVER, PQFP48, 7 X 7 MM, GREEN, LQFP-48, Network Interface
$4.95 查看
VSC8504XKS-05 1 Microchip Technology Inc Ethernet Transceiver
暫無(wú)數(shù)據(jù) 查看
致遠(yuǎn)電子

致遠(yuǎn)電子

廣州致遠(yuǎn)電子股份有限公司成立于2001年,注冊(cè)資金5000萬(wàn)元,國(guó)家級(jí)高新技術(shù)認(rèn)證企業(yè),廣州市高端工控測(cè)量?jī)x器工程技術(shù)研究開(kāi)發(fā)中心,Intel ECA全球合作伙伴和微軟嵌入式系統(tǒng)金牌合作伙伴。

廣州致遠(yuǎn)電子股份有限公司成立于2001年,注冊(cè)資金5000萬(wàn)元,國(guó)家級(jí)高新技術(shù)認(rèn)證企業(yè),廣州市高端工控測(cè)量?jī)x器工程技術(shù)研究開(kāi)發(fā)中心,Intel ECA全球合作伙伴和微軟嵌入式系統(tǒng)金牌合作伙伴。收起

查看更多

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計(jì)資源下載
  • 產(chǎn)業(yè)鏈客戶(hù)資源
  • 寫(xiě)文章/發(fā)需求
立即登錄