Afficher le pixel sur l'écran en C
Comment puis-je modifier un pixel sur un écran, en C?
Ne présumons de RIEN: je suis l'aide d'une machine linux à partir de la console pour ce faire. Je ne veux pas utiliser les kits graphiques ou des cadres de dessiner le pixel. Je ne veux pas faire du pixel dans une fenêtre. Je veux dessiner le pixel directement à l'écran.
EDIT: j'ai un écran. Je suis sur un ordinateur portable fonctionnant sous linux à partir de la console. Je préfère une solution n'utilisant pas de X comme je l'avais plutôt de savoir comment apprendre X fonctionne de la façon d'utiliser X.
Si theres plus d'informations, demandez, mais ne supposez pas. Je ne suis pas en train de construire une interface graphique, et c'était le but principal de blocage des hypothèses que je ne veux pas que les gens pensent que je suis en train de faire les choses le chemin le plus long, alors qu'en réalité je suis juste bricoler.
EDIT 2: Vous pouvez utiliser n'importe X11 bibliothèques liées à la condition que vous pouvez expliquer comment ils fonctionnent.
source d'informationauteur DavidJFelix
Vous devez vous connecter pour publier un commentaire.
Si vraiment nous ne présumons de rien, nous pouvons même supposer que X est en cours d'exécution? D'ailleurs, pouvons-nous supposer qu'il existe une carte vidéo? Peut-être que Linux est en cours d'exécution sans tête et nous y accèdent sur une console série.
Si nous sommes autorisés à assumer un certain nombre de choses, supposons que Linux a démarré avec le framebuffer de soutien. (Ça fait quelques années que je travaille avec Linux tampons d'images, j'ai peut obtenir les détails de mal.) Il y aura un appareil créé, probablement
/dev/fb
ou/dev/fb0
. Ouvrez ce fichier et commencer à écrire des valeurs RVB à un décalage, et l'écran va changer, à peu près indépendamment de quoi que ce soit: le texte de la console, la console graphique, de bureau à part entière environnement, etc. Si vous voulez voir si le framebuffer fonctionne, nedd if=/dev/zero of=/dev/fb
sur la ligne de commande, et l'affichage devrait aller tout en noir.C ne dispose pas de toutes les capacités de la carte graphique, il vous faudrait utiliser une bibliothèque tierce pour cela.
Vous ne pouvez pas assumer un affichage en C. Il n'y a littéralement aucun moyen de faire ce que vous demandez.
Edit: Bon, vous avez un écran, mais encore une fois, il n'y a pas beaucoup que vous pouvez obtenir à partir de là. Le point est qu'il ya une TONNE de normes concurrentes pour des affichages de graphiques, et tandis que certains d'entre eux (VGA interfaces, par exemple) sont normalisés, beaucoup d'autres (pilote d'affichage des interfaces, par exemple) ne le sont PAS. Beaucoup de ce que X (et d'autres d'affichage pilotes de périphériques, tels que Windows ou autre) n'est spécifique de code de l'interface pour comment parler aux pilotes d'affichage; ils abstraction de la complexité de traiter avec les pilotes d'affichage. Les systèmes de fenêtrage, cependant, ont d'IMMENSES bibliothèques de compliqué et le code spécifique pour faire face avec les pilotes d'affichage; le fait que ces choses sont relativement transparent est une indication de la quantité de travail qu'ils ont mis dans ces choses au fil du temps.
Très primitive et de faire beaucoup d'hypothèses:
En réalité, vous utilisez
mmap
plutôt quewrite
et utilisent l'ioctl
pour interroger le mode de l'écran plutôt que de supposer 640xHHH 32bpp. Il y a aussi des endian, etc.Donc, dans la vraie réalité, vous pouvez utiliser une sorte de bibliothèque de code qui gère ce genre de chose pour vous.
Je suppose que vous pourriez peinture pour le programme de terminal que vous utilisez comme votre console. Tout ce que vous avez à faire est de comprendre que l'on est et de le regarder.
Oups j'ai supposé un terminal. 😛
Je pense que ce que vous êtes à la recherche de renseignements sur la façon d'écrire dans le tampon de trame. Le plus simple serait d'utiliser la SDL et de rendre à la mémoire de trame, ou d'utiliser GTK+ avec DirectFB, bien que cela va à l'encontre de votre édit sur les pas de l'aide de boîtes à outils ou cadres.
Votre meilleur ami serait
printf
. Fondamentalement, grille imprimée avec certains symbole ('.') signifie tous les pixels. Et grille imprimée avec le caractère d'espace blanc ( "" ), moyenne de tous les pixels de large.Par exemple c'est de cette façon que nous pouvons tirer
sine()
fonction dans la plaine du flux de sortie:Qui va générer de sortie: