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

Signaler
Messages postés
16
Date d'inscription
mardi 29 juin 2004
Statut
Membre
Dernière intervention
2 octobre 2007
-
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
-
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

Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
14
T'as été voir cet exemple sur MSDN?

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

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

C++ (@++)<!--
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
35
Salut:

Je veux te remercier [auteurdetail.aspx?ID=617077 SAKingdom]. C'est intéressant ton lien.
Messages postés
16
Date d'inscription
mardi 29 juin 2004
Statut
Membre
Dernière intervention
2 octobre 2007

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.
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
14
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++ (@++)<!--