Bonjour,
Voila mon problème, j'ai créé une application MDI avec les mfc, j'affiche une image bitmap dans une fenetre, cependant, lorsqu'on redimensionne la taille de la fenêtre, la fonction OnDraw est appellé très souvent et réaffiche l'image aussi très souvent, du coup il y a un effet de clipping (je ne suis pas sur que ce sois le mot). Je sais qu'il est possible de faire en sorte de modifier le contexte de periferique (CDC *pDC) à chaques raffraichissement de de l'ecran(et non a chaque fois que la fonction ondraw est affiché) ce qui résoudrait le problème, seulement je ne trouve pas la sintaxe pour faire cela. si quelqu'un a la solution je l'en remercie d'avance (toute autre solution pour résoudre mon problème de clignotement est aussi la bienvenue).
je met le morceau de code que j'utilise: (je ne cherche pas specialement à optimiser le code au niveau de la vitesse d'affichage, c'est une application plutot scientifique, cependant le fait que l'image clignotte un peu a certains moment fait pas très propre lors de présentations donc j'aimerai bien corriger ce problème)
void CViewerView::OnDraw(CDC* pDC)
{
CViewerDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
CvImage * working_image=((CViewerDoc *)GetDocument())->GetImage();
if(working_image!=NULL)
{
DisplayImage(working_image, pDC) ;
}
// TODO : ajoutez ici le code de dessin pour les données natives
}
void CViewerView::DisplayImage( CvImage * in_pCvImage, CDC *pDC)
{
// Create BITMAPINFO
BITMAPINFO bmpI;
ZeroMemory(&bmpI.bmiHeader, sizeof(BITMAPINFOHEADER));
bmpI.bmiHeader.biWidth = in_pCvImage->GetWidth();
bmpI.bmiHeader.biHeight = -in_pCvImage->GetHeight();
bmpI.bmiHeader.biPlanes = 1;
bmpI.bmiHeader.biBitCount = 24;
bmpI.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
int status = SetDIBitsToDevice(pDC->GetSafeHdc(),
0, 0,
in_pCvImage->GetWidth(),in_pCvImage->GetHeight(),
0, 0,
0, in_pCvImage->GetHeight(),
in_pCvImage->GetImageData(),
&bmpI,
DIB_RGB_COLORS);
}