
Projet d'interfaçage avec le joystick réalisé par Ronan CHERIAUX
Dependencies: BSP_DISCO_F746NG
drawBitmap.cpp@0:1c8761215497, 2020-06-26 (annotated)
- Committer:
- cheriauxlpsesam
- Date:
- Fri Jun 26 09:17:35 2020 +0000
- Revision:
- 0:1c8761215497
Projet_interfacage_CHERIAUX_Ronan
Who changed what in which revision?
User | Revision | Line number | New 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 |