VC有没有在屏幕寻找颜色获得坐标的函数
解决方案 »
- VC2010使用CCoolBar的问题
- VC6的MFC有没有什么简单的界面组件或库
- 登陆窗口的运行机理?
- 如何在visual c++ mfc 对话框模式下,播放avi文件。只用api函数,不用控件。希望详细点。谢谢
- 请问如何将cstring类型转换成byte类型的数据
- 1.SystemName是否等于GetComputerName()的返回值? 2.SetFileTime()的第一个参数问题?
- 串口接收字节数不够问题
- vc中定义的unsigned char型字符变量应当是一个字节,输出怎么是两个呢?(新)
- 提个小问题^_^
- 怎么能不在任务栏显示我的程序?
- ****高分求助VBA转换VC代码****
- 全局钩子的问题
BitBlt一般用法是将物理内存的内容绘制到屏幕,如果把那两个参数反一下,就将屏幕内存的内容绘制到了物理内存,即排屏的基本原理
编写人:Ivy
功 能:将屏幕内存复制到物理内存
参 数:无
返回值:HBITMAP 复制到物理内存的位图信息
************************************************************/
HBITMAP CScrnCapture::CopyScreenToBitmap()
{
// 屏幕内存和物理内存
HDC hScrDC, hMemDC;
// 位图句柄
HBITMAP hBitmap, hOldBitmap;
// 位图宽度和高度
int nWidth, nHeight; //为屏幕创建设备描述表
hScrDC = CreateDC("DISPLAY", NULL, NULL, NULL); //为屏幕设备描述表创建兼容的内存设备描述表
hMemDC = CreateCompatibleDC(hScrDC); // 获得屏幕的宽度和高度,作为位图的宽度和高度
nWidth = GetDeviceCaps(hScrDC, HORZRES);
nHeight = GetDeviceCaps(hScrDC, VERTRES); // 创建一个与屏幕设备描述表兼容的位图
hBitmap = CreateCompatibleBitmap(hScrDC, nWidth, nHeight); // 把新位图选到内存设备描述表中
hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap); // 把屏幕设备描述表拷贝到内存设备描述表中
BitBlt(hMemDC, 0, 0, nWidth, nHeight, hScrDC, 0, 0, SRCCOPY); //得到屏幕位图的句柄
hBitmap = (HBITMAP)SelectObject(hMemDC, hOldBitmap); //清除
DeleteDC(hScrDC);
DeleteDC(hMemDC); // 返回位图句柄
return hBitmap;
}
BOOL CScrnCapture::SaveBitmap(HBITMAP hBitmap , CString FileName)
{
BITMAP bm;
BITMAPINFO bmInfo;
BITMAPINFOHEADER *bmHeadInfo;
BITMAPFILEHEADER bmFileHead;
int width,height,bits,bmSize;
BYTE *lpbmBits; //得到位图头信息指针
bmHeadInfo=&(bmInfo.bmiHeader);
if(hBitmap)
{
//得到对象
GetObject(hBitmap,sizeof(BITMAP),&bm); //位图宽度和高度
width=bm.bmWidth;
height=bm.bmHeight; //色深
bits=bm.bmBitsPixel;
if(bits>=16) //RGB系统
{
//将宽度补成4的倍数
width*=3;
bits=width%4;
width+=bits;
//计算位图尺寸
bmSize=height*width; //填充位图文件头信息
bmFileHead.bfSize=sizeof(bmFileHead)+sizeof(BITMAPINFO)+bmSize;
bmFileHead.bfType=(WORD)(('M'<<8)|'B'); // it must be "BM"
bmFileHead.bfReserved1=0; //must be 0
bmFileHead.bfReserved2=0; //must be 0
bmFileHead.bfOffBits=sizeof(bmFileHead)+sizeof(BITMAPINFOHEADER); //the bitmap bits offset. //填充位图头信息
memset(&bmInfo,0,sizeof(bmInfo));
bmHeadInfo->biSize=sizeof(BITMAPINFOHEADER);
bmHeadInfo->biBitCount=24; //24bits color. I only support this in this version.
bmHeadInfo->biHeight=height;
bmHeadInfo->biWidth=bm.bmWidth;
bmHeadInfo->biCompression=BI_RGB; //not compressed.
bmHeadInfo->biPlanes=1; //must be 1.
lpbmBits=new BYTE[bmSize]; //allocate the memory. //将位图字节拷贝进缓冲区
GetDIBits(GetDC(NULL),hBitmap,0,height,lpbmBits,&bmInfo,DIB_RGB_COLORS); //字节已存入lpbmBits,做你想做的就行了 delete []lpbmBits;
}
else
{
//AfxMessageBox("256 colors or lower is not supported.");
}
} return TRUE;
}