我写了一个测试程序来抓图。压缩方式用BI_JPEG的时候无法在窗口显示,为BI_RGB的时候只显示黑白2色,还有就是抓下来的位图数据太大,都有1MB了,用SOCKET传起来网络吃不消,大虾们,帮帮小弟解决下问题好不#include<windows.h>
#include"resource.h"HINSTANCE hInst;
HWND hMain;HDC hScreen,hScreenMem,hdc,hmem;
HBITMAP hScreenBm,hbm;
BITMAP stbm;
BITMAPINFO stbmi;
int cxScreen,cyScreen;char* szBuffer;BOOL CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
hInst=hInstance;cxScreen=GetSystemMetrics(SM_CXSCREEN);
cyScreen=GetSystemMetrics(SM_CYSCREEN);hScreen=GetDC(NULL);hScreenMem=CreateCompatibleDC(hScreen);
hScreenBm=CreateCompatibleBitmap(hScreenMem,cxScreen,cyScreen);SelectObject(hScreenMem,hScreenBm);BitBlt(hScreenMem,0,0,cxScreen,cyScreen,hScreen,0,0,SRCCOPY);RtlZeroMemory(&stbmi,sizeof stbmi);stbmi.bmiHeader.biSize=sizeof BITMAPINFOHEADER;
stbmi.bmiHeader.biBitCount=24;
stbmi.bmiHeader.biCompression=BI_RGB;//压缩方式
stbmi.bmiHeader.biHeight=cyScreen;
stbmi.bmiHeader.biWidth=cxScreen;
stbmi.bmiHeader.biPlanes=1;
stbmi.bmiColors[0].rgbBlue=8;
stbmi.bmiColors[0].rgbGreen=8;
stbmi.bmiColors[0].rgbRed=8;
szBuffer=(char*)malloc(cxScreen*cyScreen*4);GetDIBits(hScreen,hScreenBm,0,cyScreen,(LPVOID)szBuffer,&stbmi,DIB_RGB_COLORS);DialogBoxParam(hInst,MAKEINTRESOURCE(IDD_DIB),NULL,WndProc,NULL);return 0;
}BOOL CALLBACK WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
static int cxWnd,cyWnd;
switch(uMsg)
{
case WM_INITDIALOG:hdc=GetDC(hWnd);
hmem=CreateCompatibleDC(hdc);
hbm=CreateCompatibleBitmap(hmem,cxScreen,cyScreen);
SelectObject(hmem,hbm);
SetDIBits(hmem,hbm,0,cyScreen,szBuffer,&stbmi,DIB_RGB_COLORS);return TRUE;
case WM_PAINT:
BitBlt(hdc,0,0,500,500,hmem,0,0,SRCCOPY);
return TRUE;
case WM_CLOSE:
EndDialog(hWnd,0);
return TRUE;
}
return FALSE;
}