Le 09/11/2020
Prérequis
TP L1 image pbm machine linux (ubuntu, debian...)
langage C , bases, les chars, les tableaux de chars.
imagemagick
redirections sous linux
Makefile
But
Dessiner dans une image N&B
Cours sur le format pbm
Nous allons travailler sur le code précédent , image blanche 800 X 600
Dans un répertoire imagepbm
Dépôt de code
sudo apt update && sudo apt install git -y
# réglage du proxy pour l'utilisation de git (pour github) au lycée
git config --global http.proxy 10.0.0.1:3128 #si proxy comme au lycée uniquement!
git clone https://github.com/CarolineDorian/l2pbm.git
Actuellement vous avez donc un répertoire projet du nom de l2pbm
bruno@elliott:~/Works/langage_C$ tree imagepbm/
imagepbm/
└── l2pbm
├── l2pbm
├── l2pbm.c
└── Makefile
2 directories, 3 files
bruno@elliott:~/Works/langage_C$
l2pbm ,l' exécutable du projet obtenu en tapant la commande make
fichier source c : l2pbm.c
fichier Makefile : permettant de générer le projet à l'aide de la commande make
/******************************************/
/** Image blanche de 800 x 600 **/
/** V1.Bogt2020 LtDorian **/
/** 09/11/2020 **/
/******************************************/
#include<stdio.h>
#include<stdlib.h>
int main()
{
int compteur;
/* en tete de l'image */
printf("P1\n");
/* pas de commentaire */
printf("800 600\n");
/* génération des 480000 pixels */
for (compteur=0;compteur<800*600; compteur++)
printf("0\n");
return EXIT_SUCCESS;
}
/* faire un fichier pbm avec ce qui s'affiche */
/* ./imgblc > imgblc.pbm */
une image blanche de 800 x 600
dans un répertoire imgblc réaliser le projet suivant.
il faut s'aider du travail précèdent.
source : imgblc.c
à compiler comme vous savez faire .
donner la commande pour compiler ce code.
tester le code,
Comment récupérer le flux de caractère pour l'écran dans un fichier imgbc.pbm ?
faire un fichier pbm avec ce qui s'affiche
./imgblc > imgblc.pbm
file imgblc.pbm
qui va nous donner les caractéristiques du fichier (file)
regarder ensuite avec imagemagick (la commande display)
display imgblc.pbm
oui regarder ce même fichier avec vi ou nano
expliquer
une image noire de 800 x 600
dans un répertoire imgnoire réaliser le projet suivant.
à partir de l'exemple précédent donner un code qui donne une image noire.
un plan A B C D E F pour les colonnes
et 1 à 11 pour les lignes
On a mis 2 points dans ce tableau , trouvez les 1 !
Juste la pour expliquer comment on place des points noirs dans un tableau.
une image est un plan d’éléments binaire (bitmap).
En C nous avons le tableau a 1 dimension , une ligne:
char ligne[800]
cela représente une ligne 800 caractères, indicé de 0 à 799.
une image est une succession de ligne non?
char image[800][600]
c'est un tableau de char (octet) de 800 x 600 .
On imagine très bien que c'est notre image
Le projet sera dans un répertoire bitmap
/******************************************/
/** Image avec points de 800 x 600 **/
/** V1.Bogt2020 LtDorian **/
/** 09/11/2020 **/
/******************************************/
#include<stdio.h>
#include<stdlib.h>
#define largeur 800
#define hauteur 600
char image[largeur][hauteur]; /* representation de notre image */
int main()
{
int x,y;
/* remplir le tableau de '0' pour faire une image blanche */
for (y=0; y <hauteur ; y++) /* pour toutes les lignes */
for (x=0; x<largeur ; x++) /* pour chaque colonnes */
image[x][y]='0'; /* mettre un pixel blanc */
/* on place un point sur l'image coordonnées 320,456 */
image[320][456]='1'; /* il suffit de mettre un 1 dans la bonne case ! */
/* on place un point sur l'image coordonnées 501,322 */
image[501][322]='1';
/*Afficher l'image Pbm en ASCII*/
/* en tete de l'image */
printf("P1\n");
/* pas de commentaire */
/* on donne les coordonnées en décimal dans l’entête */
printf("%d %d\n",largeur,hauteur);
/* on place tous les pixels */
for (y=0; y <hauteur ; y++) /* pour toutes les lignes */
for (x=0; x<largeur ; x++) /* pour chaque colonnes */
printf ("%c \n",image[x][y]);
return EXIT_SUCCESS;
}
/* faire un fichier pbm avec ce qui s'affiche */
/* ./bitmap > bitmap.pbm */
Avez vous vu les 2 points ???
on désire dessiner des axes (une croix) sur notre image.
pt1 (399,0) à pt2 (399,599) pour l'axe X
pt3 (0,299) à pt4 (799,299)
pour avoir cette image on peut remplir à la main chaque pixel ...
image[399][0]='1';
image[399][1]='1';
image[399][2]='1';
...
etc
image[399][799]='1';
franchement on a inventer l'ordinateur pour ne pas faire de taches fastidieuses trouver une solution autre pour réaliser les axes.
proposer une solution.