Se connecter avec
S'enregistrer | Connectez-vous
Votre question

api windows gdi c++, bmp monochrome->couleur?

Tags :
  • Bitmap
  • Programmation
Dernière réponse : dans Programmation
Partagez
21 Février 2008 14:40:13

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...

Autres pages sur : api windows gdi bmp monochrome couleur

21 Février 2008 19:44:31

les couleurs sont représentées par 3 paramètres. En monochrome, il n'y a plus qu'un paramètre. Le passage de la couleur au monochrome est donc une projection (au sens mathématique). Donc, tu ne peux pas retrouver les couleurs.
22 Février 2008 09:14:06

Non, je veu qu'elle reste en noir et blanc mais je voudrai que les propriétés de l'image passent en couleur.

je dois faire un plugin qui scan une image en monochrome qui fai une analyse graphique en couleur qui s'affiche sur l'image. Le problème c'est qu'avec une image en couleur ça marche nickel alors aqu'avec une image en noir et blanc je perd les couleurs de l'analyse à chaque rafraichissement de la fenêtre.

En gros mon code ça donne :

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);
//hBmp_Memory2 = (HBITMAP)LoadImage(NULL,"C:\\TEST.BMP",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
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;
}
}
}

La ligne commenté dans la fonction InitialiseImageMemoire est celle qui charge l'image en couleur avec elle ça marche nickel.

PS:Tu vois bien que j'ai essayé, en fait, ça fait une semaine que je trime dessus et j'ai pas l'habitude de demander de l'aide sauf quand j'en ai vraiment de besoin et que j'y arriverai pas tout seul
Contenus similaires
22 Février 2008 19:55:23

Je n'ai pas compris.
Tu n'a pas des screen shot pour qu'on comprenne mieux ?
Ton analyse graphique, c'est quoi exactement ? des statistiques sur ton image ?
25 Février 2008 10:21:02

Mon analyse consiste juste à tracer des arcs de cercles de différentes couleurs sur mon image monochrome, mais je voudrai éviter de retracer mes arcs de cercle à chaque rafraichissement de la fenêtre donc j'incorpore directement mes tracés à l'image bitmap via mon context de mémoire mais, c'est la que j'ai un problème car mon image étant monochrome, je pred la couleur de mes tracés quand je les sauvegardes dans le context mémoire.
25 Février 2008 20:32:36

Ok, je comprends.
C'est normal tu utilises le contexte graphique de l'image. La bonne méthode c'est de faire l'affichage au rafraichissement d'écran (ce que tu veux éviter :)  ).
Maintenant, tu peux voir comment convertir le contexte graphique. Sinon, tu peux faire un autre contexte graphique et tu y copies ton image avec un bitblt
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS