Récupération d'une image dans un clipboard

CaMeGave Messages postés 16 Date d'inscription mardi 29 juin 2004 Statut Membre Dernière intervention 2 octobre 2007 - 22 nov. 2006 à 17:05
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 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.

Merci d'avance.

5 réponses

SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
22 nov. 2006 à 18:28
T'as été voir cet exemple sur MSDN?

La récupération de bitmap y est expliqué

C++ (@++)<!--
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
22 nov. 2006 à 18:30
Oh attention. Tu as posé ta question 3 fois sur ce site (une probablement déplacé ici par un admin)

C++ (@++)<!--
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
23 nov. 2006 à 11:26
Salut:

Je veux te remercier [auteurdetail.aspx?ID=617077 SAKingdom]. C'est intéressant ton lien.
0
CaMeGave Messages postés 16 Date d'inscription mardi 29 juin 2004 Statut Membre Derniè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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
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.

C++ (@++)<!--
0
Rejoignez-nous