Windows DDB和DIB技术应用(3)--图元外边矩形检测
GDI/GDI+中只有对字体的外边框的测量,而没有提供对点,线,面,曲线的外边框获取函数。下面是本人利用DIB技术编写的探测简单图元,甚至也可以探测自己定义的复杂图元的外边矩形框的函数。本人已经测试,效果很棒。
bool GetFeatureRange(void *object, //自己定义的图元对象
CRect rect, // DIB屏幕大小
CDC *pDC, //绘图设置
CRect &retVal // 检测范围
)
{
CDC memDC; //临时绘图设备
COLORREF bkcolor = RGB(255,255,255); // 背景色
//创建临时设备
memDC.CreateCompatibleDC(pDC);
// 建立一个与屏幕显示相同大小的DIB位图
BITMAPINFO info;
memset(&info.bmiHeader,0,sizeof(BITMAPINFOHEADER));
info.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
info.bmiHeader.biWidth = rect.Width();
info.bmiHeader.biHeight = rect.Height();
info.bmiHeader.biPlanes = 1;
info.bmiHeader.biBitCount = 32;
info.bmiHeader.biCompression = BI_RGB; PVOID pBits; // 位图数据指针
HBITMAP hbitmap = CreateDIBSection(memDC.m_hDC,&info,DIB_RGB_COLORS,
&pBits,0,0);
HBITMAP hOldBitmap = (HBITMAP)memDC.SelectObject(hbitmap);
// 使用背景色清除位图
memDC.FillSolidRect(0,0,rect.Width(), rect.Height(), bkcolor); // 绘制图元
object->Draw(...);
// 还原位图
memDC.SelectObject(hOldBitmap);
// 销毁临时绘图设备
memDC.DeleteDC();
// 获取位图信息
CBitmap *pBitmap = CBitmap::FromHandle(hbitmap);
BITMAP bmp;
pBitmap->GetBitmap(&bmp);
BYTE *pixels = (BYTE*)bmp.bmBits;
// 探测范围
bool bExist = false;
// DIB存储方向有下至上 颜色存储形式BGR
BYTE r,g,b;
for(int i = 0; i < bmp.bmHeight; i++)
{
for(int j = 0; j < bmp.bmWidth; j++)
{
b = *(pixels++);
g = *(pixels++);
r = *(pixels++);
pixels++; //跳过透明度 位图像素占32位字节
if(RGB(r,g,b) != bkcolor)
{
if(bExist){
retVal.top = i;
if(retVal.left > j) retVal.left = j;
if(retVal.right < j) retVal.right = j;
}
else
{
retVal.left =
retVal.right = j;
retVal.top =
retVal.bottom = i;
bExist = true;
}
}
}
} if(bExist) //调整与屏幕相同的坐标
{
retVal.top = bmp.bmHeight - retVal.top;
retVal.bottom = bmp.bmHeight - retVal.bottom;
}
pBitmap->DeleteObject();
return bExist;
}
Windows DDB和DIB技术应用(3)--图元外边矩形检测的更多相关文章
- DDB与DIB
DB与DIB的区别是什么?觉得书上介绍的有点抽象.不容易理解.他们两者之间的区别的“物理意义” [“现实意义”]——姑且这么叫吧,呵呵!被这个问题困扰了很久,所以今天决定好好查资料总结一下,把它彻底搞 ...
- kaggle信用卡欺诈看异常检测算法——无监督的方法包括: 基于统计的技术,如BACON *离群检测 多变量异常值检测 基于聚类的技术;监督方法: 神经网络 SVM 逻辑回归
使用google翻译自:https://software.seek.intel.com/dealing-with-outliers 数据分析中的一项具有挑战性但非常重要的任务是处理异常值.我们通常将异 ...
- DDB与DIB的区别
DDB(设备相关位图) DDB依赖于具体设备:DDB的颜色模式必需与输出设备相一致.例如,如果当前的显示设备是256色模式,那么DDB必然也是256色的.在256色以下的位图中存储的像素值是系统调色板 ...
- DirectX11 With Windows SDK--24 Render-To-Texture(RTT)技术的应用
前言 尽管在上一章的动态天空盒中用到了Render-To-Texture技术,但那是针对纹理立方体的特化实现.考虑到该技术的应用层面非常广,在这里抽出独立的一章专门来讲有关它的通用实现以及各种应用. ...
- windows核心编程 DLL技术 【转】
注:本文章转载于网络,源地址为:http://blog.csdn.net/ithzhang/article/details/7051558 本篇文章将介绍DLL显式链接的过程和模块基地址重定位及模块绑 ...
- windows、linux劫持技术
windows系统以下能够利用detours劫持 realse 模式劫持,调试的程序不能够 函数劫持能够实现的效果. 函数的劫持原理 我们怎样实现-detours detours是微软亚洲研究院出品 ...
- [技术博客]windows中使用docker技术
背景 我们的工程使用了一个叫做termux的安卓上的linux终端,这个终端在所有的软件包里硬编码了软件的运行路径(/data/data/com.termux/..),由于安卓系统的权限设计,我们名为 ...
- windows server自动化发布——技术积累与整理
文章:应用在Windows系统中的自动化部署实践 博主大概讲解了一遍如何摸索实现自动化部署.不过内容不详细,很多具体细节需要自己摸索. 标题:windows server 部署服务(WDS) 地址:h ...
- Windows 下多线程编程技术
(1) 线程的创建:(主要以下2种) CWinThread* AfxBeginThread(AFX_THREADPROC pfnThreadProc, LPVOID lParam, int nPrio ...
随机推荐
- 详解如何在linuxmint上用源码包安装nodejs
第一步:安装依赖包 因为Linuxmint 和 Ubuntu 同属 Debian系的Linux,而且Linuxmint是建立在Ubuntu的基础上的,所以Ubuntu下的命令和包,Linuxmin ...
- 入门指引 - PHP手册笔记
曾经简单的学习过PHP,看的是<PHP和MySQL Web开发>,还有万能的搜索引擎的帮助.这次准备系统的学习一下,参考资料是PHP Manual. PHP能做什么 PHP主要用于服务端的 ...
- Python中yield深入理解
众所周知,python中的yield有这样的用法: def test(alist): for i in alist: yield i 这样,这个test函数就变成了一个生成器,当每次调用的时候,就会自 ...
- ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小 错误分析
目录(?)[+] 1. 问题起因 最近在进行Oracle的一些操作时,总会遇到这个错误: ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小,错误如下: ORA-00604: ...
- CRAHNs: Cognitive radio ad hoc networks
2009 Elsevier 综述了认知无线AD Hoc网络中的各个方面的研究进展及面临的挑战.包括传输层.网络层.链路层的协议设计. 根据CCC(common control channel)的实现思 ...
- ZigBee 协议规范
ZigBee协议栈体系结构由应用层.应用汇聚层. 网络层.数据链路层和物理层组成,如下图所示: 图1 ZigBee 协议栈体系的层次结构 应用层定义了各种类型的应用业务,是协议栈的最 ...
- IP defragment
snort IP defragment 模型: BSD favors an original fragment with an offset that is less than or equal to ...
- 【思考题】CSDN第四届在线编程大赛2014初赛:带通配符的数
题目要求: 输入参数:参数A,含有任意个数的?的数值字符串,如:12?4,?代表一位任意数 参数B,不含?的数值字符串,长度与参数A一致 输出结果:参数A比参数 ...
- 不是技术牛人,如何拿到国内IT巨头的Offer
原地址:http://blog.csdn.net/lsldd/article/details/13506263 不久前,byvoid面阿里星计划的面试结果截图泄漏,引起无数IT屌丝的羡慕敬仰.看看这些 ...
- 可执行文件(ELF)格式的理解
摘自http://www.cnblogs.com/xmphoenix/archive/2011/10/23/2221879.html 可执行文件(ELF)格式的理解 ELF(Executable an ...