【转载】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 像素转厘米(英寸),码迷,mamicode.com

时间: 2024-10-25 12:52:32

【转载】VC GDI 像素转厘米(英寸)的相关文章

VC GDI双缓冲机制绘图防屏幕闪烁实现步骤

在OnDraw(CDC* pDC) 中添加如下代码 CDC MemDC; //首先定义一个显示设备对象 CBitmap MemBitmap;//定义一个位图对象 //随后建立与屏幕显示兼容的内存显示设备 MemDC.CreateCompatibleDC(NULL); //这时还不能绘图,因为没有地方画 ^_^ //下面建立一个与屏幕显示兼容的位图,至于位图的大小嘛,可以用窗口的大小,也可以自己定义(如:有滚动条时就要大于当前窗口的大小,在BitBlt时决定拷贝内存的哪部分到屏幕上) MemBit

【转载】gdi+ 内存泄漏

[转载]http://issf.blog.163.com/blog/static/1941290822009111894413472/ 最近用GDI+实现了几个自定义控件,但是发现存在内存泄露问题 BOOL CGdiplusBugDlg::OnEraseBkgnd(CDC* pDC) {Image* pImage = Image::FromFile(L"E:\\bac.bmp");Graphics g(pDC->m_hDC); g.DrawImage(pImage,0,0); r

腰围2尺1,2,3,4,5,6,7,8寸各自等于是多少厘米/英寸(对比表)

腰围2尺1,2,3,4,5,6,7,8,9寸转换结果: ■70厘米 ■2尺1 ●26英寸 ■74厘米 ■2尺2 ●28英寸 ■76厘米 ■2尺3 ●29英寸 ■78厘米 ■2尺35●30英寸 ■80厘米 ■2尺4 ●31英寸 ■82厘米 ■2尺45●32英寸 ■84厘米 ■2尺5 ●33英寸 ■86厘米 ■2尺6 ●34英寸 ■88厘米 ■2尺65●35英寸 ■90厘米 ■2尺7 ●36英寸 ■92厘米 ■2尺75●37英寸 ■94厘米 ■2尺8 ●38英寸 ■96厘米 ■2尺85●39英寸 ■

【转载】GDI 映像方式 之 SetViewportExtEx 与 SetWindowExtEx 解析

所谓视口代表设备,比如屏幕. 窗口代表我们的思维. 我们对windows说在(5,6)处画个点(调用GDI函数).windows认为是在我们的思维的(5,6)处画了个点.(也就是说5,6是逻辑坐标,GDI函数中的大部分都是逻辑坐标) 那么,要把它映射到屏幕上,必须作一些解释. 解释包括: 原点在哪里? 5,6代表什么? 注意,解释5,6时不光是距离问题,还有方向呢! SetViewportOrgEx和SetWindowOrgEx是管第一个问题的.设置原点和设置X轴Y轴方向(SetMapMode)

【转载】GDI 映像方式 之 SetViewportOrgEx 与 SetWindowOrgEx 解析

SetViewportOrgEx 与 SetWindowOrgEx 解析 这两个函数,用来改变视端口和窗口的原点,并都具有改变轴的效果,以致(0,0)不再指左上角. 「视端口」是依据设备坐标(图素)的.通常,视端口和显示区域相同.视端口也可以是指整窗口坐标或者屏幕坐标.点(0,0)是显示区域(或者整个窗口或屏幕)的左上角,x的值向右增加,y的值向下增加. 「窗口」是依据逻辑坐标的,逻辑坐标可以是图素.毫米.英寸或者您想要的任何其它单位. 对于视端口和窗口的概念可以这样理解: 幻想显示器大小可以随

像素、英寸、厘米之间的换算关系

72像素/英寸=28.346像素/厘米 300像素/英寸=118.11像素/厘米 1 厘米=0.3937 英寸 1 英寸=2.54 厘米   首先告诉大家一个不幸的消息:像素不能直接换算成英寸.厘米,要在dpi下才能换算! photoshop中两种分辨率换算 72像素/英寸=28.346像素/厘米 300像素/英寸=118.11像素/厘米 1 厘米=0.3937 英寸 1 英寸=2.54 厘米 以常见1024像素对比: 1024像素=3.413英寸=8.67厘米        (300像素/英寸

图片像素英寸厘米之间的单位换算

今天朋友用photoshop处理图片时要把图片保存指定的大小,但她只对厘米要形像感,可是在软件里保存的图片没有这个单位,只能保存的单位为像素:用其它的软件呢只能保存为英寸了.我在网上去找了下资料,终于找到换算公式了,特记录一下:) 72像素/英寸=28.346像素/厘米 300像素/英寸=118.11像素/厘米 1 厘米=0.3937 英寸 1 英寸=2.54 厘米 首先告诉大家一个不幸的消息:像素不能直接换算成英寸.厘米,要在dpi下才能换算! photoshop中两种分辨率换算 72像素/英

知识百科:中文字号、磅和像素对照关系

本文介绍中文字号.磅(pt)和像素(px)的对照关系,方便大家设计网页时参考合适的字号,一般网页正文字体为12px到16px,相当于9-12磅字号大小,标题文字可以稍大一点,具体参见下文表格字体大小,本文内容来源于网络汇总,做了点补充,如有错误,欢迎指出. 一.基本单位概念 单位 中文名称 转换 inch 英寸 1英寸=2.54厘米 cm 厘米   pt 磅或点数,是point简称 1pt=1/72(英寸) px 像素,是pix简称         二.中文字号大小.磅和像素对照关系 下表参照显

像素与字号的换算(转)

源:像素与字号的换算 在做界面时,往往需要精确计算坐标和字体大小,而字体一般是用磅为单位的,但在制作时,如果要把字体放到图片上,并保持相应大小,就需要进行换算. 经过计算: 1 磅=1/72 英寸,这是一个单位值 1.3象素=1磅(高) 96象素=1英寸 这里能够用到三个值,算起来就很方便了 比如:9(磅)号字就是 9X1.3=象素值 字号    磅      毫米数 初号    42      14.82 小初    36      12.70 一号    26      9.17 小一