OleLoadPicture pose problème
Bonjour, j'essaie d'afficher une image récupérer d'une caméra IP dans mon programme mais je rencontre un problème au niveau de l'utilisation de la fonction OleLoadPicture().
Il me met :
http://nsa06.casimages.com/img/2009/...2320731584.jpg
Ce qui correspond à la ligne GlobalFree(hgbl);
Normalement il ne devrait même pas rentrer dedans, donc il y à une erreur plus haut je pense mais où...
Mon code :
Code:
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| HRESULT hr;
CoInitialize(0);
HBITMAP hbmp_dst = 0;
SIZE_T nSize = this->tailleImage;
// copie image jpeg dans global
HGLOBAL hgbl = (HGLOBAL)GlobalAlloc(GMEM_FIXED, nSize);
memcpy(hgbl, this->bufImage, nSize);
// création du stream d'échange
IStream* stream = 0;
// image jpeg dans global dans stream
hr = CreateStreamOnHGlobal(hgbl, TRUE, &stream);
if(!SUCCEEDED(hr) || !stream) { // si erreur libération des objets déja crées
GlobalFree(hgbl);
CoUninitialize();
return false;
} else {
// création d'une 'picture'
IPicture* picture = 0;
// conversion stream vers picture
hr = OleLoadPicture(stream, nSize, FALSE, IID_IPicture, (void**)&picture);
if(!SUCCEEDED(hr) || !picture) { // si erreur libération des objets déja crées
stream->Release();
GlobalFree(hgbl);
CoUninitialize();
return false;
} else {
HBITMAP hbmp_src;
// recuperation du handle de la 'picture'
picture->get_Handle((OLE_HANDLE *)&hbmp_src);
// recuperation du handle du bitmap de la 'picture'
BITMAP bmp;
GetObject(hbmp_src, sizeof bmp, &bmp);
// bmp est le bitmap resultant mais son pointeur vers le contenu pointe vers le contenu de 'picture'
// comme on va dechargé la 'picture' on copie dans une autre zone memoire
hbmp_dst = (HBITMAP)CopyImage(hbmp_src, IMAGE_BITMAP, 0, 0, 0);
picture->Release();
stream->Release();
GlobalFree(hgbl);
CoUninitialize();
}
}
this->hbmp = hbmp_dst; |