MonochromeLib
Type | Bibliothèque logicielle |
Dévelopeur | PierrotLL |
langage | C |
Environnement | Graph 75/85/95 |
Licence | Open source |
Dernière version | 22 novembre 2011 |
MonochromeLib est une bibliothèque de dessin graphique pour le SDK Casio Graph 85.
Elle fournit aux développeurs des fonctions optimisées pour tracer toute sorte de choses à l'écran.
Chaque fonction de MonochromeLib est bien plus rapide que son équivalent dans fxlib.h, et elle fournit de nombreuses fonctionnalités supplémentaires. La dernière version date du 22 novembre 2011.
Sommaire
- 1 Fonctionnalités
- 2 Comment l'utiliser ?
- 3 Fonctions
- 3.1 ML_clear_vram()
- 3.2 ML_clear_screen()
- 3.3 ML_display_vram()
- 3.4 ML_Set_Contrast()
- 3.5 ML_get_contrast()
- 3.6 ML_pixel()
- 3.7 ML_point()
- 3.8 ML_pixel_test()
- 3.9 ML_line()
- 3.10 ML_horizontal_line()
- 3.11 ML_vertical_line()
- 3.12 ML_rectangle()
- 3.13 ML_polygon()
- 3.14 ML_filled_polygon()
- 3.15 ML_circle()
- 3.16 ML_filled_circle()
- 3.17 ML_ellipse()
- 3.18 ML_ellipse_in_rect()
- 3.19 ML_filled_ellipse()
- 3.20 ML_filled_ellipse_in_rect()
- 3.21 ML_horizontal_scroll()
- 3.22 ML_vertical_scroll()
- 4 La couleur : ML_Color
- 5 Liens externes
Fonctionnalités
Monochromelib permet de dessiner dans la VRAM divers formes géométriques (point, ligne, polygone, ellipse) ainsi que des images au format bitmap monochrome.
Comment l'utiliser ?
Pour utiliser la bibliothèque, copiez les 2 fichiers dans le dossier de votre projet, ajoutez MonochromeLib.c à votre projet (dans la fenêtre "Files in project" dans le SDK), ajoutez #include "MonochromeLib.h" au début de votre code. Pour n'ajouter à votre projet que les fonctions dont vous avez besoin, chaque fonction est protégée par un #ifdef, et les #define de chaque fonction sont commentés par défaut. Pour pouvoir utiliser une fonction, il suffit d'éditer MonochromeLib.h et de décommenter les #define des fonctions que vous voulez utiliser.
!!!Important!!! Si vous rencontrez une erreur de compilation de ce type :
** L2310 (E) Undefined external symbol "_ML_pixel" referenced in "C:\...\CASIO\fx-9860G SDK\Projet\Debug\MonochromeLib.obj"
et que le #define de la fonction en question est bien actif dans MonochromeLib.h, alors il faut juste recompiler MonochromeLib.c Pour cela, Utilisez la fonction Project > Rebuilt all dans le SDK. Si cela ne résoud pas le problème, supprimez le dossier Debug de votre projet, et recompilez normalement.
Fonctions
ML_clear_vram()
Prototype:
void ML_clear_vram();
Efface la VRAM. Cette fonction est 5 fois plus rapide que Bdisp_AllClr_VRAM.
ML_clear_screen()
Prototype:
void ML_clear_screen();
Efface l'écran. Cette fonction est 2 fois plus rapide que Bdisp_AllClr_DD. Remarque : Il est inutile d'appeler ML_clear_screen juste avant ML_display_vram.
ML_display_vram()
Prototype:
void ML_display_vram();
Copie le contenu de la VRAM à l'écran. Cette fonction est 2 fois plus rapide que Bdisp_PutDisp_DD. Remarque : Il est inutile d'appeler ML_clear_screen juste avant ML_display_vram.
ML_Set_Contrast()
Prototype:
void ML_set_contrast(unsigned char contrast);
Permet de définir la valeur du contraste. Celle ci doit être comprise entre ML_CONTRAST_MIN et ML_CONTRAST_MAX.
ML_get_contrast()
Prototype:
unsigned char ML_get_contrast();
Retourne la valeur actuelle du contraste.
ML_pixel()
Prototype:
void ML_pixel(int x, int y, ML_Color color);
Permet de définir la couleur d'un pixel de la VRAM. Le pixel en haut à gauche de l'écran a pour coordonnées (x=0, y=0), et le pixel en bas à droite (x=127, y=63).
ML_point()
Prototype:
void ML_point(int x, int y, int width, ML_Color color);
Dessine un point (carré) dans la VRAM, de centre (x, y), dont la longueur des coté (en pixel) est définie par width. Ex:
ML_point(10, 10, 3, ML_BLACK);
dessinera un rectangle noir allant de (9, 9) à (11, 11).
ML_pixel_test()
Prototype:
ML_Color ML_pixel_test(int x, int y);
Retourne la couleur du pixel aux coordonnées (x, y), ML_BLACK ou ML_WHITE. Si les coordonnées sont en dehors de l'écran, la fonction retourne ML_TRANSPARENT.
ML_line()
Prototype:
void ML_line(int x1, int y1, int x2, int y2, ML_Color color);
Trace une ligne entre les pixels de coordonnées (x1, y1) et (x2, y2) en utilisant l'algorithme de Bresenham.
ML_horizontal_line()
Prototype:
void ML_horizontal_line(int y, int x1, int x2, ML_Color color);
Dessine une ligne horizontale. Cette fonction est plus rapide qu'un appel à ML_line avec y1==y2.
ML_vertical_line()
Prototype:
void ML_vertical_line(int x, int y1, int y2, ML_Color color);
Dessine une ligne verticale. Cette fonction est plus rapide qu'un appel à ML_line avec x1==x2.
ML_rectangle()
Prototype:
void ML_rectangle(int x1, int y1, int x2, int y2, int border_width, ML_Color border_color, ML_Color fill_color);
Dessine un rectangle avec ou sans bordure. Vous pouvez définir la couleur de la bordure et du remplissage du rectangle. Si vous ne voulez pas de bordure, définissez border_width à 0.
ML_polygon()
Prototype:
void ML_polygon(const int *x, const int *y, int nb_vertices, ML_Color color);
Dessine un polygone. Cette fonction demande en paramètre deux tableaux d'entiers, le premier contenant les abscisses des sommets du polygone, et le second contenant les ordonnées. Le paramètre nb_vertices doit être le nombre de sommets du polygone (le nombre de valeurs à lire dans les tableaux x et y). Ensuite, la fonction trace des lignes entre ces sommets pour dessiner le polygone.
Exemple:
int abscisses[] = {60, 75, 70, 50, 45}; int ordonnees[] = {20, 30, 45, 45, 30}; ML_clear_vram(); ML_polygon(abscisses, ordonnees, 5, ML_BLACK); ML_display_vram();
ML_filled_polygon()
Prototype:
void ML_filled_polygon(const int *x, const int *y, int nb_vertices, ML_Color color);
Demande les mêmes paramètres que ML_polygon, mais dessine un polygon plein.
ML_circle()
Prototype:
void ML_circle(int x, int y, int radius, ML_Color color);
Trace un cercle de centre (x, y) et de rayon radius en utilisant l'algorithme de Bresenham.
ML_filled_circle()
Prototype:
void ML_filled_circle(int x, int y, int radius, ML_Color color);
Similaire à ML_circle, mais dessine un cercle plein.
ML_ellipse()
Prototype:
void ML_ellipse(int x, int y, int radius1, int radius2, ML_Color color);
Trace une ellipse de centre (x, y) et de rayons radius1 et radius2. radius1 est la distance entre le centre et les points les plus à gauche et à droite de l'ellipse. radius2 est la distance entre le centre et les points les plus haut et bas de l'ellipse. Utilise l'algorithme de Bresenham.
ML_ellipse_in_rect()
Prototype:
void ML_ellipse_in_rect(int x1, int y1, int x2, int y2, ML_Color color);
Cette fonction appelle ML_ellipse. Elle demande les coordonnées d'un rectangle, et trace l'ellipse inscrite dans ce rectangle.
ML_filled_ellipse()
Prototype:
void ML_filled_ellipse(int x, int y, int radius1, int radius2, ML_Color color);
Similaire à ML_ellipse, mais dessine une ellipse pleine.
ML_filled_ellipse_in_rect()
Prototype:
void ML_filled_ellipse_in_rect(int x, int y, int radius1, int radius2, ML_Color color);
Similaire à ML_ellipse_in_rect, mais dessine une ellipse pleine.
ML_horizontal_scroll()
Prototype:
void ML_horizontal_scroll(int scroll);
Permet de décaler tous les pixels de la VRAM vers la gauche ou la droite. Par exemple, si scroll=5, alors un pixel situé en (2, 3) sera déplacé en (7, 3). Si scroll est négatif, les pixels seront déplacés vers la gauche. Les pixels qui sortent de l'écran sont replacés de l'autre cotés.
ML_vertical_scroll()
Prototype:
void ML_vertical_scroll(int scroll);
Similaire à ML_horizontal_scroll, mais effectue le décalage verticalement.
La couleur : ML_Color
Prototype:
typedef enum {ML_TRANSPARENT=-1, ML_WHITE, ML_BLACK, ML_XOR, ML_CHECKER} ML_Color;
ML_Color est une énumération des différentes couleurs utilisables avec MonochromeLib.
Seul ML_TRANSPARENT a une valeur définie à -1, le compilateur donne donc aux autres les valeurs suivantes :
ML_TRANSPARENT = -1
ML_WHITE = 0
ML_BLACK = 1
ML_XOR = 2
ML_CHECKER = 3
ML_XOR permet d'inverser la couleur déjà présente dans la VRAM. ML_CHECKER est une couleur "damier". Elle rend 1 pixel sur 2 blanc, et l'autre noir, selon la rêgle suivante : si (x et y sont pair) ou (x et y sont impairs), alors le pixel devient noir, sinon il devient blanc.