Texte et image.bmp

Fermé
Hymm75 - 10 janv. 2016 à 21:02
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
}