2 réponses
AIDEZ MOI SIL VOUS PLAIT : jai mis beaucoup de code mais il n'y a que la fonction stegano_codage qui me pose problème pour le moment!!!
je vous fai passer mon "module" de stegano qui est appelé par mon main :
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <string.h>
#ifndef BMP_H
#define BMP_H
#include "bmp.h"
#endif
/**** Projet de stéganographie Maud BESSON (licence informatique octobre 2004)*/
#define N 999999
struct SVect {
int tab[N];
int taille;
int nb_element;
};
typedef struct SVect vect;
int init_vect (vect T, int taille){
if(N < taille) return 0;
T.taille = N;
T.nb_element = 0;
return 1;
}
int ajoute_int (vect T, int element){
T.tab[T.nb_element] = element;
T.nb_element ++;
if ( T.nb_element == T.taille){
return 0;
}
return 1;
}
int passage_binaire (int x){
int r;
int z = 1;
int b = 0;
while (x > 0){
r = x % 2;
x = x / 2;
b = b + (r * z);
}
return b;
}
int codage_char(char c){
int x = 0;
if (c >= 'a' && c <= 'z'){
x = c - 'a'; /* codage des minuscules*/
}
else{
if( c >= 'A' && c <= 'Z'){
x = c - 'A' + 26; /*codage des majuscules*/
}
else{ /* codage des caractères spéciaux*/
if(c == '.') x = 53;
if(c == ',') x = 54;
if(c == ';') x = 55;
if(c == '?') x = 56;
if(c == '!') x = 57;
if(c == ' ') x = 58;
if(c == '(') x = 59;
if(c == ')') x = 60;
}
}
x = passage_binaire (x);
return x;
}
/* insert le texte dans un vecteur */
vect trans_string_vect (char *texte){
vect code;
init_vect (code, ((strlen (texte)) * 9));
int j, r;
int i = 0;
int a;
while( i <= code.taille){
j = codage_char(texte[i]); /*j sera déja en binaire */
for(a = 0; a<=6; a++){
if(j != 0){
r = j % 10;
j = j / 10;
ajoute_int(code, r);
}
else{
ajoute_int(code, 0); /*** un caractère est codé par 6 chiffres je complète donc avec des zéro ***/
}
}
}
return code;
}
/* Calcul la moyenne des constante rouge des pixel entourant celui codé */
int moyenne_pixel_rouge (bitmap b1, int i, int j){
int i2 = i -1;
int j2 = j -1;
int mrouge = 0;
while( i2 <= i+1){
if (i2 == i){
mrouge = mrouge + getRPixel (b1, i, (j-1)) + getRPixel (b1, i,(j+1));
}
else{
while (j2 <= j+1){
mrouge = mrouge + getRPixel (b1, i2, j2);
j2 ++;
}
}
i2 ++;
j2 ++;
}
mrouge = mrouge / 8;
return mrouge;
}
/* Calcul la moyenne des constante vert des pixel entourant celui codé */
int moyenne_pixel_vert (bitmap b1, int i, int j){
int i2 = i -1;
int j2 = j -1;
int mvert = 0;
while( i2 <= i+1){
if (i2 == i){
mvert = mvert + getGPixel (b1, i, (j-1)) + getGPixel (b1, i,(j+1));
}
else{
while (j2 <= j+1){
mvert = mvert + getGPixel (b1, i2, j2);
j2 ++;
}
}
i2 ++;
j2 ++;
}
mvert = mvert / 8;
return mvert;
}
/* Calcul la moyenne des constante bleu des pixel entourant celui codé */
int moyenne_pixel_bleu (bitmap b1, int i, int j){
int i2 = i -1;
int j2 = j -1;
int mbleu = 0;
while( i2 <= i+1){
if (i2 == i){
mbleu = mbleu + getBPixel (b1, i, (j-1)) + getBPixel (b1, i,(j+1));
}
else{
while (j2 <= j+1){
mbleu = mbleu + getBPixel (b1, i2, j2);
j2 ++;
}
}
i2 ++;
j2 ++;
}
mbleu = mbleu / 8;
return mbleu;
}
/* fonction pour changer les valeur des pixel*/
bitmap codeimage (bitmap b1, bitmap b2, vect code, int i, int j){
int mrouge = moyenne_pixel_rouge (b1, i, j);
int mvert = moyenne_pixel_vert (b1, i, j);
int mbleu = moyenne_pixel_bleu (b1, i, j);
int nb = code.nb_element;
if (code.nb_element >= 3){
int r = code.tab[nb] + mrouge ;
int g = code.tab[nb - 1] + mvert;
int b = code.tab[nb - 2] + mbleu;
code.nb_element = nb - 3;
/* insertion ds nouvelle valeur*/
putRPixel (b2, i, j, r);
putGPixel (b2, i, j, g);
putBPixel (b2, i, j, b);
}
else {
if(code.nb_element == 2){
int r = code.tab[nb] + mrouge ;
int g = code.tab[nb - 1] + mvert;
int b = 2 + mbleu; /* ajoute 2 a la moyenne pour montrer que c'est la fin du texte */
putRPixel (b2, i, j, r);
putGPixel (b2, i, j, g);
putBPixel (b2, i, j, b);
}
else{
if (code.nb_element == 1){
int r = code.tab[nb] + mrouge;
int g = 2 + mvert; /* ajoute 2 a la moyenne pour montrer que c'est la fin du texte */
putRPixel (b2, i, j, r);
putGPixel (b2, i, j, g);
}
}
}
return b2;
}
/****** vérifier pour ajouté deux quan on fini par un multipe de 3 ***/
bitmap stegano_codage (bitmap b1, int h, int w){
texte = (char*) malloc (h*w*(sizeof(char))); */
printf ("Entrer votre texte : ");
char texte[400];
fgets(texte, 1000, stdin);
/* création d'un tableau contenant le texte en code binaire ***/
vect code;
trans_string_vect (texte);
bitmap b2; /* nouvelle bitmap */
/** codage de l'image ***/
int i = 1;
int j = 1;
int s = 1; /** indique si on parcour l'image de bas en haut (1) ou de haut en bas (0) */
while (i < (h - 2)){
if (s == 1){
while (j < h-2){
b2 = codeimage (b1, b2, code, i, j);
j = j+3;
}
i = i + 3;
j = h - 2;
s = 0;
}
else{
while (j > 1){
b2 = codeimage (b1, b2, code, i, j);
j = j - 3;
}
i = i + 3;
j = 1;
s = 1;
}
}
return b1;
}
je vous fai passer mon "module" de stegano qui est appelé par mon main :
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <string.h>
#ifndef BMP_H
#define BMP_H
#include "bmp.h"
#endif
/**** Projet de stéganographie Maud BESSON (licence informatique octobre 2004)*/
#define N 999999
struct SVect {
int tab[N];
int taille;
int nb_element;
};
typedef struct SVect vect;
int init_vect (vect T, int taille){
if(N < taille) return 0;
T.taille = N;
T.nb_element = 0;
return 1;
}
int ajoute_int (vect T, int element){
T.tab[T.nb_element] = element;
T.nb_element ++;
if ( T.nb_element == T.taille){
return 0;
}
return 1;
}
int passage_binaire (int x){
int r;
int z = 1;
int b = 0;
while (x > 0){
r = x % 2;
x = x / 2;
b = b + (r * z);
}
return b;
}
int codage_char(char c){
int x = 0;
if (c >= 'a' && c <= 'z'){
x = c - 'a'; /* codage des minuscules*/
}
else{
if( c >= 'A' && c <= 'Z'){
x = c - 'A' + 26; /*codage des majuscules*/
}
else{ /* codage des caractères spéciaux*/
if(c == '.') x = 53;
if(c == ',') x = 54;
if(c == ';') x = 55;
if(c == '?') x = 56;
if(c == '!') x = 57;
if(c == ' ') x = 58;
if(c == '(') x = 59;
if(c == ')') x = 60;
}
}
x = passage_binaire (x);
return x;
}
/* insert le texte dans un vecteur */
vect trans_string_vect (char *texte){
vect code;
init_vect (code, ((strlen (texte)) * 9));
int j, r;
int i = 0;
int a;
while( i <= code.taille){
j = codage_char(texte[i]); /*j sera déja en binaire */
for(a = 0; a<=6; a++){
if(j != 0){
r = j % 10;
j = j / 10;
ajoute_int(code, r);
}
else{
ajoute_int(code, 0); /*** un caractère est codé par 6 chiffres je complète donc avec des zéro ***/
}
}
}
return code;
}
/* Calcul la moyenne des constante rouge des pixel entourant celui codé */
int moyenne_pixel_rouge (bitmap b1, int i, int j){
int i2 = i -1;
int j2 = j -1;
int mrouge = 0;
while( i2 <= i+1){
if (i2 == i){
mrouge = mrouge + getRPixel (b1, i, (j-1)) + getRPixel (b1, i,(j+1));
}
else{
while (j2 <= j+1){
mrouge = mrouge + getRPixel (b1, i2, j2);
j2 ++;
}
}
i2 ++;
j2 ++;
}
mrouge = mrouge / 8;
return mrouge;
}
/* Calcul la moyenne des constante vert des pixel entourant celui codé */
int moyenne_pixel_vert (bitmap b1, int i, int j){
int i2 = i -1;
int j2 = j -1;
int mvert = 0;
while( i2 <= i+1){
if (i2 == i){
mvert = mvert + getGPixel (b1, i, (j-1)) + getGPixel (b1, i,(j+1));
}
else{
while (j2 <= j+1){
mvert = mvert + getGPixel (b1, i2, j2);
j2 ++;
}
}
i2 ++;
j2 ++;
}
mvert = mvert / 8;
return mvert;
}
/* Calcul la moyenne des constante bleu des pixel entourant celui codé */
int moyenne_pixel_bleu (bitmap b1, int i, int j){
int i2 = i -1;
int j2 = j -1;
int mbleu = 0;
while( i2 <= i+1){
if (i2 == i){
mbleu = mbleu + getBPixel (b1, i, (j-1)) + getBPixel (b1, i,(j+1));
}
else{
while (j2 <= j+1){
mbleu = mbleu + getBPixel (b1, i2, j2);
j2 ++;
}
}
i2 ++;
j2 ++;
}
mbleu = mbleu / 8;
return mbleu;
}
/* fonction pour changer les valeur des pixel*/
bitmap codeimage (bitmap b1, bitmap b2, vect code, int i, int j){
int mrouge = moyenne_pixel_rouge (b1, i, j);
int mvert = moyenne_pixel_vert (b1, i, j);
int mbleu = moyenne_pixel_bleu (b1, i, j);
int nb = code.nb_element;
if (code.nb_element >= 3){
int r = code.tab[nb] + mrouge ;
int g = code.tab[nb - 1] + mvert;
int b = code.tab[nb - 2] + mbleu;
code.nb_element = nb - 3;
/* insertion ds nouvelle valeur*/
putRPixel (b2, i, j, r);
putGPixel (b2, i, j, g);
putBPixel (b2, i, j, b);
}
else {
if(code.nb_element == 2){
int r = code.tab[nb] + mrouge ;
int g = code.tab[nb - 1] + mvert;
int b = 2 + mbleu; /* ajoute 2 a la moyenne pour montrer que c'est la fin du texte */
putRPixel (b2, i, j, r);
putGPixel (b2, i, j, g);
putBPixel (b2, i, j, b);
}
else{
if (code.nb_element == 1){
int r = code.tab[nb] + mrouge;
int g = 2 + mvert; /* ajoute 2 a la moyenne pour montrer que c'est la fin du texte */
putRPixel (b2, i, j, r);
putGPixel (b2, i, j, g);
}
}
}
return b2;
}
/****** vérifier pour ajouté deux quan on fini par un multipe de 3 ***/
bitmap stegano_codage (bitmap b1, int h, int w){
texte = (char*) malloc (h*w*(sizeof(char))); */
printf ("Entrer votre texte : ");
char texte[400];
fgets(texte, 1000, stdin);
/* création d'un tableau contenant le texte en code binaire ***/
vect code;
trans_string_vect (texte);
bitmap b2; /* nouvelle bitmap */
/** codage de l'image ***/
int i = 1;
int j = 1;
int s = 1; /** indique si on parcour l'image de bas en haut (1) ou de haut en bas (0) */
while (i < (h - 2)){
if (s == 1){
while (j < h-2){
b2 = codeimage (b1, b2, code, i, j);
j = j+3;
}
i = i + 3;
j = h - 2;
s = 0;
}
else{
while (j > 1){
b2 = codeimage (b1, b2, code, i, j);
j = j - 3;
}
i = i + 3;
j = 1;
s = 1;
}
}
return b1;
}
[GORe]Donald
Messages postés
8
Date d'inscription
jeudi 14 octobre 2004
Statut
Membre
Dernière intervention
9 janvier 2007
14 oct. 2004 à 16:55
14 oct. 2004 à 16:55
as tu bien ecri
#include <stdio.h>
fgets(NomVariable,TailleVariable-1,stdin);
??
stdin est important!!
sinon pour une chaine de caractère je ne peu malheuresement pas t'aider!!
désolé
#include <stdio.h>
fgets(NomVariable,TailleVariable-1,stdin);
??
stdin est important!!
sinon pour une chaine de caractère je ne peu malheuresement pas t'aider!!
désolé