douggyfresh
Messages postés21Date d'inscriptionlundi 24 mai 2004StatutMembreDernière intervention25 mai 2005 14 juil. 2004 à 21:40
douggy :
Comme l'a souligné un ami la haut, ton message manque un peu de precision. Mais, je vais quand meme essayer d'y repondre sans celle-ci.
Pour changer la couleur par defaut d'un numero de couleur(ex: couleur numero 30,63,14,20,255,140 et tout le saint glin-glin.),
donc, il faudrait changer la palette de couleur par defaut de la carte vidéo. La palette est un tableau de couleur par defaut memorisé dans la carte video de votre ordinateur(c'est une sorte de circuit special de la carte video).
Supposons que la fonction qui place votre pixel sur l'ecran soit :
putpixel(int x,int y,unsigned char color);
//Je suppose que vous connaissez le langage C
je suppose que vous savez deja comment placer un pixel sur l'ecran(d'ailleurs, vous en avez deja fait la preuve).
quand vous faites pupixel(20.30,15) i-ème fois, on obtient la meme couleur. Donc, si on veut changer la nuance de couleur afin d'ajouter la sienne. Voila ce qu'on doit faire.
Avant tout, il faut savoir que la palette se compose de 256 indexes de couleurs(0 à 255) composées chacuns( les indexes) de 3 combinaisons de couleur: Rouge, Vert, Bleu->(RVB) ou Red,Green,Blue->(RGB).
Pour changer la couleur il suffit d'acceder au port d'ecriture de la carte vidéo ayant pour adresse en hexadecimale : 3C8.
Il y a une fonction appelée outportb() de la bibliotheque dos.h qui vous permettra d'envoyer des donnees sur un port:
Pour signaler a la carte video qu'on va y ecrire des donnees, il faut passer par ce port. Donc, la carte video vous donnera acces a l'ecriture en memorisant ce que vous voulez ecrire sur un port-variable(espace de stockage),ayant pour numero : 3C9.
(*Je vous conseille maintenant de respirer un bon souffle.OAAFFFF!*)
Pour y arriver,on envoi les donnees dans l'ordre suivant: l'index de couleur dans 3C8, puis la quantite de couleur rouge dans 3C9, la quantité verte dans 3C9, enfin la quantité bleue dans 3C9. D'ou l'expression RGB ou RVB en francais, car la carte video accepte les couleurs dans l'ordre rouge, vert, bleue.
Practica:
on va ecrire la fonction:
rappelons le prototype de outporb
void outportb(int numero_port,unsigned char valeur)
//se trouve dans dos.h
void setpal(unsigned char couleur,unsigned char r,unsigned char g,unsigned char b)
{
outportb(0x3C8,couleur);//sollicite l'ecriture dans
//l'index de couleur indiquee
outportb(0x3C9,r);//on envoie le rouge
outportb(0x3C9,g);//le vert
outportb(0x3C9,b);//le blue
}
//les 0x precedes des nombres, signalent que ces derniers sont
//des nombres hexadecimaux en langage C.
cette fonction changera la couleur d'affichage par defaut d'une couleur de pixel avec notre propre nuance rouge, vert, bleue.
Mais, les nuances vont de 0 à 63 pour chacune des couleurs(64 couleur en total).
prenez le temps de changer la couleur dans une boucle for.
ex:
void changepal()
{
int i;
for(i=0;i<=255;i++)
setpal(i,random(64),random(64),random(64));
}
//cette petite fonction change les nuances de RVB avec des quantites de couleur RVB alétoire.
Placer la procedure changepal() avant celle qui place les pixels et vous en verrez l'effet.
Questions, ou commentaires,ecrivez moi à :
douggynix@yahoo.fr
xarier
Messages postés688Date d'inscriptionjeudi 26 décembre 2002StatutMembreDernière intervention19 mai 2005 14 juil. 2004 à 21:49
voila la fonction pour changer le couleur d'un pixel et
SetPixel pas setpixel pour mieux comprendre va voir ma source que j'ai penser avanthier il est nomé Createur demask il remplace la couleur indiquet par uen autre
see you
Life is Short 8-)
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 14 juil. 2004 à 21:58
douggyfresh ==> interessant, seulement dépassé car possible uniquement en mode reel et reservé a ms-dos
impossible d'acceder a la carte video sans une api (opengl, d3d...) supporté par les drivers
douggyfresh
Messages postés21Date d'inscriptionlundi 24 mai 2004StatutMembreDernière intervention25 mai 2005 16 juil. 2004 à 23:05
douggy:
A djl:
je vous remercie quand meme.
Selon mes recherches, je pense qu'il est possible d'acceder a la carte video sans l'apport de ces librairies et pilotes graphiques.
Car, la carte n'est qu'un circuit specialise de l'ordinateur. Donc pour y acceder, il faut connaitre son numero de port.
Moi, j'en ai l'habitude. Je pense que les routines d'opengl,d3d,bgi etc.. utilisent cette meme methode. Mais, il essaie de vous masquer ces informations afin de faciliter la comprehension des programmeurs debutants. et afin que vous pensiez a resoudre d'autres problemes au lier de s'y miser.
Je vous remercie pour cette remarque. Et si vous n'etes pas d'accord. fais moi parvenir votre reponse sur le forum.
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 16 juil. 2004 à 23:19
les interruptions logiciels ne sont plus possibles avec les noyaux nt et le mode protegé
comme je l'ai dit, opengl et direct3d communique avec la carte graphique par le biais des drivers (ta carte graphique possede ses propres drivers opengl et direct3d)