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 :

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);
		}
	}
}
En paramètre il y a qui doit être vrai si vous voulez dessiner l'arrière plan

Il y a aussi qui définit l'angle de rotation et le miroir :
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