emwin从外部flash中读取bmp图片显示
在emwin中有提供了一個從外部讀取圖片數據進行顯示的函數,如下:
而且提供了官方例程,不過官方歷程中從外部讀取是從外部文件系統中進行讀取的bmp圖片進行顯示,官方例程如下
關鍵部分就是從回調函數中讀取bmp圖片的數據。例程中時從外部文件按系統中進行讀取,如果我們想從外部flash中直接讀取的話,只需要在回調函數中對讀取bmp數據部分進行簡單修改就可以了
/* ********************************************************************************************************* * 函 數 名: _GetData * 功能說明: 被函數 GUI_BMP_DrawEx 調用 * 形 參: p 圖片參數 * NumBytesReq 請求讀取的字節數 * ppData 數據指針 * Off 如果 Off = 1,那么將重新從起始位置讀取 * 返 回 值: 返回讀取的字節數 ********************************************************************************************************* */ int _GetData(void * p, const U8 ** ppData, unsigned NumBytesReq, U32 Off) {image_params_t *p_flash_pic= (image_params_t *)p;if ((Off + NumBytesReq) > p_flash_pic->size){NRF_LOG_ERROR("Params error 0");NumBytesReq= p_flash_pic->size - Off;}/** 檢測緩存大小*/if (NumBytesReq > sizeof(p_pic_buf)) {NumBytesReq = sizeof(p_pic_buf);}/** 設置讀取位置*/if(Off == 1) Off = 0;else Off = Off;//result =f_lseek(PicFile, FileAddress);/**** 讀取數據到緩存*///result = f_read(PicFile, acBuffer, NumBytesReq, &NumBytesRead);/**GT24_FREE_FLASH_PIC_START_ADDR是flash中劃分來存儲bmp圖片的起始地址,p_flash_pic->address是要顯示的bmp圖*相對于GT24_FREE_FLASH_PIC_START_ADDR的偏移地址,是從回調函數中第一個參數傳進來的*/uint32_t current_addr = GT24_FREE_FLASH_PIC_START_ADDR + p_flash_pic->address + (offset==1?0:offset);/**讀取函數是自己創建的通過spi從flash讀取指定字節大小的函數,這個可以根據自己的實際情況來定*/ret = gt24_read_nbytes(p_pic_buf, current_addr, NumBytesReq);/** 讓指針 ppData 指向讀取的數據*/*ppData = (const U8 *)p_pic_buf;/** 返回讀取的字節數*/return NumBytesReq; } /* ********************************************************************************************************* * 函 數 名: _ShowBMP1 * 功能說明: 顯示 BMP 圖片 * 形 參: sFilename 要讀取的文件名 * 返 回 值: 無 ********************************************************************************************************* */ void _ShowBMP1(void) {/* 繪制 BMP 圖片 ,file 是傳進去的flash中的圖片相關的參數,可以在Getdata中的第一個形參中得到*/GUI_BMP_DrawEx(_GetData, &file, 0, 0); }到這里,就完成了從外部flash中讀取圖片信息進行顯示的整個過程了,除了從外部flash中讀取bmp圖片,還可以從外部flash中讀取gif圖片,也只需要將emwin提供的官方例程中的回調函數中的數據讀取部分改為flash讀取函數即可,同樣要是想從外部flash中讀取XBF字庫文件,也是一樣。
讀取顯示的流程:
1.制作圖片數據bin文件,我在bin文件前面會保存每張圖片的相關信息,包括圖片大小,圖片數據偏移量(圖片在bin文件中的位置),圖片名字;我用一個結構體來保存一張圖片的上述數據;也就是說假如有5張圖片,在bin的開始部分會保存5個包含圖片信息的結構體,后面跟著的再是5張圖片的完整數據(bmp頭、信息頭、顏色表(有的話)、圖片有效數據)。
2.將bin文件寫入flash中,方式有很多種,可以通過利用串口通過xmodem寫入flash,也可以利用手機app通過藍牙下發bin文件,寫入flash中。
3.根據文件名遍歷bin文件,每次讀取一個結構體大小的數據量,直到找到相對應文件名的結構體,得到對應圖片的相關信息,得到圖片的名字、大小,以及偏移量(圖片在bin文件中的位置),圖片類型,這個結構體就是傳入GUI_BMP_DrawEx函數的第二個形參,也就是getdata函數的第一個形參。
4.根據得到的圖片相關信息,利用上述代碼讀取圖片數據顯示
總結
以上是生活随笔為你收集整理的emwin从外部flash中读取bmp图片显示的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: E112强制认证
- 下一篇: STM32F429入门(二十一):SPI