Ça reste assez embêtant d'avoir une erreur à la compilation qui ne dépend pas vraiment du code que tu es en train de compiler… :s
Je suis en train de voir ce que je peux faire pour ça.
Pour ce qui est des icônes, leur format est le suivant : ce sont des bitmaps, de taille 92×64, en format RGB565 (i.e. 16 bits d'information par pixel : 5 pour le rouge et le bleu et 6 pour le vert, c'est le format utilisé un peu partout par la calculatrice).
Pour utiliser des images au sein de tes programmes, les encoder “en hexa” est en effet une des seules solutions (en fait tu as au moins une autre option tout de même, je t'invite à regarder
ce sujet, mais je pense que pour la plupart des cas, l'encodage dans le programme est une solution plus agréable à utiliser).
En fait ce que tu veux faire, c'est stocker directement les pixels de ton image ; la Prizm encode chaque pixel sur deux octets (avec le même format RGB565 que pour les icônes). Or, c'est quand même un peu lourd d'avoir deux octets par image : on peut réduire le poids total d'un sprite en utilisant une palette. C'est à dire qu'on va regarder combien de couleurs différentes apparaissent dans le sprite, et si il y en a moins que 256 par exemple (ou qu'on réduit ce nombre à 256 par divers moyen), il peut suffire de repérer les couleurs du sprite par un nombre codé sur un octet, et de le faire correspondre à la couleur réelle en utilisant un second tableau contenant lui les vraies couleurs, mais en une seule fois (c'est la palette).
La routine d'affichage du sprite dépendra alors de l'encodage choisi.
Je ne sais pas si j'ai été très clair, et peut-être étais-tu déjà familier avec ça… ^^
En tout cas, si ça n'est pas hyper clair, et que tu as encore quelques doutes sur la manière dont on peut jouer avec la mémoire vidéo, je t'invite fortement à prendre une routine d'affichage de sprite avec palette, et à la décortiquer un peu, après ça tu devrais avoir les idées assez claires sur la VRAM. (Ça n'empêche pas que je serai toujours content de répondre à des questions si il t'en reste ou que ça se passe mal avec la lecture de la routine hein ! ^^)
Enfin, toujours est-il que ça serait un peu fastidieux de faire ça à la main, donc on peut effectivement passer par d'autres outils ; SourceCoder de chez Cemetech en est un, et il y a aussi le SpriteCoder de Smashmaster que tu peux trouver
ici.
Si tu cherches une routine à étudier, tu peux par exemple regarder celle-ci, qui vient de GravityDuck, prend un bitmap codé sur 8bits, et qui a en plus un canal alpha, c'est à dire une couleur (ici mask) dont on décide qu'elle ne sera pas affichée, et qui permet de faire un effet de «transparence» sur le sprite.
Show/Hide spoilerAfficher/Masquer le spoiler
- Code: Tout sélectionner
void CopySpriteMasked(char* bitmap, short* palette, int x, int y, int width, int height, short mask)
{
short* VRAM = GetVRAMAdress();
int y_index;
int x_index;
short * base = y * LCD_WIDTH_PX + x + VRAM;
for (y_index = height; y_index > 0; --y_index, base += LCD_WIDTH_PX - width) {
for (x_index = width; x_index > 0; --x_index, ++base, ++bitmap) {
if (palette[*bitmap] != mask) *base = palette[*bitmap];
}
}
}