获取DDB图像的内容

网上大部分资料都是将DDB转换为DIB后,得到图像内容的,可直接得到DDB内容的资料并不多,下面我以截屏为例说下怎么得到DDB的内存,一些API是我从网上找到的,根据我的理解使用的,可能用的不很准确,请大家指出.我没用mfc,以下全是API调用。

void TestGetDDB()
{
	//  设置截屏大小
	LPRECT lpRect=new RECT;
	lpRect->top=0;
	lpRect->left=0;
	lpRect->right=300;
	lpRect->bottom=500;
	HDC       hScrDC, hMemDC;      
	// 屏幕和内存设备描述表
	HBITMAP    hBitmap, hOldBitmap;   
	// 位图句柄
	int       nX, nY, nX2, nY2;      
	// 选定区域坐标
	int       nWidth, nHeight;
	// 确保选定区域不为空矩形
	if (IsRectEmpty(lpRect))
		return ;
	//为屏幕创建设备描述表
	hScrDC = CreateDC(L"DISPLAY", NULL, NULL, NULL);
	//为屏幕设备描述表创建兼容的内存设备描述表
	hMemDC = CreateCompatibleDC(hScrDC);
	// 获得选定区域坐标
	nX = lpRect->left;
	nY = lpRect->top;
	nX2 = lpRect->right;
	nY2 = lpRect->bottom;
	//确保选定区域是可见的
	if (nX < 0)
		nX = 0;
	if (nY < 0)
		nY = 0;
	if (nX2 > m_xScreen)
		nX2 = m_xScreen;
	if (nY2 > m_yScreen)
		nY2 = m_yScreen;
	nWidth = nX2 - nX;
	nHeight = nY2 - nY;
	// 创建一个与屏幕设备描述表兼容的位图
	hBitmap = CreateCompatibleBitmap(hScrDC, nWidth, nHeight);
	// 把新位图选到内存设备描述表中
	(HBITMAP)SelectObject(hMemDC, hBitmap);
	// 把屏幕设备描述表拷贝到内存设备描述表中
	BitBlt(hMemDC, 0, 0, nWidth, nHeight,
		hScrDC, nX, nY, SRCCOPY);
	BITMAP bitmap;
	// 得到位图信息
	GetObject(hBitmap, sizeof(BITMAP), &bitmap);
	// 计算位图大小
	DWORD dwSize = bitmap.bmHeight * bitmap.bmWidthBytes;
	// new点内存空间
	unsigned char* pBits = new unsigned char[dwSize];
	// 将位图内容拷贝到指定空间
	LONG dl = GetBitmapBits(hBitmap, dwSize, pBits);
	//到此pBits中就是DDB内容
	//清除 
	DeleteDC(hScrDC);
	DeleteDC(hMemDC);
	delete(pBits);
	return;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值