Bonjour,
La librairie GFX Adafruit (j'utilise le fork PDQ GFX) permet d'afficher des bitmaps mais il est dommage de ne pas pouvoir les tourner ou les afficher en miroir.
C'est en effet trop bête de devoir charger plusieurs bitmaps en mémoire pour représenter des logos ou des dessins sous différents angles.
Je parle bien sûr de rotation d'un angle de 90°, 180° ou 270°, un Arduino n'est pas assez costaud pour des rotations quelconques.
Du coup j'ai modifié la librairie PDQ GFX, voici le code :
En paramètre il y a
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62 template<class HW> void PDQ_GFX<HW>::drawBitmap(coord_t x, coord_t y, uint8_t *bitmap, coord_t w, coord_t h, color_t color, color_t bg, bool drawBG, uint8_t angleFM) { coord_t i, j, byteWidth = (w + 7) / 8; uint8_t byte; coord_t xx, yy; bool mirror; mirror = angleFM>3; if (mirror) { angleFM-=4; } for (j = 0; j < h; j++) { for (i = 0; i < w; i++) { if (i % 8 == 0) byte = bitmap[j * byteWidth + i / 8]; else byte <<= 1; switch (angleFM) { case 0: if (mirror) { xx = w - i - 1; }else{ xx = i; } yy = j; break; case 1: xx = h - j - 1; if (mirror) { yy = w - i - 1; }else{ yy = i; } break; case 2: if (mirror) { xx = i; }else{ xx = w - i - 1; } yy = h - j - 1; break; default: xx = j; if (mirror) { yy = i; }else{ yy = w - i - 1; } break; } if (byte & 0x80) HW::drawPixel(xx + x, yy + y, color); else if (drawBG) HW::drawPixel(xx + x, yy + y, bg); } } }qui doit être vrai si vous voulez dessiner l'arrière plan
Code : Sélectionner tout - Visualiser dans une fenêtre à part bool drawBG
Il y a aussiqui définit l'angle de rotation et le miroir :
Code : Sélectionner tout - Visualiser dans une fenêtre à part uint8_t angleFM
0 correspond au bitmap normal
1 correspond à une rotation de 90°
2 correspond à une rotation de 180°
3 correspond à une rotation de 270°
4 correspond à un miroir
5 correspond à un miroir suivit d'une rotation de 90°
6 correspond à un miroir suivit d'une rotation de 180°
7 correspond à un miroir suivit d'une rotation de 270°
A noter que cette fonction permet de dessiner un bitmap en RAM.
Vous pouvez faire facilement la même modif pour la fonction qui dessine un bitmap en ROM (progmem)
A bientôt
Partager