#include <string>
using std::string;
#include <vector>
using std::vector;

#include "type_image.h"


// Fonction qui convertit un message sous forme de chaîne de caractère
// en vecteur de bits

void CharToBit(const string& Message, vector<bool>& LesBits)
{
	bool Temp;

	for (int i = 0; i < Message.length(); i++)
	{
		for (int j = 0; j < 8; j++)
		{
			Temp = (((Message[i] >> (7 - j)) & 1) != 0);

			LesBits.push_back(Temp);
		}
	}
}


// Fonction qui écrit un message dans l'image
void type_image::BitToImage(const vector<bool>& LesBits)
{
	int i;

	for (i = 0; i < LesBits.size(); i++)
	{
		PtrImage[i] = (((PtrImage[i] >> 1) << 1)| (LesBits[i] ? 1:0));
	}

	for (int j = 0; j < 8; j++)
	{
		PtrImage[i + j] = ((PtrImage[i+j] >> 1) << 1);
	}
}


// Fonction qui convertit un vecteur de bits en message sous forme de
// chaîne de caractère

void BitToChar(const vector<bool>& LesBits, string& Message)
{
	char Temp;

	for (int i = 0; i < LesBits.size() / 8; i++)
	{
		Temp = 0;

		for (int j = 0; j < 8; j++)
		{
			Temp += ((LesBits[8*i+j] ? 1:0) << (7 - j));
		}

		Message += Temp;

		if (Temp == 0)
			return;
	}
}


// Fonction qui lit le message dans l'image
void type_image::ImageToBit(vector<bool>& LesBits)
{
	for (int i = 0; i < Height*Width*3; i++)
		LesBits.push_back( (PtrImage[i] & 1) != 0);
}