Bonjour j'ai un exercice à faire et j'aurez besoins d'aide
Notre professeur nous à donner un image .bmp avec un message caché dedans (Chaque pixels contient un caractère)
En gros, imaginons le pixel 0x00948991
en binaire est égale à 00000000 10010100(Rouge) 10001001 (Vert)10010001(Bleu)
le caractère est caché dans des bits spécifique de chaque couleurs RVB comme si dessus,
si je l'ai met dans l'ordre ça fera 01 001 100 qui est égale a 4C en hexadécimal donc le caractère 'l'
Il nous demande donc de créer un programme c++ affin de retrouver le message caché dans l'image
Voici mon programme, et je suis bloquer a la fonction révéler
Pouvez vous m'aider ? Merci
/***********************************************************
Décodage du texte inclus dans une image
PROGRAMME A COMPLETER
**********************************************************/
#include <iostream>
#include <conio.h>
#include <fstream>
#include "gestionImagesBMP24bits.h"
using namespace std; // espace de nommage standard
/************************************************************
Sauvegarde d'une chaine de caracteres dans un fichier texte
NE PAS MODIFIER LE CODE DE CETTE FONCTION
***********************************************************/
bool sauverMessage(char * message, char *nomFichierTexte)
{
ofstream fichier(nomFichierTexte);
int i = 0;
if (!fichier.is_open()) return false;
while (message[i] != 0) // tant qu'on n'a pas atteint la fin du message
fichier << message[i++];
fichier.close();
return true;
}
/*********************************************************
Renvoi du niveau de rouge d'un pixel codé en 24 bits
NE PAS MODIFIER LE CODE DE CETTE FONCTION
********************************************************/
unsigned long niveauDeRouge(unsigned long pixel)
{
pixel >>= 16;
pixel &= 0xFF;
return pixel;
}
/*********************************************************
Renvoi du niveau de vert d'un pixel codé en 24 bits
NE PAS MODIFIER LE CODE DE CETTE FONCTION
********************************************************/
unsigned long niveauDeVert(unsigned long pixel)
{
pixel >>= 8;
pixel &= 0xFF;
return pixel;
}
/*********************************************************
Renvoi du niveau de bleu d'un pixel codé en 24 bits
NE PAS MODIFIER LE CODE DE CETTE FONCTION
********************************************************/
unsigned long niveauDeBleu(unsigned long pixel)
{
pixel &= 0xFF;
return pixel;
}
/*********************************************************
Extraction du message à partir des pixels
le nombre de pixels est le 3ème argument de cette fonction
Vous devez écrire le code de cette fonction pour stocker
dans la chaine de caractères message le texte que vous
allez extraire de l'image (tableau pixels)
********************************************************/
void reveler(char *message, unsigned long *pixels, int nbPixels)
{
int i = 0;
char test;
unsigned long bleu, vert, rouge;
do
{
bleu = niveauDeBleu(pixels[i]);
vert = niveauDeVert(pixels[i]);
rouge = niveauDeRouge(pixels[i]);
bleu <<= 16;
vert <<= 8;
} while (message[i] = 0);
}
/*********************************************************
Fonction principale
********************************************************/
int main()
{
unsigned long *pixels = NULL;
char message[10000 + 1];
char nomImage[100 + 1], nomFichierTexte[100 + 1];
cout << "Rentre le nom de l'image qui contient le texte cache : ";
gets_s(nomImage);
cout << "Rentre le nom du fichier texte qui va contenir le texte retrouve ";
gets_s(nomFichierTexte);
int nbPixels = chargerImage(nomImage, pixels);
reveler(message, pixels, nbPixels);
sauverMessage(message, nomFichierTexte);
_getch(); // on attend l'appui sur une touche
return 0; // fin du programme
}