Windows 中GDI、设备描述表和位图
在Windows中,所有的图形和图像显示操作都是通过GDI(Graphic Device Interface)模块完成,,而GDI的显示都是由设备描述表(Context Device,简称DC)来完成的,设备描述表同显示驱动程序打交道,显示驱动程序再同显示硬件打交道,最终得到指定的显示效果。基本所有的书提到设备描述表时都告诉我们把设备表看成一个虚拟对象,所有显示操作同它打交道即可。诚然,在写程序的时候这样是明智的,然而,当遇到具体的显示细节问题时(如调色板的使用、DIB图像的显示等),去了解设备描述表的结构是必然的,而设备描述表结构的核心是位图。相信看完这篇博客你可以一解在GDI编程中的许多疑惑。
1.GDI的构成
GDI的几个基本对象是画笔(HPEN),画刷(HBRUSH),字体(HFONT),位图(HBITMAP),调色板(HPALETTE),元文件(HMETAFILE)。联系这些基本对象和GDI显示输出的是设备描述表(HDC)。
通常我们使用GDI的格式类似如下:
//获取设备描述表
hdc = GetDC(hwnd);//更改设备描述表项
SelectObject(hdc, GetStockObject(GRAY_BRUSH));//通过设备描述表执行相应显示操作
MoveToEx(hdc, 0, 0, NULL);
LineTo(hdc, 10, 10);//恢复设备秒速表项
SelectObject(hdc, GetStockObject(WHITE_BRUSH));//取消获得设备描述表
ReleaseDC(hwnd, hdc);
前面我们已经说过,实际上USER模块根本上也是由GDI来完成的,可以猜想整个GDI的句柄表结构(看做结构体和成员关系)如下:(HMETAFILE比较特殊,暂不讨论)
我们从HWND获得当前DC,通过选进不同的属性来调整DC当前属性项,这样显示操作时就会得到对应效果。
2.Windows显示原理
1.显示过程
2.显卡发展史
单色显卡
16色显卡
256色显卡
这样每个像素点的值为0x00~0xFF,即256中颜色。同样为了确认0-255中每个数字代表什么RGB色,采用了256色调色板。然而,人们对于256色显示效果依然不满意,这时候的Windows不再是简单的使用调色板了,这样就说道了我们上面说到的问题,可以通过设备描述表动态调整调色板表项的RGB值,即采用这种迂回的方式在不同显示需求下达到最好的显示效果。
16位显卡
24位和32位显卡
3.监视器的超前发展
3.设备描述表和位图
4.总结
Windows 中GDI、设备描述表和位图相关推荐
- K8s(Kubernetes), docker中的registry是什么意思?和windows中的注册表registry有什么区别?
相信很多初学者会对K8s(Kubernetes)中的registry这个概念感到很困惑,因为翻译成中文实在是不好翻译,直译"注册"就让人觉得非常费解.网上对于这方面的中文资料也很少 ...
- 如何通过使用 64 位版本 Windows 查看系统注册表 WOW6432Node
64 位版本 Windows 中的注册表分为 32 位注册表项和 64 位注册表项.许多 32 位注册表项与其相应的 64 位注册表项同名,反之亦然. 64 位版本 Windows 包含的默认 64 ...
- 在 Windows 中启用自动登录功能
在 Windows 中启用自动登录功能 本文介绍了如何通过将密码和其他相关信息存储在注册表数据库中以配置 Windows 自动执行登录过程. 通过使用此功能,其他用户可以启动您的计算机并使用您建立的帐 ...
- Windows编程设备描述表的概念和在客户区绘制、在窗口标题栏绘制、在桌面绘制图解
设备描述表 设备描述表是一个定义一组图形对象及其属性.影响输出的图形方式(数据)结构.windows提供设备描述表,用于应用程序和物理设备之间进行交互,从而提供了应用程序设计的平台无关性.设备描述表又 ...
- MFC中设备描述表dc的使用
1 以下代码我是在View类中实现的: 2 /** 利用平台SDK实现画线功能 3 // 首先获得窗口的设备描述表 4 HDC hdc; 5 hdc = ::GetDC( m_hWnd ); //调用 ...
- linux应用程序注册表,如何打开 Linux 中 Windows 程序的注册表编辑器
在我们借助CrossOver这款兼容软件在Linux操作系统中运行Windows应用程序的过程中,有的时候我们可能会遇到有关要求,为Windows应用程序设置注册表项的疑难解答问题的提示,指南或说明. ...
- Windows 输入法在注册表中的管理
Windows 输入法在注册表中的管理 查看语言栏的输入法 法一 法二 查看默认输入法 找到默认输入法的 CLSID 根据 CLSID 查找对应的输入法 WINDOWS下输入法中英文切换 切换输入法半 ...
- WINDOWS中关于内存管理的注册表优化
WINDOWS中关于内存管理的注册表优化 [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/Memory Man ...
- C 怎么处理windows路径_在Windows中使用msix打包工具监视注册表和文件
以下内容不涉及任何专业知识,所有人都可以看懂. 此方法只适用于Windows10及更高版本 1.目的 有时候,我们需要找到知道某一时间段内某个应用程序对系统做了哪些修改,例如: 1.1.Windows ...
最新文章
- Redis 高级特性(3)—— 持久化及数据恢复
- ARM 寄存器 和 工作模式了解
- tf.keras.losses.categorical_hinge 分类铰链 损失函数 示例
- Dumpzilla工具第615行bug的解决办法
- 〖Java〗Eclispe安装和使用viplugin
- Zookeeper知识学习
- unity3d中画线有几种方式_Spring RestTemplate中几种常见的请求方式
- [云炬创业基础笔记]第十一章创业计划书测试8
- GetModuleHandle,AfxGetInstanceHandle使用区别
- Easyui+Spring+Mybatis完整示例(前台)
- 兼容pc端和移动端的轮播图插件 swiper.js
- BP神经网络原理分析及c++代码实现(上)
- 谷歌如何捕获街景中的门牌号码
- 扩展欧几里得算法推导
- 计算机试图启动宏,打开电子表格时,将提示禁用或启用宏的解决方案
- 【WiFi】WiFi安全类型
- 用一个开关,控制LEP灯的亮和灭
- 《Wireshark数据包分析实战》读书笔记
- Glide加载相同URL时由于缓存无法更新图片的问题
- 服务器系统进不了系统错误代码,重启服务器进入点晴OA的Email模块时提示子系统密码错误,错误代码2027:800403e9,如何解决?...
热门文章
- 计算机辅助翻译论文的应用环境,计算机辅助翻译(CAT)技术在现代翻译中的应用探析.pdf...
- 质量可靠的软件安全测试,漏洞盒子 | 互联网安全测试众测平台
- WiFi广告软件实现微信扫一扫看广告有效加粉方法
- XSS攻击与CSRF攻击
- 阴阳师游戏的特色系统有哪些?
- (Inside Out) Web地图坐标系——TDT的神奇
- Udesk即时通讯(IM)网页插件入门
- VC++上机例题——画椭圆(图形方法总结)
- VMware Tools未更新导致vRA7自动化部署Windows虚拟机失败
- for循环 | range 对象