Webcam WinAPI CodeBlock [Résolu]

23253 11 Messages postés mercredi 2 mai 2012Date d'inscription 14 mai 2013 Dernière intervention - 2 mai 2012 à 15:32 - Dernière réponse : 23253 11 Messages postés mercredi 2 mai 2012Date d'inscription 14 mai 2013 Dernière intervention
- 18 juil. 2012 à 18:18
je doit développer un système sous Code::Block pour Windows, pour mon stage.
je doit pouvoir utiliser une webcam depuis un PC (sous Xp), mais je n'arrive pas a communiquer avec ma Camera donc auriez vous une astuce pour moi?

je doit pouvoir demander une prise de vu quand j'en ai besoins, et travailler sur les pixels.
Afficher la suite 

Votre réponse

2 réponses

23253 11 Messages postés mercredi 2 mai 2012Date d'inscription 14 mai 2013 Dernière intervention - 18 juil. 2012 à 18:18
+3
Utile
alors g trouvé comment faire :

voila apres quelques recherche sur le net et quelque modification perso.
le programme permet le prévisualisation, le stop motion et bien sur la capture de BMP.

sous Code::Block il faut pas oublier de faire le lien vers la bibliotheque vfw.f
settings --> compiler and debugger --> linker setting --> add : "Vfw32"



#include <windows.h>
#include <stdio.h>
#include <vfw.h>




LRESULT CALLBACK WindowProc (HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK capVideoStreamCallback(HWND,LPVIDEOHDR);
PBITMAPINFO CreateBitmapInfoStruct(HWND, HBITMAP);
void CreateBMPFile(HWND, LPTSTR, PBITMAPINFO, HBITMAP, HDC);

char szAppName [] = TEXT("WebCam");
HWND camhwnd;
HDC hdc ;
HDC hdcMem;
PAINTSTRUCT ps;
HBITMAP hbm;
RECT rc;
int i=0;


//WinMain -- Main Window
int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance,
                     LPSTR lpCmdLine, int nCmdShow )
{

    HWND hwnd;
    MSG msg;

    WNDCLASS wc;
    wc.style = CS_HREDRAW|CS_VREDRAW;
    wc.lpfnWndProc = WindowProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hInstance;
    wc.hIcon = LoadIcon(GetModuleHandle(NULL), IDI_APPLICATION);
    wc.hCursor = LoadCursor (NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH) (COLOR_WINDOW+1);
    wc.lpszMenuName = NULL;
    wc.lpszClassName = szAppName;

    RegisterClass (&wc);

// Create the window
    hwnd = CreateWindow (szAppName,szAppName,WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX,CW_USEDEFAULT,CW_USEDEFAULT,700,600,0,0,hInstance,0);

    ShowWindow (hwnd,SW_SHOW);
    UpdateWindow (hwnd);

    while (GetMessage(&msg,0,0,0)){
        if (!IsDialogMessage(hwnd, &msg)){
            TranslateMessage (&msg);
            DispatchMessage (&msg);
        }
    }
    return msg.wParam;
}

//Main Window Procedure WindowProc
LRESULT CALLBACK WindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HINSTANCE hInstance = GetModuleHandle(NULL);
    HWND hButtStartCam;
    HWND hButtStopCam;
    HWND hButtGrabFrame;
    HWND hButtVideo;

    switch (message){
    case WM_CTLCOLORSTATIC:
        SetBkMode(hdc,TRANSPARENT);
        return (LRESULT)CreateSolidBrush(0xFFFFFF);

    case WM_CREATE:{
        hButtStartCam  = CreateWindowEx(0,"BUTTON","Start Camera",WS_CHILD | WS_VISIBLE,0,0,100,20,hwnd,(HMENU)1,hInstance, 0);
        hButtStopCam   = CreateWindowEx(0,"BUTTON","Stop Camera",WS_CHILD | WS_VISIBLE,0,25,100,20,hwnd,(HMENU)2,hInstance, 0);
        hButtGrabFrame = CreateWindowEx(0,"BUTTON","Stop Motion",WS_CHILD | WS_VISIBLE,0,50,100,20,hwnd,(HMENU)3,hInstance, 0);
        hButtGrabFrame = CreateWindowEx(0,"BUTTON","Photo",WS_CHILD | WS_VISIBLE,0,75,100,20,hwnd,(HMENU)4,hInstance, 0);


        camhwnd = capCreateCaptureWindow ( NULL, WS_CHILD | WS_VISIBLE, 0, 100, 640,480, hwnd, 0);
        capDriverConnect (camhwnd, 0);    //connecte a une camera si plusieur disponibles vous propose un choix de la camera

        //pas obligatoire
        //if(!capDlgVideoSource(camhwnd)) //choisir la camera
        //    printf("erreur_01\n"); 
        //else printf("vraie_01\n");
        
        break;
    }

    case WM_COMMAND:{
        switch (LOWORD(wParam)){
            case 1:{
                capDriverConnect (camhwnd, 0);
                capPreview(camhwnd, TRUE);
                capPreviewRate(camhwnd, 15);
                capPreviewScale(camhwnd,TRUE);
                capCaptureSingleFrameOpen(camhwnd);
                break;
            }
            case 2:{
                BITMAPINFO psVideoFormat;
                capGetVideoFormat(camhwnd, &psVideoFormat,sizeof(psVideoFormat));
                psVideoFormat.bmiHeader.biWidth = 640;
                psVideoFormat.bmiHeader.biHeight = 480;

                capSetVideoFormat(camhwnd, &psVideoFormat,sizeof(psVideoFormat));
                capDriverDisconnect (camhwnd);
                capFileSaveAs(camhwnd,"file.avi");
                capCaptureSingleFrameClose(camhwnd);
                break;
            }
            case 3:{
                capCaptureSingleFrame(camhwnd);
                break;
            }
            case 4:{
                char nom[20];
                i++;
                wsprintf(nom,"frame_%d.bmp",i);
                capGrabFrameNoStop(camhwnd);
                if(capEditCopy(camhwnd))
                {
                    capFileSaveDIB(camhwnd,nom);
                }else i--;
                break;
            }
        }
        break;
    }

    case WM_DESTROY:{
        PostQuitMessage(0);
        break;
    }

    default:
        return DefWindowProc(hwnd, message, wParam, lParam);
    }
    return 0;
}






voila pour les question n'esitez pas je repondrais a ce que je peux.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de 23253
basmar 2 Messages postés samedi 18 août 2007Date d'inscription 12 juillet 2012 Dernière intervention - 12 juil. 2012 à 13:29
0
Utile
moi aussi j'ai le même problème. j pas trouver une solution. est ce que vous trouvez une solution? si oui laquelle? et merci
Commenter la réponse de basmar

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.