Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of BSP_DISCO_F746NG by
Revision 10:65aafc10c66e, committed 2017-07-31
- Comitter:
- shoaib_ahmed
- Date:
- Mon Jul 31 09:50:10 2017 +0000
- Parent:
- 2:458ab1edf6b2
- Commit message:
- .
Changed in this revision
stm32746g_discovery_lcd.c | Show annotated file Show diff for this revision Revisions of this file |
diff -r 458ab1edf6b2 -r 65aafc10c66e stm32746g_discovery_lcd.c --- a/stm32746g_discovery_lcd.c Thu Mar 24 20:50:59 2016 +0000 +++ b/stm32746g_discovery_lcd.c Mon Jul 31 09:50:10 2017 +0000 @@ -921,26 +921,52 @@ * @param pbmp: Pointer to Bmp picture address in the internal Flash * @retval None */ -void BSP_LCD_DrawBitmap(uint32_t Xpos, uint32_t Ypos, uint8_t *pbmp) + +void BSP_LCD_DrawBitmap(uint32_t Xpos, uint32_t Ypos, uint8_t *Name_BMP) { + #include <stdlib.h> uint32_t index = 0, width = 0, height = 0, bit_pixel = 0; uint32_t address; uint32_t input_color_mode = 0; + char filename[50]; + int i, fileSize; + char * buffer; + + i=0; + while (*Name_BMP!='\0') { + filename[i++]=*Name_BMP++; + } + + filename[i] = 0; + FILE *Image = fopen((const char *)&filename[0], "rb"); // 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/2); + + // copy the file into the buffer: + fseek (Image, 0 , SEEK_SET ); // set SD file data start position + fread (buffer,1,fileSize,Image); + fclose (Image); /* Get bitmap data address offset */ - index = *(__IO uint16_t *) (pbmp + 10); - index |= (*(__IO uint16_t *) (pbmp + 12)) << 16; + index = *(__IO uint16_t *) (buffer + 10); + index |= (*(__IO uint16_t *) (buffer + 12)) << 16; /* Read bitmap width */ - width = *(uint16_t *) (pbmp + 18); - width |= (*(uint16_t *) (pbmp + 20)) << 16; + width = *(uint16_t *) (buffer + 18); + width |= (*(uint16_t *) (buffer + 20)) << 16; /* Read bitmap height */ - height = *(uint16_t *) (pbmp + 22); - height |= (*(uint16_t *) (pbmp + 24)) << 16; + height = *(uint16_t *) (buffer + 22); + height |= (*(uint16_t *) (buffer + 24)) << 16; /* Read bit/pixel */ - bit_pixel = *(uint16_t *) (pbmp + 28); + bit_pixel = *(uint16_t *) (buffer + 28); /* Set the address */ address = hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress + (((BSP_LCD_GetXSize()*Ypos) + Xpos)*(4)); @@ -960,19 +986,21 @@ } /* Bypass the bitmap header */ - pbmp += (index + (width * (height - 1) * (bit_pixel/8))); + buffer += (index + (width * (height - 1) * (bit_pixel/8))); /* Convert picture to ARGB8888 pixel format */ for(index=0; index < height; index++) { /* Pixel format conversion */ - LL_ConvertLineToARGB8888((uint32_t *)pbmp, (uint32_t *)address, width, input_color_mode); - + LL_ConvertLineToARGB8888((uint32_t *)buffer, (uint32_t *)address, width, input_color_mode); + /* Increment the source and destination buffers */ address+= (BSP_LCD_GetXSize()*4); - pbmp -= width*(bit_pixel/8); - } + buffer -= width*(bit_pixel/8); + } + free (buffer); } + /** * @brief Draws a full rectangle.