Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
6 years, 1 month ago.
Problem to display a bmp image using a STM32F413.
Hello everyone I have a question related to STM32F413. I want to show an image using your LCD but the system shows the image with a distortion and I tried a different method with no results. Can you you help me with this?.
This is my code:
main
#include "mbed.h" #include "stm32f413h_discovery.h" #include "stm32f413h_discovery_ts.h" #include "stm32f413h_discovery_lcd.h" //#include "stm32f413h_discovery_sd.h" #include "tensor.hpp" #include "image.h" #include "models/deep_mlp.hpp" #include "FATFileSystem.h" #include "F413ZH_SD_BlockDevice.h" Serial pc(USBTX, USBRX, 115200); F413ZH_SD_BlockDevice bd; FATFileSystem fs("fs"); void init_lcd(); void show_message(); void list_files(DIR* dir); //-------------------------------------------------------------- // Read BMP File void drawImage(char * name, uint8_t x, uint8_t y){ int fileSize; char * buffer; FILE *Image = fopen(name, "r+"); // open the bmp file //obtain file size: fseek (Image , 0 , SEEK_END); fileSize = ftell (Image); rewind (Image); // allocate memory to contain the whole file: buffer = (char*) malloc (sizeof(char)*fileSize); // copy the file into the buffer: fseek (Image, 0 , SEEK_SET ); // set SD file data start position fread (buffer,1,fileSize,Image); //Draw image //BSP_LCD_DrawBitmap(0, 0, (uint8_t *)buffer); BSP_LCD_DrawBitmap(0, 0, (uint8_t *)buffer); fclose (Image); //Free allocated memory free (buffer); } int main() { printf("--------------------------------------------------------------\n"); char * file_to_open = "/fs/smile.bmp"; //ON_ERR(bd.init(), "SDBlockDevice init "); //ON_ERR(fs.mount(&bd), "Mounting the filesystem on \"/fs\". "); bd.init(); printf("SDBlockDevice init \n"); fs.mount(&bd); printf("Mounting the filesystem on \"/fs\". \n"); init_lcd(); FILE* fd = fopen(file_to_open, "rb"); DIR* dir = opendir("/fs/"); list_files(dir); drawImage("/fs/smile.bmp", 0, 0); } void init_lcd(){ BSP_LCD_Init(); /* Touchscreen initialization */ if (BSP_TS_Init(BSP_LCD_GetXSize(), BSP_LCD_GetYSize()) == TS_ERROR) { printf("BSP_TS_Init error\n"); } BSP_LCD_Clear(LCD_COLOR_WHITE); } void show_message(){ /* Clear the LCD */ BSP_LCD_Clear(LCD_COLOR_WHITE); /* Set Touchscreen Demo1 description */ BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_FillRect(0, 0, BSP_LCD_GetXSize(), 40); BSP_LCD_SetTextColor(LCD_COLOR_BLACK); BSP_LCD_SetBackColor(LCD_COLOR_GREEN); BSP_LCD_SetFont(&Font16); BSP_LCD_DisplayStringAt(0, 0, (uint8_t *)"Emotion Class Demo", CENTER_MODE); }
1 Answer
6 years, 1 month ago.
Have you seen this question? Make sure the bitmap format for the file on the SD card is supported by the library.