Bonjour j'ai un exercice ou je dois créer une fonction permettant de cacher un code simple dans des pixel d'une image numérique. Bon ce n'est que un énoncer pour débutant je suis sur que en vrai je devrais procéder autrement
la prof me donne la fonction lsb je ne doit que lire ce qu'elle à besoin et ce qu'elle va faire. J'ai fait l'exercice mais je ne suis pas sur de mon code. J'ai surement mal utiliser les pointeurs d'où je viens vous demander de me faire remarquer mes bourdes.
hormis la procédure lsb tout le code vient de moi. Je ne suis pas habitué à manier les pointeur mais c'est le but de l'exercice.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 typedef struct { char bleu; char rouge; char vert } pixel; typedef struct { image pixel[12] } tabImages; //pré: c pointe sur un octet et x == 0 ou x == 1 //post: x est inchangé et le bit de poids faible de *c est mis à x, les autres bits de *c sont inchangés. void lsb(char* c, char x) { if(x == 1) *c = *c | x; else *c = *c & 0xFE; } //pré: tabImage contient un tableau de pixel de 12 pixel et i est un entier. //post: tabImage contient des pixels modifié et int est inchangés //résultat: les bit de int sont inserer dans le lsb des pixel de tabImage void modification( struct tabImages, int i) { char tabBit[32]; int cpt; int modulo=1; for(cpt=0;cpt<32;cpt++){ tabBit[cpt] = (i & modulo); //on stock les bits dans un tableau (32 bit == 32 case) modulo *= 2; //modulo 1..2..4..8.. } int cptP; //compteur des pointeurs par pixel cpt=0; while(cpt<12){ char * couleur = tabImages[cpt].image.rouge; char * (couleur+1) = tabImages[cpt].image.vert; char * (couleur+2) = tabImages[cpt].image.bleu; cpt++; for(cptP=0;cptP<3;cptP++){ color = *(couleur+cptP); lsb(color,tabBit[cpt]); } }
merci d'avance !
Partager