如何拷贝屏幕图像到指定缓冲区 我想将屏幕某个窗口的图像数据拷贝到我自己定义的一个内存缓冲区中,我曾经试着通过窗口的DC,利用GetPixel函数得到每个点的数据,但这样太慢了,后来又通过创建一个内存兼容DC和兼容位图,将窗口的数据先拷贝到内存兼容位图中,再通过GetDIBits获取,但总是不成功,请问有比较快的方法吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 BITMAPINFOHEADER bmiHdr;memset(&bmiHdr, 0, sizeof(bmiHdr)); // initialize to zero is neccessarybmV4Hdr.bV4Size = sizeof(bmiHdr);// receive bitmap header infomationsGetDIBits(hDC, hBitmap, 0, 0, NULL, (LPBITMAPINFO)&bmiHdr, DIB_RGB_COLORS);LPBYTE pszDIB = new BYTE[bmiHdr.biSize + bmiHdr.biSizeImage];memcpy(pszDIB, &bmiHdr, sizeof(bmiHdr));// receive the DIB bitsGetDIBits(hDC, hBitmap, 0, bmiHdr.biHeight, pszDIB + bmiHdr.biSize, (LPBITMAPINFO)pszDIB, DIB_RGB_COLORS);LPVOID pvDIBits = pszDIB + bmiHdr.biSize;pvDIBits 保存了返回的位图数据。以上代码省略了错误处理及 8-bit 调色板位图的处理,此外,数据的格式和 bmiHdr.biBitCount 有关,其中每个扫描行的字节数为:#define WIDTHBYTES(bits) ((DWORD)(((bits)+31) & (~31)) / 8) ALT事件 VC COM编程学习 world-space到page-space 初学者向各位请教!!! 如何在控件中传递HTREEITEM参数类型 初学者提问!1、在MFC ActiveX中如何&在哪里 添加方法?2、如何创建一静态窗体! 程序员怎么样 高分求Visual studio.net(中文企业)的下载地址!!! 哪有IDL文档的编写资料??? 程序只运行一个进程,再次运行传参数给第一个进程的问题 关于图像和句柄 关于外壳程序???
memset(&bmiHdr, 0, sizeof(bmiHdr)); // initialize to zero is neccessary
bmV4Hdr.bV4Size = sizeof(bmiHdr);// receive bitmap header infomations
GetDIBits(hDC, hBitmap, 0, 0, NULL, (LPBITMAPINFO)&bmiHdr, DIB_RGB_COLORS);LPBYTE pszDIB = new BYTE[bmiHdr.biSize + bmiHdr.biSizeImage];
memcpy(pszDIB, &bmiHdr, sizeof(bmiHdr));// receive the DIB bits
GetDIBits(hDC, hBitmap, 0, bmiHdr.biHeight,
pszDIB + bmiHdr.biSize, (LPBITMAPINFO)pszDIB, DIB_RGB_COLORS);LPVOID pvDIBits = pszDIB + bmiHdr.biSize;pvDIBits 保存了返回的位图数据。以上代码省略了错误处理及 8-bit 调色板位图的处理,此外,数据的格式和 bmiHdr.biBitCount 有关,其中每个扫描行的字节数为:#define WIDTHBYTES(bits) ((DWORD)(((bits)+31) & (~31)) / 8)