作者Achillean (山猪元年革命志士)
看板C_Sharp
标题[问题] 如何取得真实dpi or 萤幕物理大小
时间Fri Jul 12 10:28:14 2013
因为一些应用
在相同解析度1366*768、不同尺寸10"~14"的萤幕
呈现的画面大小也会不一样
所以需要计算萤幕大小反推dpi
忘了使用哪个基本的function跟系统要dpi
都是96dpi,好像这是系统设定font等等的期望值
而不是真实dpi
网路上查了一些资料说是可以用
GetDeviceCaps(GetDC(GetDesktopWindow), VERTSIZE)
from
http://ppt.cc/Rtbp
出来的值,跟我用尺直接量测萤幕的物理大小,差蛮多的
有一套软体可以几乎精准的取得萤幕的物理大小
想了解是怎麽做到的?
https://dl.dropboxusercontent.com/u/17190710/viewer.png
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.116.78.236
1F:→ proach:我猜他去看萤幕的产品名,抓出中间的关键字 07/12 10:44
2F:→ proach:或是萤幕有个辨别资讯,里面有写自己的尺寸大小? 07/12 10:45
这个我就不知道要怎麽做了
目前有个线索是好像reg里面有资讯
但要会拆解
另外一个想法是c#可否得知一个
Graphics graphics = this.CreateGraphics();
充满全萤幕的物理尺寸大小?
这样反除解析度就可以取得dpi
----------------------------------------------------------------------
http://blog.csdn.net/morewindows/article/details/8502592
目前查到这篇c++是可以正确取得萤幕大小
不过GetDC(NULL)不知道怎麽改写为c#版本?
也是在网路上面找到范例
using (System.Drawing.Graphics g
= System.Drawing.Graphics.FromHwnd(IntPtr.Zero))
{
IntPtr hdc = g.GetHdc();
...
}
也是用GetDeviceCaps,抓出来的就错了
目前猜想是hdc产生方式不对
ps. 不是每台电脑都对,结果跟c#版本一样...orz
3F:→ openeyes222:edid code里没有物理尺寸大小好吗? 07/12 15:04
thx, 给了edid这个线索
小弟实在不懂才来请教
http://zh.wikipedia.org/wiki/EDID
66: 水平图像尺寸 (单位为公厘)
67: 垂直图像尺寸 (单位为公厘)
这是无法取得吗
4F:→ openeyes222:装edid的tool来看看,对於萤幕的Timing,物理大小是非 07/12 22:19
5F:→ openeyes222:必要的。 07/12 22:19
thx sir, 我使用EDID Viewer v4.0.0
得到的资讯非常正确
https://dl.dropboxusercontent.com/u/17190710/rightMM.PNG
410*260 换成16进位为 019A * 0104
参考前面说的在66,67位元
在raw data 找不到匹配的资讯
https://dl.dropboxusercontent.com/u/17190710/RAW.PNG
可以在指点一下吗?
ps.比照对照,终於找到存在15,16,以公分表示萤幕大小
※ 编辑: Achillean 来自: 61.231.151.104 (07/13 00:49)