HDC hScrDC,hMemDC;
HBITMAP hBitmap,hOldBitmap;
int nWidth=::GetSystemMetrics(SM_CXSCREEN);
int nHeight=::GetSystemMetrics(SM_CYSCREEN);
HDC MyDC=::GetDC(m_hWnd);
hScrDC=CreateDC(L"DISPLAY",NULL,NULL,NULL); //这个和下面那一句我试了下效果一样.不知道有什么区别
//hScrDC=::GetDC(NULL);
hMemDC=CreateCompatibleDC(hScrDC);
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); 这样貌似就得到了一个屏幕图象的HBITMAP
我不知道这样得到的HBITMAP和(HBITMAP)LoadImage(NULL,"pic1.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);这样得到的HBITMAP有什么不同...
还有.我试着输出hBitmap想看看它指向的地址结果发现这貌似并不是一个地址...小弟刚接触这个请大哥们讲解讲解
HBITMAP hBitmap,hOldBitmap;
int nWidth=::GetSystemMetrics(SM_CXSCREEN);
int nHeight=::GetSystemMetrics(SM_CYSCREEN);
HDC MyDC=::GetDC(m_hWnd);
hScrDC=CreateDC(L"DISPLAY",NULL,NULL,NULL); //这个和下面那一句我试了下效果一样.不知道有什么区别
//hScrDC=::GetDC(NULL);
hMemDC=CreateCompatibleDC(hScrDC);
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); 这样貌似就得到了一个屏幕图象的HBITMAP
我不知道这样得到的HBITMAP和(HBITMAP)LoadImage(NULL,"pic1.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);这样得到的HBITMAP有什么不同...
还有.我试着输出hBitmap想看看它指向的地址结果发现这貌似并不是一个地址...小弟刚接触这个请大哥们讲解讲解
解决方案 »
- MFC创建的工程怎么去掉或隐藏程序菜单
- error C2059: 语法错误:“)” 紧急求助 VS2010 DirectInput应用
- 像"NtQuerySystemInformation"这种函数怎么调用?用VC6调用不行.文档在哪里?DDK还是MSDN?
- 多种结构客户端怎么区分阿
- 100分求《COM技术内幕》(inside com)的最后例子:Tangram
- 我对前途的茫然,请帮助,有分的
- 诚招VC高手修改一教学控件(待遇从优)
- 为什么用Media Player 播放avi文件的时候没法出图象?
- 各位老大,VC6.0中如何在OnPaint()函数中调用自编的子函数,送分!!!!
- 请问如何动态改变toolbar上按钮的图标?就想最大化按钮一样.
- 用OpenGL显示汉字
- activex开发问题 急!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
HWND hWnd
);
Parameters
hWnd
Handle to the window whose device context is to be retrieved. If this value is NULL, GetDC retrieves the device context for the entire screen. HDC CreateDC(
LPCTSTR lpszDriver,
LPCTSTR lpszDevice,
LPCTSTR lpszOutput,
CONST DEVMODE* lpInitData
);
Parameters
lpszDriver
[in] Long pointer to a null-terminated string that specifies the file name of a driver. If this parameter is set to NULL, the system returns a screen DC.
根据MSDN解释,我个人认为CreateDC的第一个参数设为NULL也可以返回screen DC。
MSDN上的例子是这样调用这个函数的hIC = CreateDC(TEXT("DISPLAY"),NULL,NULL,NULL);
这样就是专门用于获取显示设备的DC
这样得到的HBITMAP与LoadImage得到的HBITMAP是一样的,都是位图句柄,图像信息存放在内存中。
后面是得到本窗口的DCHBITMAP也是一样
你的是create的,LoadImage是具体以个位图的句柄
最后问一下
如果我想用GetBitmapBits函数把那个HBITMAP读入到一个buf中该怎么写呢?
因为这个函数有个参数是这个位图的大小~~~
GetObject(hBitmap,sizeof(bm),&bm);
GetBitmapBits(hBitmap,bm.bmWidth*bm.bmHeight*每位占的字节数,buf);
这个每位占的字节数怎么得到呢????还有我这样做了一后buf里是什么??只有象素数据还是有其他的东西.
GetBitmapBits(hBitmap,bm.bmWidth*bm.bmHeight*bm.bmBitsPixel,buf);
这样就可以了..我这样做了一后buf里是什么??只有象素数据还是有其他的东西.
===========
应该是数据,具体的说就每一个点的RGB值