SAMPLE3.C
上传用户:guoxiu1214
上传日期:2019-02-27
资源大小:876k
文件大小:5k
源码类别:

多显示器编程

开发平台:

Visual C++

  1. /*******************************************************************************
  2. Copyright Datapath Ltd. 2008.
  3. File:    SAMPLE3.C
  4. Purpose: VisionRGB-PRO and VisionRGB-X example program that shows how to capture
  5.          RGB data without a window.
  6. History:
  7.          16 JAN 08    SB   Created.
  8.          09 DEC 09   MJE   Set to always DMA through system memory. Save an
  9.                            RGB888 bitmap. No longer call RGBCloseCapture within
  10.                            a callback. 
  11. *******************************************************************************/
  12. #include <windows.h>
  13. #include <stdio.h>
  14. #include <tchar.h>
  15. #include <rgb.h>
  16. #include <rgbapi.h>
  17. #include <rgberror.h>
  18. /* Static Constants ***********************************************************/
  19. static const TCHAR
  20.    Caption[]   = { TEXT("RGB Sample 3") };
  21. /* Global Variables ***********************************************************/
  22. static HINSTANCE  gHInstance = NULL;
  23. static HANDLE     gHEvent = NULL;
  24. static HRGBDLL    gHRGBDLL = 0;
  25. static HRGB       gHRGB = 0;
  26. static unsigned long gFrameCount = 0;
  27. static unsigned long gForceClose = FALSE;
  28. static TCHAR         gDirectory[MAX_PATH-32] = { 0, };
  29. /******************************************************************************/
  30. RGBFRAMECAPTUREDFN  FrameCapturedFn;
  31. void RGBCBKAPI FrameCapturedFn (
  32.    HWND                 hWnd,
  33.    HRGB                 hRGB,
  34.    LPBITMAPINFOHEADER   pBitmapInfo,
  35.    void                 *pBitmapBits,
  36.    unsigned long        userData )
  37. {
  38.    TCHAR buffer[MAX_PATH];
  39.    _stprintf ( buffer, TEXT("%s\RGBCAPT%d.BMP"), gDirectory, gFrameCount++ );
  40.    if ( ( pBitmapInfo ) && ( pBitmapBits ) )
  41.       RGBSaveBitmap ( hRGB, pBitmapInfo, pBitmapBits, buffer );
  42.    _tprintf ( TEXT(".") );
  43.    if (( gFrameCount >= userData ) || gForceClose )
  44.    {
  45.       _tprintf ( TEXT("n") );
  46.       SetEvent ( gHEvent );
  47.    }
  48. }
  49. /******************************************************************************/
  50. BOOL WINAPI
  51. HandlerRoutine(
  52.   DWORD dwCtrlType )
  53. {
  54.    gForceClose = TRUE;
  55.    return TRUE;
  56. }
  57. /******************************************************************************/
  58. int
  59. _tmain (
  60.    int  argc,  
  61.    TCHAR *  argv[],  
  62.    TCHAR *  envp[] )   
  63. {
  64.    unsigned long  error, input, framesToCapture;
  65.    if ( argc != 4 )
  66.    {
  67.       _tprintf (
  68.             TEXT("Usage: SAMPLE3.EXE <input> <number of frames to capture> <capture directory>n"));
  69.       return -1;
  70.    }
  71.    input = _ttol(argv[1]);
  72.    framesToCapture = _ttol(argv[2]);
  73.    _tcscpy ( gDirectory, argv[3] );
  74.    _tprintf ( TEXT("SAMPLE3.EXEn") );
  75.    _tprintf ( TEXT("   Input %dn"), input );
  76.    _tprintf ( TEXT("   Frames to capture %dn"), framesToCapture );
  77.    /* Add a CTRL-C handler routine. */
  78.    SetConsoleCtrlHandler ( HandlerRoutine, TRUE );
  79.    gHEvent = CreateEvent ( NULL, FALSE, FALSE, NULL );
  80.    if ( gHEvent )
  81.    {
  82.       /* Load the RGBEASY API. */
  83.       error = RGBLoad ( &gHRGBDLL );
  84.       if ( error == 0 )
  85.       {
  86.          /* Open RGB input 1. */
  87.          error = RGBOpenInput ( input, &gHRGB );
  88.          if ( error == 0 )
  89.          {
  90.             /* Maximise the capture rate. */
  91.             error = RGBSetFrameDropping ( gHRGB, 0 );
  92.             /* We want to save the data so it must be send to system memory
  93.              * rather than directly to the graphics card. */
  94.             error = RGBSetDMADirect ( gHRGB, FALSE );
  95.             /* Capture RGB888. */
  96.             error = RGBSetPixelFormat ( gHRGB, RGB_PIXELFORMAT_888 );
  97.             if ( error == 0 )
  98.             {
  99.                /* Set the Frame Captured callback function. */
  100.                error = RGBSetFrameCapturedFn ( gHRGB, FrameCapturedFn,
  101.                      framesToCapture );
  102.                if ( error == 0 )
  103.                {
  104.                   error = RGBStartCapture ( gHRGB );
  105.                   if ( error == 0 )
  106.                   {
  107.                      WaitForSingleObject ( gHEvent, INFINITE );
  108.                      RGBStopCapture ( gHRGB );
  109.                   }
  110.                   RGBSetFrameCapturedFn ( gHRGB, NULL, 0 );
  111.                }
  112.             }
  113.             
  114.             RGBCloseInput ( gHRGB );
  115.          }
  116.          RGBFree ( gHRGBDLL );
  117.       }
  118.       CloseHandle ( gHEvent );
  119.    }
  120.    else
  121.    {
  122.       error = GetLastError ();
  123.    }
  124.    if ( error )
  125.    {
  126.       _tprintf ( TEXT("   ERROR 0x%08xn"), error );
  127.    }
  128.    return error;
  129. }
  130. /******************************************************************************/