haazheel | Bonjour à tous,
voici le code qui me pose problème à l'éxcution (ça sert à convertir des images d'une vidéo en bitmaps...
Code :
- for (LONGLONG position = tps_start; position < tps_end; position += duree_frame)
- {
- pSeek->SetPositions(
- &position,
- AM_SEEKING_AbsolutePositioning,
- NULL,
- AM_SEEKING_NoPositioning);
- long evCode;
- pControl->Run();
- pEvent->WaitForCompletion(INFINITE, &evCode);
- pControl->Pause();
-
- OAFilterState state = State_Paused;
- pControl->GetState(INFINITE, &state);
- AM_MEDIA_TYPE mt;
- BITMAPINFO BmpInfo;
- HBITMAP hBitmap = NULL;
- HRESULT hr = pGrabber->GetConnectedMediaType(&mt);
- if (FAILED(hr))
- {
- ShowMessage("Impossible de se connecter au type du media" );
- return;
- }
- long cbBuffer;
- hr = pGrabber->GetCurrentBuffer(&cbBuffer, NULL);
- if (FAILED(hr))
- {
- ShowMessage("Impossible de récupérer la taille du buffer" );
- return;
- }
- BYTE *pBuffer = new BYTE[cbBuffer];
- VIDEOINFOHEADER *pVideoHeader = (VIDEOINFOHEADER*)mt.pbFormat;
- CopyMemory(&BmpInfo.bmiHeader, &pVideoHeader->bmiHeader,sizeof(BITMAPINFOHEADER));
- hBitmap = CreateDIBSection(0,&BmpInfo,DIB_RGB_COLORS,(void**)&pBuffer,NULL,0);
- hr = pGrabber->GetCurrentBuffer(&cbBuffer, (long*)pBuffer);
- if (FAILED(hr))
- {
- ShowMessage("Impossible de récupérer le buffer" );
- return;
- }
- Graphics::TBitmap *bmp = new Graphics::TBitmap();
- bmp->Handle = hBitmap;
- AnsiString path = dir_images + ExtractFileName(path_sequence) + "_" + IntToStr(position / duree_frame) + ".bmp";
- bmp->SaveToFile(path);
- delete bmp;
- //delete[] pBuffer;
-
- DeleteObject(hBitmap);
- index++;
- pourcent = index *100 / nbre_frames;
- Application->ProcessMessages();
- }
|
Le problème vient du delete[] pBuffer;
Si je le laisse, le programme plante dès la fin de la première boucle...
Si je l'enlève, on me dit (forcèment) que je n'ai pas supprimé des variables que j'ai crée avec new...
Il est où le problème?
Merci d'avance... |