none
capture Bmp RRS feed

  • Question

  • bonjour voila je capturais une image grâce a ça :

    char nom[20];
    i++;
    wsprintf(nom,"frame_%d.bmp",i);
    capGrabFrame(camhwnd);
    capEditCopy(camhwnd);
    capFileSaveDIB(camhwnd,nom);
    mais j'ai voulu changer le format (ce qui n'a pas fonctionné bien sur) mais depuis je ne peut plus capturer mes images, j'ai donc annuler mes ligne de commande qui ne fonctionnais pas et je me suis retrouvé avec mon code de dépars qui ne fonctionnais plus j'ai cherché et circonscrit l'erreur, elle ce trouve au niveau de capEditCopy, elle me retourne FALSE, comment je fait pour qu'elle me renvoi un TRUE.

    mardi 29 mai 2012 08:33

Réponses

  • Comme capEditCopy est une MACRO, elle a peut-être effacé GetLastError.

    Utilisez un debuggeur live pour voir sa valeur, ligne à ligne, dans le déroulement de la MACRO.


    Paul Bacelar, Ex - MVP VC++


    mardi 29 mai 2012 10:39
    Modérateur
  • voila apres quelques recherche sur le net et quelque modification perso.

    le programme permet le previsulisation, le stop motion et bien sur la capture de BMP.

    #define WM_CAP_START  0x0400
    #define WM_CAP_DRIVER_CONNECT  (WM_CAP_START + 10)
    #define WM_CAP_DRIVER_DISCONNECT  (WM_CAP_START + 11)
    #define WM_CAP_EDIT_COPY (WM_CAP_START + 30)
    #define WM_CAP_GRAB_FRAME (WM_CAP_START + 60)
    #define WM_CAP_SET_SCALE (WM_CAP_START + 53)
    #define WM_CAP_SET_PREVIEWRATE (WM_CAP_START + 52)
    #define WM_CAP_SET_PREVIEW (WM_CAP_START + 50)
    #define WM_CAP_DLG_VIDEOSOURCE  (WM_CAP_START + 42)
    #define WM_CAP_STOP (WM_CAP_START+ 68)
    
    #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);  //choisir la camera
    
            //pas obligatoire
            //if(!capDlgVideoSource(camhwnd))
            //    printf("erreur_01\n");  //choisir la camera
            //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;
    }


    • Modifié 23253 lundi 11 juin 2012 15:40
    • Marqué comme réponse Ciprian Duduiala mardi 12 juin 2012 09:19
    lundi 11 juin 2012 15:39

Toutes les réponses

  • Vraiment pas claire comme question.

    GetLastError donne quoi ?

    Signé : Mm. Irma en stage de reconversion.


    Paul Bacelar, Ex - MVP VC++

    mardi 29 mai 2012 09:11
    Modérateur
  • oups ... g oublié getlasterror

    Edit 1 : je sait pas vraiment l'utiliser, mais il me renvoi l'erreur 0, je cherche si je trouve pas un truc plus claire

    capEditCopy(camhwnd);
    i = GetLastError();
    printf("%d",i);

    Edit 2 : j'ai etais voir et le code d'erruer correspond a 

    ERROR_SUCCESS
    0 (0x0)

    The operation completed successfully.

    donc il me dit que c'est bon mais il me dit que c'est faux... c'est moi il ou il ne sait plus ce qu'il dit ?

    si quelqu'un comprend expliquez moi svp




    • Modifié 23253 mardi 29 mai 2012 09:54
    mardi 29 mai 2012 09:13
  • Comme capEditCopy est une MACRO, elle a peut-être effacé GetLastError.

    Utilisez un debuggeur live pour voir sa valeur, ligne à ligne, dans le déroulement de la MACRO.


    Paul Bacelar, Ex - MVP VC++


    mardi 29 mai 2012 10:39
    Modérateur
  • bon bah j'arrive pas a trouver d’où viens l'erreur.
    mercredi 30 mai 2012 08:53
  • C'est quoi la valeur de retour de SendMessage ?

    La valeur de GetLastError juste après l'appel de SendMessage ?

    C'est à quelle ligne que la valeur de retour est déterminé et comment/pourquoi ?


    Paul Bacelar, Ex - MVP VC++

    mercredi 30 mai 2012 11:34
    Modérateur
  • je n'utilise pas de sendmessage
    mercredi 30 mai 2012 15:01
  • La MACRO si.

    Paul Bacelar, Ex - MVP VC++

    mercredi 30 mai 2012 16:07
    Modérateur
  • voila apres quelques recherche sur le net et quelque modification perso.

    le programme permet le previsulisation, le stop motion et bien sur la capture de BMP.

    #define WM_CAP_START  0x0400
    #define WM_CAP_DRIVER_CONNECT  (WM_CAP_START + 10)
    #define WM_CAP_DRIVER_DISCONNECT  (WM_CAP_START + 11)
    #define WM_CAP_EDIT_COPY (WM_CAP_START + 30)
    #define WM_CAP_GRAB_FRAME (WM_CAP_START + 60)
    #define WM_CAP_SET_SCALE (WM_CAP_START + 53)
    #define WM_CAP_SET_PREVIEWRATE (WM_CAP_START + 52)
    #define WM_CAP_SET_PREVIEW (WM_CAP_START + 50)
    #define WM_CAP_DLG_VIDEOSOURCE  (WM_CAP_START + 42)
    #define WM_CAP_STOP (WM_CAP_START+ 68)
    
    #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);  //choisir la camera
    
            //pas obligatoire
            //if(!capDlgVideoSource(camhwnd))
            //    printf("erreur_01\n");  //choisir la camera
            //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;
    }


    • Modifié 23253 lundi 11 juin 2012 15:40
    • Marqué comme réponse Ciprian Duduiala mardi 12 juin 2012 09:19
    lundi 11 juin 2012 15:39
  • Merci ;-)

    Paul Bacelar, Ex - MVP VC++

    mardi 12 juin 2012 10:01
    Modérateur
  • Je fais ce que je peux pour renvoyer la pareille .
    mardi 12 juin 2012 13:25