Bonjour à tous, je vous solicite au sujet d'un problème que je rencontre sur mon appli de simulation numérique (MFC/C++/OpenGL).
Quand j'essaie de capturer l'image de ma scène OpenGL après avoir demandé via un CFileDialog le chemin d'enregistrement de l'image, ma boite de dialogue apparait sur l'image :
Ci-joint le code fautif :
En fait c'est comme si la lecture de la zone de pixel commençait avant la fermeture de la fenêtre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 CGLDoc* pDoc = GetDocument(); CFileDialog save(FALSE,"bmp",pDoc->GetPathName(),OFN_OVERWRITEPROMPT |OFN_HIDEREADONLY,"BMP files (*.bmp)|*.bmp||"); save.m_ofn.lpstrTitle="Exporter BMP vers ..."; save.m_ofn.lpstrInitialDir=Working_Path; if(save.DoModal() == IDOK) { FIBITMAP *bitmap; CImage anImage; CRect rcClient,rcClient_out; CString Path; this->GetClientRect(&rcClient); anImage.GetDibScreen(m_pDC,&rcClient); LPBITMAPINFOHEADER BmInfo=(LPBITMAPINFOHEADER)GlobalLock(anImage.m_hDib); CGLDoc* pDoc = GetDocument(); Path=save.GetPathName(); DWORD dwColor; anImage.SetTransparentColor(dwColor,FALSE); anImage.SaveFile(Path,IMG_FORMAT_BMPWIN); bitmap=FreeImage_Load(FIF_BMP,Path,BMP_DEFAULT); FreeImage_SwapColors(bitmap,&NOIR,&BLANC,TRUE); bitmap=FreeImage_ConvertTo24Bits(bitmap); FreeImage_Save(FIF_BMP,bitmap,Path,0); AfxMessageBox("OpenGL : Rendu HD non supporté.\nExport basse définition.",MB_ICONINFORMATION); chdir(Working_Path); return; }
J'ai déjà essayé pas mal de manip pour forcer la fermeture de la fenêtre ou temporiser l'acquisition de l'image :
- Forcer le focus sur la vue courante
- Utiliser des Sleep() pour forcer la temporisation des actions
- Forcer la vue courante avec SetActiveWindow()
- Etc..
Et hélas rien n'y fait, trois jours que je tourne en rond, à chercher sur le net en vain et j'ai 10 utilisateurs dépourvus de carte graphique dédié qui font le pied de grue devant mon bureau pour exporter leurs modèles en low def!
Si vous avez une idée, faites le moi savoir, merci !
++Tyra![]()
Partager