api windows gdi c++, bmp monochrome->couleur?
Dernière réponse : dans Programmation
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...
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
Lassé par la pub ? Créez un compte
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
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
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.
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
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
Lassé par la pub ? Créez un compte
- Contenus similaires :
Tags :