Modifier les bits de poids faible
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 :oops:
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.
Code:
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]);
}
} |
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.
merci d'avance ! :ccool: