bpxSave()

Sauvegarde un bitmap de format .BPX sur la carte SD

 

Exemples d'utilisation

bpxSave("Screen.bpx",0,0,MAX_X,MAX_Y); // Copie d'écran dans le fichier Screen.bpx
bpxDraw("photo.bpx"); // Équivalent
bpxSave("Screenprint.bpx"); // Ne fait rien, le nom a plus de 8 caractères!

 

Référence

byte bmpSave(String fileName, int x1 = -1, int y1 = -1, int x2 = -1, int y2 = -1);

Paramètres passés

fileName: nom du fichier sur la carte SD (format 8+3).
x1,y1: point en haut à gauche du bitmap
x2,y2: point en bas à droite du bitmap

Valeur retournée

Le code d'erreur:
0: tout s'est bien passé
1: problème d'initialisation de la carte SD
3: la zone à sauvegarder dépasse les limites de l'écran ou imposées par la fonction setLimites()

 

Voir aussi

- bpxDraw(); Charge un bitmap .BPX de la carte SD
- bmpDraw(); Charge un bitmap .BMP de la carte SD
- bmpSave(); Sauvegarde un bitmap .BMP sur la carte SD
- setLimites(); Limite la zone de dessin
- screenPrint(); Copie d'écran sur la carte SD
- initSD(); Initialisation de la carte SD
- point(); Dessine un point

 

Notes

Si le paramètre x1 (resp y1, x2, y2) est omis ou si il vaut -1, l'image copiée sera le plus à gauche (resp haut, droite, bas), en accord avec la limite qui peut avoir été définie avec la fonction setLimites(). Ne pas mettre de coordonnées va copier toute la zone (tout l'écran si on n'a pas réduit l'espace de dessin).

Le format est spécifique aux écrans ayant des pixels sur 16 bits, les couleurs sont déjà au format 16 bits de l'afficheur. Les fichiers BPX sont plus petits que les fichiers BMP et s'affichent donc 50% plus vite. Ce format est donc plus adapté pour stocker des zones d'écran.

La sauvegarde est assez longue, et on ne devrait pas voir grand chose. Des hachures de progressions permettent de faire patienter. Ces hachures disparaissent quand la sauvegarde est finie.

La carte doit être au format FAT16 ou FAT32. Si le nom est trop long (plus de 8+3 caractères), rien n'est fait. Les répertoires sont séparés par le caractère '/'.

 

Exemple

PecheuxGraph_ILI9341_8bits.zip\PecheuxGraph_ILI9341_8bits\examples\Documentation\Exemple-403-bpxSave\Exemple-403-bpxSave.ino (dans votre fichier téléchargé):

// Ce programme affiche un fond d'écran, sauvegarde la partie centrale. Puis en boucle, dessine cette partie
// n'importe où sur l'écran. Il vaut mieux utiliser point() et getPoint(), mais c'est pour l'exemple (c'est
// aussi plus simple à écrire comme ça).

// Pour que le programme fonctionne, il faut insérer une carte microSD

#
  $menu = ":PG";
  include <PecheuxGraph_ILI9341_8bits.h>
void setup() 
{
  setGraphMode(PAYSAGE);

  // Affiche un seul fond d'écran
  if ( // Test pour voir si il y a bien la carte SD
    bpxDraw("320x240/1.bpx")* // Affiché seulement en mode paysage
    bpxDraw("240x320/20.bpx") // Affiché seulement en mode portrait
  !=0 // les deux copies ont échouées, la multiplication des deux codes d'erreurs est non nulle
  { 
    text("Il n'y a pas la carte SD,\nou le répertoire \"SD\" n'a pas été\nrecopié sur la carte"); 
    while (true); // boucle infinie, arrête le programme
  }  
  bpxSave("Temp.bpx",LARGEUR>>2,HAUTEUR>>2,(LARGEUR>>2)*3-1,(HAUTEUR>>2)*3-1); // Mémorisation du centre de l'écran
}

void loop()
{
  bpxDraw("Temp.bpx",random(DEMI_LARGEUR),random(DEMI_HAUTEUR)); // et le remet en mosaïque
}

Résultat:

 

Côté technique

Sauvegarder au format .BMP permet de lire ce qui est sur l'afficheur avec un ordinateur. C'est typiquement pour faire des copies d'écran. Pour sauvegarder provisoirement une image, il vaut mieux utiliser le format .BPX qui est moins volumineux, plus rapide, mais qui ne peut pas être lu sur un ordinateur normal.

Pendant la sauvegarde, un point sur 32 sauvegardés est inversé, avec un décalage d'un point à chaque ligne. Cela permet de faire patienter. Cela peut faire des lignes, des pointillés... cela dépend de la largeur de la zone. Quand la sauvegarde est finie, les points sont de nouveau inversés pour retrouver le dessin d'origine. La technique utilisée est celle accessible par setDrawInverse().