2014-10-19 55 views
0

我在这里跟随此代码拍摄截图。它把东西放到HDC上。我想知道如何从这个HDC中取出一些像素数据。我想将它复制到剪贴板,并将其绘制到HTML5画布。从hdc获取像素数据

是否必须为HDC上的每个点运行GetPixel,这是获取位图数组的唯一方法吗?

HBITMAP MakePrintScreen() 
{ 
     HWND hWindow = GetDesktopWindow(); 
     HDC hdcScreen = GetDC(hWindow); 
     RECT rect; 
     HBITMAP hbmC; 

     GetClientRect(hWindow,&rect); 

     if((hbmC = CreateCompatibleBitmap(hdcScreen,rect.right,rect.bottom)) != NULL) 
     { 
      HDC hdcC; 
      if((hdcC = CreateCompatibleDC(hdcScreen)) != NULL) 
      { 
        HBITMAP hbmOld = (HBITMAP)SelectObject(hdcC,hbmC); 

        BitBlt(hdcC,0,0,rect.right,rect.bottom,hdcScreen,0,0,SRCCOPY); 

        SelectObject(hdcC,hbmOld); 
        DeleteDC(hdcC); 
      } 
     } 

     ReleaseDC(hWindow,hdcScreen); 

     return hbmC; 
} 

回答

4

你已经取消你的呼唤GetDIBits从位图检索位的设备上下文位图后。

+0

感谢arx你可以请GetDIBits进入上面的示例代码(我实际上在js-ctypes中做这个,所以不知道c我只是从c到js-ctypes的粗暴转换) – Noitidart 2014-10-19 12:06:17