Projet d'interfaçage avec le joystick réalisé par Ronan CHERIAUX

Dependencies:   BSP_DISCO_F746NG

Committer:
cheriauxlpsesam
Date:
Fri Jun 26 09:17:35 2020 +0000
Revision:
0:1c8761215497
Projet_interfacage_CHERIAUX_Ronan

Who changed what in which revision?

UserRevisionLine numberNew contents of line
cheriauxlpsesam 0:1c8761215497 1 #include "drawBitmap.h"
cheriauxlpsesam 0:1c8761215497 2 #include "stm32746g_discovery_lcd.h"
cheriauxlpsesam 0:1c8761215497 3
cheriauxlpsesam 0:1c8761215497 4 void drawBitmap(int Xpos, int Ypos, const uint8_t *pbmp, bool transparent)
cheriauxlpsesam 0:1c8761215497 5 {
cheriauxlpsesam 0:1c8761215497 6 uint32_t index = 0, width = 0, height = 0, bit_pixel = 0;
cheriauxlpsesam 0:1c8761215497 7 uint32_t *couleur;
cheriauxlpsesam 0:1c8761215497 8
cheriauxlpsesam 0:1c8761215497 9 /* Get bitmap data address offset */
cheriauxlpsesam 0:1c8761215497 10 index = pbmp[10] + (pbmp[11] << 8) + (pbmp[12] << 16) + (pbmp[13] << 24);
cheriauxlpsesam 0:1c8761215497 11
cheriauxlpsesam 0:1c8761215497 12 /* Read bitmap width */
cheriauxlpsesam 0:1c8761215497 13 width = pbmp[18] + (pbmp[19] << 8) + (pbmp[20] << 16) + (pbmp[21] << 24);
cheriauxlpsesam 0:1c8761215497 14
cheriauxlpsesam 0:1c8761215497 15 /* Read bitmap height */
cheriauxlpsesam 0:1c8761215497 16 height = pbmp[22] + (pbmp[23] << 8) + (pbmp[24] << 16) + (pbmp[25] << 24);
cheriauxlpsesam 0:1c8761215497 17
cheriauxlpsesam 0:1c8761215497 18 /* Read bit/pixel */
cheriauxlpsesam 0:1c8761215497 19 bit_pixel = pbmp[28] + (pbmp[29] << 8);
cheriauxlpsesam 0:1c8761215497 20
cheriauxlpsesam 0:1c8761215497 21 int xSize = BSP_LCD_GetXSize(), ySize = BSP_LCD_GetYSize();
cheriauxlpsesam 0:1c8761215497 22 couleur = (uint32_t *)&pbmp[index];
cheriauxlpsesam 0:1c8761215497 23 int yDebut;
cheriauxlpsesam 0:1c8761215497 24 if (Ypos+height>=ySize) {
cheriauxlpsesam 0:1c8761215497 25 yDebut = ySize-1;
cheriauxlpsesam 0:1c8761215497 26 couleur += width*(Ypos+height-ySize);
cheriauxlpsesam 0:1c8761215497 27 } else {
cheriauxlpsesam 0:1c8761215497 28 yDebut = Ypos+height-1;
cheriauxlpsesam 0:1c8761215497 29 }
cheriauxlpsesam 0:1c8761215497 30 int yFin = (Ypos<0) ? 0 : Ypos;
cheriauxlpsesam 0:1c8761215497 31 int xDebut, xDeltaDebut;
cheriauxlpsesam 0:1c8761215497 32 if (Xpos<0) {
cheriauxlpsesam 0:1c8761215497 33 xDebut = 0;
cheriauxlpsesam 0:1c8761215497 34 xDeltaDebut = -Xpos;
cheriauxlpsesam 0:1c8761215497 35 } else {
cheriauxlpsesam 0:1c8761215497 36 xDebut = Xpos;
cheriauxlpsesam 0:1c8761215497 37 xDeltaDebut = 0;
cheriauxlpsesam 0:1c8761215497 38 }
cheriauxlpsesam 0:1c8761215497 39 int xFin, xDeltaFin;
cheriauxlpsesam 0:1c8761215497 40 if (Xpos+width>xSize) {
cheriauxlpsesam 0:1c8761215497 41 xFin = xSize-1;
cheriauxlpsesam 0:1c8761215497 42 xDeltaFin = Xpos+width - xSize;
cheriauxlpsesam 0:1c8761215497 43 } else {
cheriauxlpsesam 0:1c8761215497 44 xFin = Xpos+width-1;
cheriauxlpsesam 0:1c8761215497 45 xDeltaFin = 0;
cheriauxlpsesam 0:1c8761215497 46 }
cheriauxlpsesam 0:1c8761215497 47
cheriauxlpsesam 0:1c8761215497 48 for (int ligne=yDebut; ligne>=yFin; ligne--) {
cheriauxlpsesam 0:1c8761215497 49 couleur += xDeltaDebut;
cheriauxlpsesam 0:1c8761215497 50 for (int colonne=xDebut; colonne<=xFin; colonne++) {
cheriauxlpsesam 0:1c8761215497 51 if (transparent & ((*couleur & 0xFF000000)==0xFF000000)) BSP_LCD_DrawPixel(colonne, ligne, *couleur);
cheriauxlpsesam 0:1c8761215497 52 couleur++;
cheriauxlpsesam 0:1c8761215497 53 }
cheriauxlpsesam 0:1c8761215497 54 couleur += xDeltaFin;
cheriauxlpsesam 0:1c8761215497 55 }
cheriauxlpsesam 0:1c8761215497 56 }
cheriauxlpsesam 0:1c8761215497 57