

在有文件系統(tǒng)時若想加載非AWTK默認目錄結(jié)構(gòu)的圖片資源,可以使用:file://?+?圖片所在路徑的形式來加載圖片,并且可以使用C代碼或者xml形式來加載。
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>
若是在沒有文件系統(tǒng)的設(shè)備中加載外部圖片,可以先讀取圖片文件數(shù)據(jù),再將數(shù)據(jù)作為參數(shù)傳給 assets_manager_add_data()?函數(shù)。該函數(shù)會將數(shù)據(jù)添加到AWTK資源管理器中,添加后就可以通過文件名的形式來顯示圖片了。
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");}
AWTK在加載一張圖片時,會先將圖片緩存到assets_manager資源管理器當中,接著再解碼放到image_manager圖片管理器,最后顯示的圖片來自圖片管理器解碼好的圖片,因此對于上面的需求就要手動卸載與重新加載圖片緩存。下圖為ZTP800示教器上的示例程序重新加載圖片前后效果圖:

圖2?示例程序的初始圖

圖2?示例程序的初始圖
static?ret_t?on_unload_button_click(void*?ctx,?event_t*?e)?{?//?點擊卸載圖片按鈕卸載圖片緩存??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;}
static?ret_t?on_load_button_click(void*?ctx,?event_t*?e)?{?//?點擊加載圖片按鈕重新加載圖片緩存??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ù)據(jù)是新的圖片數(shù)據(jù)。
后續(xù)在調(diào)用image_set_image以及widget_invalidate刷新圖片控件時會自動將位于資源管理器的緩存解碼并放到圖片管理器當中,最后顯示新的圖片數(shù)據(jù)。

??技術(shù)交流群
更多往期文章,請點擊“?閱讀原文?”。






