Jean-Jacques BOURDIN
jj NOSPAM @ up8.edu
(enlever le NO Spam)
Compression d'Images
Nous nommons champ de bits une structure où tous les champs sont des entiers non signées et sont accompagnés du nombre de bits qu’ils utilisent.
Nous montrons également l’effet lié aux décalages. Voici un exemple avec des effets de dépassement :
#include <stdio.h> struct champs { unsigned int a: 1; unsigned int b: 1; unsigned int c: 1; } ; typedef struct champs champs; typedef unsigned int uint; struct champ2 { uint x: 1; } ; typedef struct champ2 champ2; void fct () { champs c; champ2 f; c.a = 1; c.b = 2; c.c = 3; f.x = 1; printf("%2u %2u %2u %2d\n\n\n", c.a, c.b, c.c, f.x); } int oups (int a, int b) { int c; c = 0; while (a) { if (a & 0x01) c += b; b <<= 1; a >>= 1; } return c; } int main () { int i, j; fct (); printf(" 1 2 3 4 5 6 7 8 9\n"); for (i = 2; i < 10; i++) { printf(" %2d ", i); for (j = 1; j < 10; j++) printf("%3d ", oups(i,j)); printf("\n"); } } white.home: gcc champs.c champs.c:21:7: warning: implicit truncation from ’int’ to bit-field changes value from 2 to 0 [-Wbitfield-constant-conversion] c.b = 2; ^ ~ champs.c:22:7: warning: implicit truncation from ’int’ to bit-field changes value from 3 to 1 [-Wbitfield-constant-conversion] c.c = 3; ^ ~ 2 warnings generated. white.home: a.out 1 0 1 1 1 2 3 4 5 6 7 8 9 2 2 4 6 8 10 12 14 16 18 3 3 6 9 12 15 18 21 24 27 4 4 8 12 16 20 24 28 32 36 5 5 10 15 20 25 30 35 40 45 6 6 12 18 24 30 36 42 48 54 7 7 14 21 28 35 42 49 56 63 8 8 16 24 32 40 48 56 64 72 9 9 18 27 36 45 54 63 72 81 white.home: |
Lois de Grassmann et CIE 1930
Vision et définition visible
void Mouse(int button, int state, int x, int y){ switch(button){ case GLUT_LEFT_BUTTON: break; case GLUT_MIDDLE_BUTTON: break; case GLUT_RIGHT_BUTTON: break; } glutPostRedisplay(); } |
int main(int argc, char **argv) { if (argc<2) { fprintf(stderr, "Usage : palette nom_de_fichier\n"); exit(0); } glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); glutInitWindowSize(640,480); glutInitWindowPosition(0, 0); glutCreateWindow("VPUP8"); Init(argv[1]); glutCreateMenu(menuFunc); glutAddMenuEntry("Informations", 0); glutAddMenuEntry("Ouvrir", 3); glutAddMenuEntry("Sauver", 4); glutAddMenuEntry("Noir et Blanc", 6); glutAddMenuEntry("Quit", 5); glutAttachMenu(GLUT_LEFT_BUTTON); glutDisplayFunc(Display); glutReshapeFunc(Reshape); glutKeyboardFunc(Keyboard); glutMouseFunc(Mouse); glutMainLoop(); return 1; } |
Vous trouverez également sur la page de M. Belhadj des exemples simples d’utilisation de la SDL et de GL4Dummies. Notamment son cours de programmation graphique 2D.
Il vous faut également des images en ppm, en voici quelques unes.Récupérer ces fichiers et les installer, objectif : être en mesure de lire un fichier image et l‘afficher.
Faire une fonction qui modifie l‘image en remplaçant la couleur de chaque pixel par le gris moyen correspondant.
Vous trouvez plus détails sur la page du TP
En Informatique Graphique il faut commencer par séparer les composantes bleue rouge et verte (il y a des chances que les rouges de deux pixels voisins soient proches, par exemple).
Avec un tel système, si on réduit à, par exemple, 64 couleurs, il suffit de 6 bits pour coder un nombre entre 0 et 63. Donc pour chaque pixel on n'a plus 24 mais 6 bits à coder, donc on divise la taille de l'image par quatre, à peu près (il faut mémoriser aussi la table).
On commencera par parcourir l‘image et créer la CLUT de toutes les couleurs présentes.
ca = ca + (cp - ca) * nbclut / nbp
Quelques références, comme :
La présentation que je vais expliquer le 20/11/24.
Un programme d’affichage de surface
NURBS, qui tourne sur ma machine
là,
la
version originale de programme de surface
NURBS.
On remarque en particulier ces trois lignes :
GLfloat knots[8] = {0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0}; gluBeginSurface(theNurb); gluNurbsSurface(theNurb, 8, knots, 8, knots, 4 * 3, 3, &ctlpoints[0][0][0], 4, 4, GL_MAP2_VERTEX_3); gluEndSurface(theNurb); |
Pour vous parler d’Illumination, nous allons partir d’une série de diapositives faites par Venceslas Biri et que vous pouvez trouver sur cette page.
Puis nous regarderons quelques diapositives sur la résolution d’équations linéaires, tirées de ce cours de HEC Montréal.
Mieux, venus de l’INSA de Rouen ces deux cours :
Dernière mise à jour : 21/10/2024 (13h)