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.
Dependencies: BD_SD_DISCO_F769NI BSP_DISCO_F769NI LCD_DISCO_F769NI TS_DISCO_F769NI USBHost_F769NI
zz_common/drawImage_copy1.cpp@3:35ac9ee7d2d6, 2019-08-07 (annotated)
- Committer:
- kenjiArai
- Date:
- Wed Aug 07 05:39:01 2019 +0000
- Revision:
- 3:35ac9ee7d2d6
1st trial revision (Not finalized yet)
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| kenjiArai | 3:35ac9ee7d2d6 | 1 | /* |
| kenjiArai | 3:35ac9ee7d2d6 | 2 | * Mbed function |
| kenjiArai | 3:35ac9ee7d2d6 | 3 | * |
| kenjiArai | 3:35ac9ee7d2d6 | 4 | * Created: July 30th, 2019 |
| kenjiArai | 3:35ac9ee7d2d6 | 5 | * Revised: July 30th, 2019 |
| kenjiArai | 3:35ac9ee7d2d6 | 6 | */ |
| kenjiArai | 3:35ac9ee7d2d6 | 7 | |
| kenjiArai | 3:35ac9ee7d2d6 | 8 | /* |
| kenjiArai | 3:35ac9ee7d2d6 | 9 | https://os.mbed.com/users/Lightsource/code/DISCO-F746NG_BMP_FROM_SDCARD/ |
| kenjiArai | 3:35ac9ee7d2d6 | 10 | https://www.gimp.org/downloads/ |
| kenjiArai | 3:35ac9ee7d2d6 | 11 | https://os.mbed.com/questions/69098/how-can-I-load-an-image-to-screen/#answer14107 |
| kenjiArai | 3:35ac9ee7d2d6 | 12 | */ |
| kenjiArai | 3:35ac9ee7d2d6 | 13 | |
| kenjiArai | 3:35ac9ee7d2d6 | 14 | //#include "select_program.h" |
| kenjiArai | 3:35ac9ee7d2d6 | 15 | #if defined(NIOI_SENSOR) || defined(EXAMPLE_10_BITMAP) |
| kenjiArai | 3:35ac9ee7d2d6 | 16 | |
| kenjiArai | 3:35ac9ee7d2d6 | 17 | // Include -------------------------------------------------------------------- |
| kenjiArai | 3:35ac9ee7d2d6 | 18 | #include "mbed.h" |
| kenjiArai | 3:35ac9ee7d2d6 | 19 | #include "FATFileSystem.h" |
| kenjiArai | 3:35ac9ee7d2d6 | 20 | #include "LCD_DISCO_F769NI.h" |
| kenjiArai | 3:35ac9ee7d2d6 | 21 | #include "stm32f769i_discovery_lcd.h" |
| kenjiArai | 3:35ac9ee7d2d6 | 22 | |
| kenjiArai | 3:35ac9ee7d2d6 | 23 | // Definition ----------------------------------------------------------------- |
| kenjiArai | 3:35ac9ee7d2d6 | 24 | |
| kenjiArai | 3:35ac9ee7d2d6 | 25 | // Constructor ---------------------------------------------------------------- |
| kenjiArai | 3:35ac9ee7d2d6 | 26 | extern Serial pc; |
| kenjiArai | 3:35ac9ee7d2d6 | 27 | extern FATFileSystem fs; |
| kenjiArai | 3:35ac9ee7d2d6 | 28 | extern LCD_DISCO_F769NI lcd; |
| kenjiArai | 3:35ac9ee7d2d6 | 29 | |
| kenjiArai | 3:35ac9ee7d2d6 | 30 | // RAM ------------------------------------------------------------------------ |
| kenjiArai | 3:35ac9ee7d2d6 | 31 | |
| kenjiArai | 3:35ac9ee7d2d6 | 32 | // ROM / Constant data -------------------------------------------------------- |
| kenjiArai | 3:35ac9ee7d2d6 | 33 | |
| kenjiArai | 3:35ac9ee7d2d6 | 34 | // Function prototypes -------------------------------------------------------- |
| kenjiArai | 3:35ac9ee7d2d6 | 35 | //extern void drawImage(const char * name, uint16_t x, uint16_t y); |
| kenjiArai | 3:35ac9ee7d2d6 | 36 | //extern void draw_bitmap(uint8_t *Name_BMP, uint32_t Xpos, uint32_t Ypos); |
| kenjiArai | 3:35ac9ee7d2d6 | 37 | |
| kenjiArai | 3:35ac9ee7d2d6 | 38 | |
| kenjiArai | 3:35ac9ee7d2d6 | 39 | //------------------------------------------------------------------------------ |
| kenjiArai | 3:35ac9ee7d2d6 | 40 | // Control Program |
| kenjiArai | 3:35ac9ee7d2d6 | 41 | //------------------------------------------------------------------------------ |
| kenjiArai | 3:35ac9ee7d2d6 | 42 | #if 0 |
| kenjiArai | 3:35ac9ee7d2d6 | 43 | void draw_bitmap(uint8_t *Name_BMP, uint32_t Xpos, uint32_t Ypos) |
| kenjiArai | 3:35ac9ee7d2d6 | 44 | { |
| kenjiArai | 3:35ac9ee7d2d6 | 45 | uint32_t index = 0, width = 0, height = 0, bit_pixel = 0; |
| kenjiArai | 3:35ac9ee7d2d6 | 46 | uint32_t address; |
| kenjiArai | 3:35ac9ee7d2d6 | 47 | uint32_t input_color_mode = 0; |
| kenjiArai | 3:35ac9ee7d2d6 | 48 | char filename[50]; |
| kenjiArai | 3:35ac9ee7d2d6 | 49 | int i, fileSize; |
| kenjiArai | 3:35ac9ee7d2d6 | 50 | char * buffer; |
| kenjiArai | 3:35ac9ee7d2d6 | 51 | |
| kenjiArai | 3:35ac9ee7d2d6 | 52 | i=0; |
| kenjiArai | 3:35ac9ee7d2d6 | 53 | while (*Name_BMP!='\0') { |
| kenjiArai | 3:35ac9ee7d2d6 | 54 | filename[i++]=*Name_BMP++; |
| kenjiArai | 3:35ac9ee7d2d6 | 55 | } |
| kenjiArai | 3:35ac9ee7d2d6 | 56 | |
| kenjiArai | 3:35ac9ee7d2d6 | 57 | filename[i] = 0; |
| kenjiArai | 3:35ac9ee7d2d6 | 58 | FILE *Image = fopen((const char *)&filename[0], "rb"); // open the bmp file |
| kenjiArai | 3:35ac9ee7d2d6 | 59 | |
| kenjiArai | 3:35ac9ee7d2d6 | 60 | // obtain file size: |
| kenjiArai | 3:35ac9ee7d2d6 | 61 | fseek (Image, 0, SEEK_END); |
| kenjiArai | 3:35ac9ee7d2d6 | 62 | fileSize = ftell (Image); |
| kenjiArai | 3:35ac9ee7d2d6 | 63 | rewind (Image); |
| kenjiArai | 3:35ac9ee7d2d6 | 64 | |
| kenjiArai | 3:35ac9ee7d2d6 | 65 | // allocate memory to contain the whole file: |
| kenjiArai | 3:35ac9ee7d2d6 | 66 | buffer = (char*) malloc (sizeof(char)*fileSize/2); |
| kenjiArai | 3:35ac9ee7d2d6 | 67 | |
| kenjiArai | 3:35ac9ee7d2d6 | 68 | // copy the file into the buffer: |
| kenjiArai | 3:35ac9ee7d2d6 | 69 | fseek (Image, 0, SEEK_SET ); // set SD file data start position |
| kenjiArai | 3:35ac9ee7d2d6 | 70 | fread (buffer,1,fileSize,Image); |
| kenjiArai | 3:35ac9ee7d2d6 | 71 | fclose (Image); |
| kenjiArai | 3:35ac9ee7d2d6 | 72 | |
| kenjiArai | 3:35ac9ee7d2d6 | 73 | /* Get bitmap data address offset */ |
| kenjiArai | 3:35ac9ee7d2d6 | 74 | index = *(__IO uint16_t *) (buffer + 10); |
| kenjiArai | 3:35ac9ee7d2d6 | 75 | index |= (*(__IO uint16_t *) (buffer + 12)) << 16; |
| kenjiArai | 3:35ac9ee7d2d6 | 76 | |
| kenjiArai | 3:35ac9ee7d2d6 | 77 | /* Read bitmap width */ |
| kenjiArai | 3:35ac9ee7d2d6 | 78 | width = *(uint16_t *) (buffer + 18); |
| kenjiArai | 3:35ac9ee7d2d6 | 79 | width |= (*(uint16_t *) (buffer + 20)) << 16; |
| kenjiArai | 3:35ac9ee7d2d6 | 80 | |
| kenjiArai | 3:35ac9ee7d2d6 | 81 | /* Read bitmap height */ |
| kenjiArai | 3:35ac9ee7d2d6 | 82 | height = *(uint16_t *) (buffer + 22); |
| kenjiArai | 3:35ac9ee7d2d6 | 83 | height |= (*(uint16_t *) (buffer + 24)) << 16; |
| kenjiArai | 3:35ac9ee7d2d6 | 84 | |
| kenjiArai | 3:35ac9ee7d2d6 | 85 | /* Read bit/pixel */ |
| kenjiArai | 3:35ac9ee7d2d6 | 86 | bit_pixel = *(uint16_t *) (buffer + 28); |
| kenjiArai | 3:35ac9ee7d2d6 | 87 | |
| kenjiArai | 3:35ac9ee7d2d6 | 88 | /* Set the address */ |
| kenjiArai | 3:35ac9ee7d2d6 | 89 | //address = hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress + (((BSP_LCD_GetXSize()*Ypos) + Xpos)*(4)); |
| kenjiArai | 3:35ac9ee7d2d6 | 90 | address = hltdc_discovery.LayerCfg[ActiveLayer].FBStartAdress + (((BSP_LCD_GetXSize()*Ypos) + Xpos)*(4)); |
| kenjiArai | 3:35ac9ee7d2d6 | 91 | |
| kenjiArai | 3:35ac9ee7d2d6 | 92 | /* Get the layer pixel format */ |
| kenjiArai | 3:35ac9ee7d2d6 | 93 | if ((bit_pixel/8) == 4) { |
| kenjiArai | 3:35ac9ee7d2d6 | 94 | input_color_mode = CM_ARGB8888; |
| kenjiArai | 3:35ac9ee7d2d6 | 95 | } else if ((bit_pixel/8) == 2) { |
| kenjiArai | 3:35ac9ee7d2d6 | 96 | input_color_mode = CM_RGB565; |
| kenjiArai | 3:35ac9ee7d2d6 | 97 | } else { |
| kenjiArai | 3:35ac9ee7d2d6 | 98 | input_color_mode = CM_RGB888; |
| kenjiArai | 3:35ac9ee7d2d6 | 99 | } |
| kenjiArai | 3:35ac9ee7d2d6 | 100 | |
| kenjiArai | 3:35ac9ee7d2d6 | 101 | /* Bypass the bitmap header */ |
| kenjiArai | 3:35ac9ee7d2d6 | 102 | buffer += (index + (width * (height - 1) * (bit_pixel/8))); |
| kenjiArai | 3:35ac9ee7d2d6 | 103 | |
| kenjiArai | 3:35ac9ee7d2d6 | 104 | /* Convert picture to ARGB8888 pixel format */ |
| kenjiArai | 3:35ac9ee7d2d6 | 105 | for(index=0; index < height; index++) { |
| kenjiArai | 3:35ac9ee7d2d6 | 106 | /* Pixel format conversion */ |
| kenjiArai | 3:35ac9ee7d2d6 | 107 | LL_ConvertLineToARGB8888((uint32_t *)buffer, (uint32_t *)address, width, input_color_mode); |
| kenjiArai | 3:35ac9ee7d2d6 | 108 | |
| kenjiArai | 3:35ac9ee7d2d6 | 109 | /* Increment the source and destination buffers */ |
| kenjiArai | 3:35ac9ee7d2d6 | 110 | address+= (BSP_LCD_GetXSize()*4); |
| kenjiArai | 3:35ac9ee7d2d6 | 111 | buffer -= width*(bit_pixel/8); |
| kenjiArai | 3:35ac9ee7d2d6 | 112 | } |
| kenjiArai | 3:35ac9ee7d2d6 | 113 | free (buffer); |
| kenjiArai | 3:35ac9ee7d2d6 | 114 | } |
| kenjiArai | 3:35ac9ee7d2d6 | 115 | #endif |
| kenjiArai | 3:35ac9ee7d2d6 | 116 | #if 1 |
| kenjiArai | 3:35ac9ee7d2d6 | 117 | void drawImage(const char * name, uint16_t x, uint16_t y) |
| kenjiArai | 3:35ac9ee7d2d6 | 118 | { |
| kenjiArai | 3:35ac9ee7d2d6 | 119 | int fileSize; |
| kenjiArai | 3:35ac9ee7d2d6 | 120 | char * buffer; |
| kenjiArai | 3:35ac9ee7d2d6 | 121 | |
| kenjiArai | 3:35ac9ee7d2d6 | 122 | FILE *image = fopen(name, "rb"); // open the bmp file |
| kenjiArai | 3:35ac9ee7d2d6 | 123 | if (image == 0) { |
| kenjiArai | 3:35ac9ee7d2d6 | 124 | pc.printf("%s is not found in the disk\r\n", name); |
| kenjiArai | 3:35ac9ee7d2d6 | 125 | return; |
| kenjiArai | 3:35ac9ee7d2d6 | 126 | } |
| kenjiArai | 3:35ac9ee7d2d6 | 127 | //obtain file size: |
| kenjiArai | 3:35ac9ee7d2d6 | 128 | fseek (image, 0, SEEK_END); |
| kenjiArai | 3:35ac9ee7d2d6 | 129 | fileSize = ftell (image); |
| kenjiArai | 3:35ac9ee7d2d6 | 130 | rewind (image); |
| kenjiArai | 3:35ac9ee7d2d6 | 131 | |
| kenjiArai | 3:35ac9ee7d2d6 | 132 | // allocate memory to contain the whole file: |
| kenjiArai | 3:35ac9ee7d2d6 | 133 | buffer = (char*) malloc (sizeof(char)*fileSize); |
| kenjiArai | 3:35ac9ee7d2d6 | 134 | // copy the file into the buffer: |
| kenjiArai | 3:35ac9ee7d2d6 | 135 | fseek (image, 0, SEEK_SET ); |
| kenjiArai | 3:35ac9ee7d2d6 | 136 | // set SD file data start position |
| kenjiArai | 3:35ac9ee7d2d6 | 137 | fread (buffer,1,fileSize,image); |
| kenjiArai | 3:35ac9ee7d2d6 | 138 | fclose (image); |
| kenjiArai | 3:35ac9ee7d2d6 | 139 | |
| kenjiArai | 3:35ac9ee7d2d6 | 140 | //Draw image |
| kenjiArai | 3:35ac9ee7d2d6 | 141 | lcd.DrawBitmap(x,y,(uint8_t *)buffer); |
| kenjiArai | 3:35ac9ee7d2d6 | 142 | //Free allocated memory |
| kenjiArai | 3:35ac9ee7d2d6 | 143 | free (buffer); |
| kenjiArai | 3:35ac9ee7d2d6 | 144 | } |
| kenjiArai | 3:35ac9ee7d2d6 | 145 | #endif |
| kenjiArai | 3:35ac9ee7d2d6 | 146 | #endif |