Voilà, j'ai codé ma fonction qui crée un bitmask et la class du tableau hébergeant ce bitmask grâce à janoscoder, mais le problème c'est que même si je mets un pixel true lors de la création du bitmask, si j'affiche la valeur du pixel dans la fonction Main elle sera false.
Tous les bits sont false, alors qu'ils devraient tous être true, je comprend vraiment pas. Surtout que j'ai fais des tests lors de l'éxécution de la fonction et les pixels sont bien détectés.
#include <windows.h>
#include <vector>
#include <iostream>
using namespace std;
#define for if(1) for
///////////////////////////////////////////////////////////////////
class CBoolArray: public vector<bool>
{
short width;
short height;
public:
CBoolArray(short x, short y): width(x), height(y), vector<bool>(x*y){}
CBoolArray(short x, short y, bool value): width(x), height(y), vector<bool>(x*y, value){}
bool & operator () (short x, short y) {return operator[] (x+y*width);}
const bool & operator () (short x, short y) const {return operator[] (x+y*width);}
short GetWidth() {return width;}
short GetHeight() {return height;}
};
///////////////////////////////////////////////////////////////////
CBoolArray tab(1024, 768);
///////////////////////////////////////////////////////////////////
int CreateBitmask(CBoolArray bMask, char szBitmap[], short rtrans, short gtrans, short btrans)
{
HDC hdcImage;
HBITMAP hbm;
short width = bMask.GetWidth();
short height = bMask.GetHeight();
int pixelvalue = 0;
hbm = (HBITMAP) LoadImage(GetModuleHandle(NULL), szBitmap, IMAGE_BITMAP, width,
height, LR_CREATEDIBSECTION);
if (hbm == NULL)
hbm = (HBITMAP) LoadImage(NULL, szBitmap, IMAGE_BITMAP, width, height,
LR_LOADFROMFILE | LR_CREATEDIBSECTION);
if (hbm == NULL)
return 1;
hdcImage = CreateCompatibleDC(NULL);
SelectObject(hdcImage, hbm);
for (short y = 0; y < height; y++)
{
for (short x = 0; x < width; x++)
{
short r = 0;
short g = 0;
short b = 0;
pixelvalue = GetPixel(hdcImage, x, y);
r = (pixelvalue & 0xFF);
g = (pixelvalue & 0xFF00)>>8;
b = (pixelvalue & 0xFF0000)>>16;
if (r != rtrans || g != gtrans || b != btrans)
bMask(x, y) = true;
else
bMask(x, y) = false;
}
}
return 0;
}
///////////////////////////////////////////////////////////////////
int main()
{
CreateBitmask(tab, "bitmap.bmp", 255, 0, 255);
if (tab(50, 50) == true)
cout << "true" << endl;
if (tab(50, 50) == false)
cout << "false" << endl;
while (1)
{
}
return 0;
}