CaMeGave
Messages postés16Date d'inscriptionmardi 29 juin 2004StatutMembreDernière intervention 2 octobre 2007
-
22 nov. 2006 à 17:05
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 2009
-
24 nov. 2006 à 20:55
bonjour,
j'ai besoin d'aide...
j'ai une web cam et je veux récupérer l'image sans l'enregistrer sur le disque dur.
à première vue je dois utiliser les Clipboard mais je n'arrive pas à le faire marcher.
voila mon code :
// récupération d'une image que je place dans le clipboard
capCaptureSingleFrameOpen(m_hWndCap);
capCaptureSingleFrame(m_hWndCap);
capEditCopy(m_hWndCap);
capCaptureSingleFrameClose(m_hWndCap);
// ouverture du presse-papier
if(!OpenClipboard())
return ;
// vérification du format
if(!IsClipboardFormatAvailable(CF_BITMAP))
{
CloseClipboard();
return ;
}
// récupération bitmap contenu dans le presse-papier
HBITMAP hClipboardBmp = (HBITMAP) GetClipboardData(CF_BITMAP);
if(hClipboardBmp == NULL)
{
CloseClipboard();
return ;
}
// récupération infos sur le bitmap (dont la taille)
BITMAP info;
SIZE size;
GetObject(hClipboardBmp, sizeof(BITMAP), &info);
size.cx = info.bmWidth;
size.cy = info.bmHeight;
une fois arriver la je n'arrive pas à savoir si j'ai récupérer l'image, ni à la transformé en CBitmap.
je commence à déprimer si vous avez une solution je suis preneur.
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 23 nov. 2006 à 11:26
Salut:
Je veux te remercier [auteurdetail.aspx?ID=617077 SAKingdom]. C'est intéressant ton lien.
CaMeGave
Messages postés16Date d'inscriptionmardi 29 juin 2004StatutMembreDernière intervention 2 octobre 2007 24 nov. 2006 à 14:50
re bonjour
c'est encore moi,
j'ai regarder le lien. j'ai compris beaucoup plus de chose merci.
en revanche j'ai toujours un problème. je n'arrive pas à récupérer les pixels de ma BITMAP.
//m_hBmp is a Handle to Bitmap.
HBITMAP m_hBmp = (HBITMAP)::GetClipboardData(CF_BITMAP);
BITMAP bmp;
BITMAPINFO IHdr;
RECT rc;
// je récupère le HDC de ma fenetre video
HDC hdc = (HDC) m_video.GetDC();
HDC hdcMem = CreateCompatibleDC(hdc);
SelectObject(hdcMem, m_hBmp);
// Fenetre video
m_video.GetClientRect(&rc);
BitBlt(hdc, 0, 0, rc.right, rc.bottom, hdcMem, 0, 0, SRCCOPY);
int res = GetDIBits(hdcMem, m_hBmp, 0,300, bmp.bmBits, (BITMAPINFO*)&IHdr, DIB_RGB_COLORS);
arrivé la la variable bmp n'est pas initialisé correctement et m_hBmp n'est pas visible.
si je rajoute : GetObject(m_hBmp, sizeof(bmp), &bmp);
alors la variable bmp est initialisé correctement mais je n'ai pas les pixels même si je fais GetDIBits ensuite.
je ne comprends strictement rien.
j'ai besoin de ces pixels pour les passer sous une autre structure (IplImage d'OpenCV). j'ai des fonctions qui me permette de passer de BITMAP à IplImage normalement et l'inverse mais tant que je n'ai pas ces pixels ca me fais une erreur.
donc COMMENT RECUPERER CES PIXELS c'est le champ bmBits de BITMAP si je ne me trompe pas.
merci d'avance si vous avez une piste car moi je suis sur le point d'abandonner.
Vous n’avez pas trouvé la réponse que vous recherchez ?
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 24 nov. 2006 à 20:55
int res = GetDIBits(hdcMem, m_hBmp, 0,300, bmp.bmBits, (BITMAPINFO*)&IHdr, DIB_RGB_COLORS);
Attention ici. Ce n'est pas un pointeur vers les données du bitmap qu'il faut passer ici mais un pointeur vers le buffer qui contiendra les données. Va voir dans mes sources. J'en ai une qui explique l'utilisation de Get et SetDIBits.