Bmp monochrome->couleur?

Fermé
freehair Messages postés 3 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 21 février 2008 - 21 févr. 2008 à 09:47
freehair Messages postés 3 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 21 février 2008 - 21 févr. 2008 à 11:40
Bonjour,

Je cherche à passer une image bitmap monochrome en couleur dans un programme cpp utilisant l'api windows GDI.

Si quelqu'un serai comment faire, ce serai vraiment magique.

Merci d'avance

PS:Si vous avez besoin de plus de détails, n'hésitez pas à demander...
A voir également:

4 réponses

Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
21 févr. 2008 à 10:36
quel est ton souci exactement ?
je voi plusieurs source de problèmes dans un tel programme.
1- le codage d'ouverture et d'enregistrement de fichiers bmp ;
2- algorithme de transformation de l'image en couleur ;
3- problème de format : comment doivent se présentés les données en bmp couleur.
Dit nous dans quel but tu veux faire cette transformation aussi, qu'attends tu du résultat final.
0
freehair Messages postés 3 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 21 février 2008
21 févr. 2008 à 10:51
En fait mon programme doit effectué un scan monochrome, puis je dois afficher des arcs de cercles, des rectangles, enfin bref plein de forme géométrique qui s'affiche en fonction d'une analyse.
Tout marche nickel sauf que je perd la couleur de l'image lors d'un rafraichissement de la fenêtre.
J'ai essayé avec une image scanner en couleur, ça marche impeccable mais des que je passe une image monochrome, je perd la couleur.

Mon code en gros :

void InitialiseImageMemoire()//Initialise le context mémoire avec l'image BMP du disque
{
hDC_Area = (HDC)PA_GetUpdateHDC();
hDC_Memory =CreateCompatibleDC(hDC_Area);
SetStretchBltMode(hDC_Memory,HALFTONE);
hBmp_Memory = (HBITMAP)LoadImage(NULL,"C:\\TEST4.BMP",IMAGE_BITMAP,0,0,LR_LOADFROMFILE+LR_CREATEDIBSECTION);

GetObject(hBmp_Memory, sizeof(BmpTmp), &BmpTmp);//BmpTmp->BITMAP
DrawState(hDC_Memory,NULL,NULL,(LPARAM)hBmp_Memory,0,0,0,0,0,DST_BITMAP);
SelectObject(hDC_Memory, hBmp_Memory);
bImageChargee = true;
}

void RedessineImageZone(PA_PluginParameters params)//Affiche l'image dans la fenêtre 4d et affiche les dessins effectués
{

if(bImageChargee)
{
ReleaseDC((HWND)PA_GetHWND(0L), hDC_Area);
ConvertPA_RectToRect( PA_GetAreaRect(params), &AreaRECT);
DrawState(hDC_Area,NULL,NULL,(LPARAM)&BmpTmp,0,0,0,0,0,DST_BITMAP+DSS_NORMAL);
SetStretchBltMode(hDC_Area,HALFTONE);
StretchBlt(hDC_Area, 0, 0, AreaRECT.right-AreaRECT.left, AreaRECT.bottom-AreaRECT.top, hDC_Memory, 0, 0, BmpTmp.bmWidth, BmpTmp.bmHeight,SRCCOPY);
if(bArcTracé==false)
{
DessineArc(RGB(255,0,0),10,250,0,100,true);
DessineCercle(RGB(0,255,0),10,50,true);
DessineCercle(RGB(145,212,56),10,300,true);
POINT hg,bd;
hg.x = 50;
hg.y = 200;
bd.x= 300;
bd.y= 50;
DessineRect(RGB(56,210,124),10,hg,bd,false);
int i,j;
for(i=(AreaRECT.left+AreaRECT.right)/2-2;i<=(AreaRECT.left+AreaRECT.right)/2+2;i++)
{
for (j=(AreaRECT.bottom+AreaRECT.top)/2-2;j<=(AreaRECT.bottom+AreaRECT.top)/2+2;j++)
{
ChangePixel(RGB(250,0,250),i,j);
}
}
StretchBlt(hDC_Memory, 0, 0, AreaRECT.right-AreaRECT.left, AreaRECT.bottom-AreaRECT.top, hDC_Area , 0, 0, BmpTmp.bmWidth, BmpTmp.bmHeight,SRCCOPY);
bArcTracé=true;
}
}
}


Merci d'avoir répondu aussi rapidement
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
21 févr. 2008 à 11:33
OK, au moins maintenant le problème est bien posé.
Je ne comprends rien à la programmation graphique de windows.
Il y a des chances pour qu'à un moment onné tu passe en argument les propriété des ton bmp N&B, et que du coup il bascule l'affichage en mode monochromatique.
0
freehair Messages postés 3 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 21 février 2008
21 févr. 2008 à 11:40
ben en fait, je vois pas du tout ou, j'ai essayé en changeant juste le chemin d'acces dans la commande

hBmp_Memory = (HBITMAP)LoadImage(NULL,"C:\\TEST4.BMP",IMAGE_BITMAP,0,0,LR_LOADFROMFILE+LR_CREA­TEDIBSECTION);

pour y mettre le chemin d'acces de la même image que j'avai passé en couleur sous paint et là ça marche nickel.

En tout cas que tu t'y connaisse ou pas merci d'avoir répondu et d'avoir essayé
0