Wons' Blog

个人博客

Android程序猿


回首向来萧瑟处,也无风雨也无晴

用WindowsAPI截屏并转换为RGB格式

在Windows下捕获屏幕图像可以有多重方法,比较简单可以调用第三方库,如Qt的屏幕截屏API就很容易调用。 在这里介绍如何用Windows API实现截屏并转换成RGB格式存储。

#include <windows.h>
//最终f的内存布局为BGRA格式,需要保证buf长度足够(>w*h*4)
void ScreenCap(void* buf, int* w, int* h)
{

    HWND hDesk = GetDesktopWindow();
    HDC hScreen = GetDC(hDesk);
    int width = GetDeviceCaps(hScreen, HORZRES);
    int height = GetDeviceCaps(hScreen, VERTRES);

    if (w != 0)
        *w = width;
    if (h != 0)
        *h = height;

    HDC hdcMem = CreateCompatibleDC(hScreen);
    HBITMAP hBitmap = CreateCompatibleBitmap(hScreen, width, height);

    BITMAPINFOHEADER bmi = { 0 };
    bmi.biSize = sizeof(BITMAPINFOHEADER);
    bmi.biPlanes = 1;
    bmi.biBitCount = 32;
    bmi.biWidth = width;
    bmi.biHeight = -height;
    bmi.biCompression = BI_RGB;
    bmi.biSizeImage = width*height;

    SelectObject(hdcMem, hBitmap);
    BitBlt(hdcMem, 0, 0, width, height, hScreen, 0, 0, SRCCOPY);

    GetDIBits(hdcMem, hBitmap, 0, height, buf, (BITMAPINFO*)&bmi, DIB_RGB_COLORS);

    DeleteDC(hdcMem);
    ReleaseDC(hDesk, hScreen);
    CloseWindow(hDesk);
    DeleteObject(hBitmap);
}
最近的文章

Linux下更改数据库文件路径

Linux下经常遇到要更改数据库路径的情况,以下的操作都是在Ubuntu下完成的。1.停止mysql服务sudo service mysql stop2.修改my.cnf文件,将datadir改为目标路径sudo vim /etc/mysql/my.cnf3.将原来的datadir路径下的所有文件拷贝到新的datadir下cp -R (src_path) (dst_path)4.在文件 /etc/apparmor.d/tunables/alias下添加以下的一行内容alias /var/l...…

LinuxMySQL继续阅读
更早的文章

Ubuntu下搭建PPTP VPN服务器

在Ubuntu Linux下搭建PPTP VPN服务器过程很简单。主要用到了pptpd程序。可以参照Ubuntu Community Help Wiki。1.设置PPTP服务器安装pptpdsudo apt-get install pptpd设置pptpdsudo vi /etc/pptpd.conf将服务器IP地址和客户端IP地址范围写到文件末尾。可以如下设置:localip 192.168.1.1remoteip 192.168.1.100-255设置DNS服务器sudo vi /et...…

Linux继续阅读