Librairie graphique en vga

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 676 fois - Téléchargée 28 fois

Contenu du snippet

Bon il est vrai que la VGA est très vieux mais ca n'empeche pas d'etre toujours d'actualité. Bon c'est un petite librairie graphique qui trace des points, des lignes, des rectangles, des carrés et des cercles. L'algo donne un cercle un tout petit peut applatit mai bn. C'est mon premier code. Il est sous Linux bien sur et il faut avoir la librairie de devellopement vga installée.

Source / Exemple :


//Code exemple utilisant la lib
//gcc -o vga vga.c -lvga -lvgagl

#include "dessinvga.c"

int main(void)
{
INIT_VGA(12);//initialisation de VGA (mode)
vga_carre(150,150,60,15);//carré (X,Y,Coté,Couleur)
vga_texte(1,1,"Salut",255,31);//Texte (X,Y,Texte,couleur de fond,couleur de police)
vga_point(100,20,25);//Point (X,Y,Couleur)
vga_rectangle(200,200,300,100,1);//Rectangle (X,Y,largeur,hauteur,couleur)
vga_circle(500,500,50,89);//Cercle (X,Y,Rayon,couleur)
vga_getch();//On attend un apui de touche 
QUIT_VGA();//On quitte la VGA
}

//////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////LIBRAIRIE////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////

#include <stdio.h>
#include <stdlib.h>
#include <vga.h>
#include <vgagl.h>
#include <math.h>
#include <time.h>

int vga_texte(int X, int Y, char *texte,int backfontcolor, int fontcolor)//coordonnées,texte,couleur fond et police
int vga_carre(int X, int Y, int C, int color)//coordonnées,coté,couleur.
int vga_point(int X, int Y, int color)//coordonnées,couleur.
int vga_rectangle(int X,int Y,int L,int H,int color)//coordonnées,largeur,hauteur,couleur.
int vga_circle(int Ox, int Oy, int r, int color)//coordonnées,rayon,couleur.
int vga_ligne(X1,Y1,X2,Y2,color);
 
int INIT_VGA(int mode)
{
int XMAX,YMAX;
vga_init();
vga_setmode(mode);
gl_setcontextvga(mode);
gl_setfont(8, 8, gl_font8x8); //largeur, hauteur, pointeur sur la police (c'est la seule en standard)
gl_setwritemode(FONT_COMPRESSED); //la police gl_font8x8 est comprimée (on ne l'a pas "expandée")
//gl_setfontcolors(backfontcolor, fontcolor); //couleur fond, couleur texte
XMAX=vga_getxdim();
YMAX=vga_getydim();

return EXIT_SUCCESS;
}

int QUIT_VGA()
{
vga_setmode(TEXT);
} 

int vga_carre(int X, int Y, int C, int color)//coordonnées,coté,couleur.
{
vga_setcolor(color);
vga_drawline(X,Y,X+C,Y);
vga_drawline(X+C,Y,X+C,Y+C);
vga_drawline(X+C,Y+C,X,Y+C);
vga_drawline(X,Y,X,Y+C);
}

int vga_point(int X, int Y, int color)//coordonnées,couleur.
{
vga_setcolor(color);
vga_drawpixel(X,Y);
}

int vga_texte(int X, int Y, char *texte,int backfontcolor, int fontcolor)//coordonnées,texte,couleur fond et police
gl_setfontcolors(backfontcolor, fontcolor);
gl_printf(X,Y,texte);
}

int vga_rectangle(int X,int Y,int L,int H,int color)//coordonnées,largeur,hauteur,couleur.
{
vga_setcolor(color);
vga_drawline(X,Y,X+L,Y);
vga_drawline(X,Y,X,Y+H);
vga_drawline(X,Y+H,X+L,Y+H);
vga_drawline(X+L,Y+H,X+L,Y);
} 

int vga_circle(int Ox, int Oy, int r, int color)//coordonnées,rayon,couleur.
{
int   X = 0;
int   Y = r;
vga_setcolor(color);
r = r * r;
while (X <= Y)
	{
	vga_drawpixel(Ox+X,Oy-Y);
	vga_drawpixel(Ox-X,Oy-Y);
	vga_drawpixel(Ox+X,Oy+Y);
	vga_drawpixel(Ox-X,Oy+Y);
	vga_drawpixel(Ox+Y,Oy-X);
	vga_drawpixel(Ox-Y,Oy-X);
	vga_drawpixel(Ox+Y,Oy+X);
	vga_drawpixel(Ox-Y,Oy+X);
	X++;
	Y = sqrt(r - ((double)X * X)) + 0.5;
	}
}

int vga_ligne(X1,Y1,X2,Y2,color)
{
vga_setcolor(color);
vga_drawline(X1,Y1,X2,Y2);
}

Conclusion :


Je devrais ajouter un code pour les elipse , pour le coix de la police et pour le choix des couleurs en RGB.

A voir également

Ajouter un commentaire

Commentaires

TheLudo2013
Messages postés
77
Date d'inscription
mardi 12 novembre 2002
Statut
Membre
Dernière intervention
18 octobre 2007
-
Je rigole hein ! On va pas te pendre par les testicules jusqu'a ce que mort s'en suive pour si peu...

Mais par contre ce n'est pas qu'une question de conventions : en C ça fonctionne parceque le compilo supporte la surcharge ; mais c'est loin d'être le cas de tous les langages...

Sans compter que ça alourdi artificiellement le travail dudit compilo...
jrbleboss
Messages postés
480
Date d'inscription
jeudi 6 mai 2004
Statut
Membre
Dernière intervention
3 septembre 2007
-
Je m'excuse mais j'avais commencé la programmation en C depuis 1 mois à cette epoque et je ne connaissais rien des normes, etc...
TheLudo2013
Messages postés
77
Date d'inscription
mardi 12 novembre 2002
Statut
Membre
Dernière intervention
18 octobre 2007
-
Dennis Ritchie se retournerait dans sa tombe... Surcharger ses fonctions par flemme d'en écrire les définitions, c'est absolument horrible...

ça relève du crime contre l'humanité !
Arnaud16022
Messages postés
1329
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
16 juin 2010
2 -
ne jamais inclure un .c/ un .cpp, régle number one de tout programmeur non suicidaire
en gros:
tu n'inclus QUE des .h/.hpp
une classe = UN .h et UNa .cpp
-> reusabilité maximale, risque d'erreurs minimal
meme si tu fais pas de la POO il faut pas...ca sent les erreurs de define a plein nez sinon, pour les redéfinitions pareil, l'utilisation des headers...
jrbleboss
Messages postés
480
Date d'inscription
jeudi 6 mai 2004
Statut
Membre
Dernière intervention
3 septembre 2007
-
Une petite explication s'impose : dessinvga. c est la librairie que je depose(le code et composé du code qui l'utilise et de la lib c'est marqué). Pourquoi inclure un fichier .c c'est pas bon.
C'est libsvga1-dev et svgalib-bin qu'il faut comme paquets et c'est sous Linux !!!

Pour compiler gcc -o vga vga.c -lvga -lvgagl

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.