相关疑难解决方法(0)

如何读取屏幕像素?

我想读一个矩形区域,或整个屏幕像素.好像按下了屏幕截图按钮.

我怎么做的?

编辑:工作代码:

void CaptureScreen(char *filename)
{
    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); 

    BITMAPINFO bmi = {0}; 
    bmi.bmiHeader.biSize = sizeof(bmi.bmiHeader); 
    bmi.bmiHeader.biWidth = nScreenWidth; 
    bmi.bmiHeader.biHeight = nScreenHeight; 
    bmi.bmiHeader.biPlanes = 1; 
    bmi.bmiHeader.biBitCount = 32; 
    bmi.bmiHeader.biCompression = BI_RGB; 

    RGBQUAD *pPixels = new RGBQUAD[nScreenWidth * nScreenHeight]; 

    GetDIBits(
        hCaptureDC, 
        hCaptureBitmap, 
        0,  
        nScreenHeight,  
        pPixels, 
        &bmi,  
        DIB_RGB_COLORS …
Run Code Online (Sandbox Code Playgroud)

c++ windows screen-capture

14
推荐指数
2
解决办法
2万
查看次数

如何直接访问显卡的输出?

显卡通常是否将其输出写入内存中我可以访问的某个位置?我必须使用驱动程序吗?如果是这样,我可以使用 OpenGL 吗?

我想知道是否有可能在 Linux 上“捕获”可以直接访问 GPU 并运行 Windows 的 VM 的输出。理想情况下,我可以直接从内存访问输出,而无需接触 GPU,因为此代码将能够在 Linux 主机上运行。

另一种选择是编写一个 Windows 驱动程序,它读取 GPU 的输出并将其写入内存中的某个位置。然后,在 Linux 端,程序可以读取此内存。这似乎有些不可能,因为我不确定如何让主机上的进程与来宾上的进程共享内存。

是否可以执行选项 1 并简单地从内存中读取输出?

c graphics gpu

4
推荐指数
1
解决办法
4510
查看次数

标签 统计

c ×1

c++ ×1

gpu ×1

graphics ×1

screen-capture ×1

windows ×1