为什么用CoCreateInstance()创建一个IWMEncoder2对象老是创建不成功
还有我想知道,网上的源码都是捕捉屏幕录像的,能不能捕捉后以图像保存,我想保存后再压缩,或者可不可以设置每隔几秒捕捉一次屏幕,

解决方案 »

  1.   

    为什么用CoCreateInstance()创建一个IWMEncoder2对象老是创建不成功 是因为我没初始化com
    其他问题,还需要大家的帮忙
      

  2.   

    直接用GDI即可实现:Void CaptureScreen()
    {
        int nScreenWidth = GetSystemMetrics(SM_CXSCREEN);
        int nScreenHeight = GetSystemMetrics(SM_CYSCREEN);
        HWND hDesktopWnd = GetDesktopWindow();
        HDC hDesktopDC = GetDC(hDesktopWnd);
        HDC hCaptureDC = CreateCompatibleDC(hDesktopDC);
        HBITMAP hCaptureBitmap =CreateCompatibleBitmap(hDesktopDC, 
                                nScreenWidth, nScreenHeight);
        SelectObject(hCaptureDC,hCaptureBitmap); 
        BitBlt(hCaptureDC,0,0,nScreenWidth,nScreenHeight,
               hDesktopDC,0,0,SRCCOPY|CAPTUREBLT); 
        SaveCapturedBitmap(hCaptureBitmap); //Place holder - Put your code
                                    //here to save the captured image to disk
        //.......
        ReleaseDC(hDesktopWnd,hDesktopDC);
        DeleteDC(hCaptureDC);
        DeleteObject(hCaptureBitmap);
    }
      

  3.   

    GDI是可以实现,但是我想试一下media api看效率会不会好点
      

  4.   

    本来我是用GDI的,捕获后先转换成256色的bitmap,再压缩成png格式,不过cpu占得多了点,所以想试试其他的,平衡一下cpu跟空间
      

  5.   

    但是它并没有直接抓取为图片的,可以尝试用Media Encoder抓取(这个过程中可以IWMEncode::Pause),然后用Windows Media Format SDK处理为图片
      

  6.   

    用media api试了一下,cpu跟内存不是一般的大,线程数有23个,太夸张了
      

  7.   

    GDI方法不知道有没有办法,一开始就捕获到256色的图片(或者质量不要那么好的图片),而不是真彩的,
      

  8.   

    捕捉出来的BITMAP是和当前应用程序桌面的兼容的,因此这需要你自己完成Convert to 256.
      

  9.   

    1.用个定时器每隔一段时间把屏幕图像抓下来,也可以适当进行缩放;
    2.用一个微软的编码器把一帧帧图像压缩编码;
    3.把编码数据写为avi文件;