
Projet d'interfaçage avec le joystick réalisé par Ronan CHERIAUX
Dependencies: BSP_DISCO_F746NG
drawBitmap.cpp
- Committer:
- cheriauxlpsesam
- Date:
- 2020-06-26
- Revision:
- 0:1c8761215497
File content as of revision 0:1c8761215497:
#include "drawBitmap.h" #include "stm32746g_discovery_lcd.h" void drawBitmap(int Xpos, int Ypos, const uint8_t *pbmp, bool transparent) { uint32_t index = 0, width = 0, height = 0, bit_pixel = 0; uint32_t *couleur; /* Get bitmap data address offset */ index = pbmp[10] + (pbmp[11] << 8) + (pbmp[12] << 16) + (pbmp[13] << 24); /* Read bitmap width */ width = pbmp[18] + (pbmp[19] << 8) + (pbmp[20] << 16) + (pbmp[21] << 24); /* Read bitmap height */ height = pbmp[22] + (pbmp[23] << 8) + (pbmp[24] << 16) + (pbmp[25] << 24); /* Read bit/pixel */ bit_pixel = pbmp[28] + (pbmp[29] << 8); int xSize = BSP_LCD_GetXSize(), ySize = BSP_LCD_GetYSize(); couleur = (uint32_t *)&pbmp[index]; int yDebut; if (Ypos+height>=ySize) { yDebut = ySize-1; couleur += width*(Ypos+height-ySize); } else { yDebut = Ypos+height-1; } int yFin = (Ypos<0) ? 0 : Ypos; int xDebut, xDeltaDebut; if (Xpos<0) { xDebut = 0; xDeltaDebut = -Xpos; } else { xDebut = Xpos; xDeltaDebut = 0; } int xFin, xDeltaFin; if (Xpos+width>xSize) { xFin = xSize-1; xDeltaFin = Xpos+width - xSize; } else { xFin = Xpos+width-1; xDeltaFin = 0; } for (int ligne=yDebut; ligne>=yFin; ligne--) { couleur += xDeltaDebut; for (int colonne=xDebut; colonne<=xFin; colonne++) { if (transparent & ((*couleur & 0xFF000000)==0xFF000000)) BSP_LCD_DrawPixel(colonne, ligne, *couleur); couleur++; } couleur += xDeltaFin; } }