VC GDI 像素转厘米(英寸)[转发]
【转载】http://blog.sina.com.cn/s/blog_638dd78201018663.html
函数原型:int GetDeviceCaps(int nIndex);
常用的参数有(参考MSDN):
int iHORZSIZE=pDC->GetDeviceCaps(HORZSIZE); // 得到当前显示设备的水平大小(毫米)
int iVERTSIZE=pDC->GetDeviceCaps(VERTSIZE);// 得到当前显示设备的垂直大小(毫米)
int iHORZRES=pDC->GetDeviceCaps(HORZRES);// 得到当前显示设备的水平像素数
int iVERTRES=pDC->GetDeviceCaps(VERTRES);// 得到当前显示设备的垂直像素数
int iLOGPIXELSX=pDC->GetDeviceCaps(LOGPIXELSX);// 得到当前显示设备的水平单位英寸像素数
int iLOGPIXELSY=pDC->GetDeviceCaps(LOGPIXELSY);// 得到当前显示设备的垂直单位英寸像素数
int iPHYSICALWIDTH=pDC->GetDeviceCaps(PHYSICALWIDTH);// 得到当前打印设备的水平大小(毫米)
int iPHYSICALHEIGHT=pDC->GetDeviceCaps(PHYSICALHEIGHT);// 得到当前打印设备的水平大小(毫米)
验证结果:
1.对于打印设备来说完全正确,可以利用上述参数在打印时得到与实际尺寸一致的结果。
2.对于打印设备来说上面的三组参数存在运算关系
iHORZSIZE=iHORZRES*25.4/iLOGPIXELSX;
iVERTSIZE=iVERTRES*25.4/iLOGPIXELSY;
3.对于显示设备来说,LOGPIXELSX和LOGPIXELSY得到的结果和Windows设置的字体有关,100%时为96dpi,150%时为144dpi。
4.至少对我目前的笔记本显示器来说,上述函数调用得到结果只有iHORZRES和iVERTRES是准确的,LOGPIXELSX和LOGPIXELSY为96(我设置的是正常字体),而iHORZSIZE和iVERTSIZE似乎是用72dpi计算出来的:
iHORZSIZE=iHORZRES*25.4/72;
iVERTSIZE=iVERTRES*25.4/72;
不知这个72dpi从何而来
5.对我的笔记本显示器,经验证,改变分辨率和windows字体大小时,3和4的结论都正确,72dpi不变
6.PHYSICALWIDTH和PHYSICALHEIGHT这组参数,只对打印设备有效,得到是当前打印机纸张的全部像素数,而iHORZRES和iVERTRES得到的都是可打印范围的像素数,对显示设备这组参数返回值为0
7.Google结果显示可用读注册表中显示器的EDID信息得到显示器的物理尺寸,比较复杂,研究中
VC GDI 像素转厘米(英寸)[转发]的更多相关文章
- 【转载】VC GDI 像素转厘米(英寸)
[转载]http://blog.sina.com.cn/s/blog_638dd78201018663.html 函数原型:int GetDeviceCaps(int nIndex); 常用的参数有( ...
- GDI 像素(5)
RGB 颜色 使用 RGB 宏可以创建一个由三个整数值(R.G.B)的 COLORREF 值. COLORREF RGB( BYTE byRed, // 红色值(R) BYTE byGreen, // ...
- VC GDI+基础用法VC
#include "GdiPlus.h" // 使用GDI+ 命名空间 using namespace Gdiplus; // 与GDI+ 相关的其它头文件,如:GraphicsP ...
- VC++ GDI 总结 一一 CBitmap类
class CBitmap : public CGdiObject { DECLARE_DYNAMIC(CBitmap) public: static CBitmap* PASCAL FromHand ...
- VC GDI双缓冲机制绘图防屏幕闪烁实现步骤
在OnDraw(CDC* pDC) 中添加如下代码 CDC MemDC; //首先定义一个显示设备对象 CBitmap MemBitmap;//定义一个位图对象 //随后建立与屏幕显示兼容的内存显示设 ...
- Zara带你快速入门WPF(2)---布局篇
一.章节目标 这几章节我们会创建一个完整的Window程序,包括使用DataGrid空间,数据绑定是把.NET类中的数据提供给用户界面的一个重要概念,还允许修改数据,包括.NET4.5新增的INoti ...
- 学习GDI+ (1)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- GDI编程基础
窗口和视口 视口是基于设备的采用的是设备坐标(单位:像素),窗口是基于程序的采用的是逻辑坐标(单位:像素/毫米/厘米等). 在默认的映射模式下,视口是与窗口等同的.但是如果改变其映射模式,则其对应的单 ...
- 对屏幕的理解---分辨率,dpi,ppi,屏幕尺寸,像素 等
1. 名词理解 屏幕尺寸(screen size) 屏幕尺寸(screen size),是屏幕的对角线长度,一般讲的大小单位都是英寸. DPI (dots per inch) dpi 是(英文Dots ...
随机推荐
- IPV6配置
云友“学渣王 ”在帖子里提到需要为阿里云ECS配置IP6地址,根据网上的一些信息,写此例. 如果要求是FQDN地址,请登录到您的域名控制面板,设置一条AAAA记录到新设置的IPv6隧道地址. 在阿 ...
- 2019年年初iOS招人心得笔记(附面试题)
第一部分是我当时准备的面试题 第二部分是我的心得 我重点在本文的第二部分说一下这次面试别人的心得体会.而关于第一部分的面试题,文中不提供答案(因为不是本文的重点) 第一部分:面试题 注意,下面这些题只 ...
- VBA - ONE
1. Grouping our code (1) Modules
- PHP 利用CURL(HTTP)实现服务器上传文件至另一服务器
// 上传端 /** * 向目标地址推送xls文件 * @Date 2019/4/29 */ public function putXls() { // 目标接口 $url = "http: ...
- cygwin的sh: line 15: $'\r': command not found错误
安装dos2unix工具,转换一下sh文件即可 apt-cyg install dos2unix dos2unix xxx.sh
- main.js中封装全局登录函数
1. 在 main.js 中封装全局登录函数 通过 vue 对象的原型扩展,可以扩展一个函数,这样这个函数就可以在每一个界面通过类似指向对象的方式,去访问这个函数. 如下是 main.js 扩展的函数 ...
- java-concurrent包
通常所说的concurrent包基本有3个package组成 java.util.concurrent:提供大部分关于并发的接口和类,如BlockingQueue,Callable,Concurren ...
- studio-3t 配置文件位置
换电脑了,原来的studio-3t的配置 在 C:\Users\用户名\.3T. 将这个目录下的所有文件拷贝到 新电脑里的 相同文件夹,覆盖即可
- condition版生产者与消费者模式
1.简介 在爬虫中,生产者与消费者模式是经常用到的.我能想到的比较好的办法是使用redis或者mongodb数据库构造生产者消费者模型.如果直接起线程进行构造生产者消费者模型,线程容易假死,也难以构造 ...
- vi命令撤销及恢复
u :插销上一步操作 Ctrl + r :恢复被撤销的上一步操作