[問題] 如何取得真實dpi or 螢幕物理大小

看板C_Sharp作者 (山豬元年革命志士)時間11年前 (2013/07/12 10:28), 編輯推噓0(005)
留言5則, 2人參與, 最新討論串1/1
因為一些應用 在相同解析度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

07/12 10:44, , 1F
我猜他去看螢幕的產品名,抓出中間的關鍵字
07/12 10:44, 1F

07/12 10:45, , 2F
或是螢幕有個辨別資訊,裡面有寫自己的尺寸大小?
07/12 10:45, 2F
這個我就不知道要怎麼做了 目前有個線索是好像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

07/12 15:04, , 3F
edid code裡沒有物理尺寸大小好嗎?
07/12 15:04, 3F
thx, 給了edid這個線索 小弟實在不懂才來請教 http://zh.wikipedia.org/wiki/EDID 66: 水平圖像尺寸 (單位為公釐) 67: 垂直圖像尺寸 (單位為公釐) 這是無法取得嗎

07/12 22:19, , 4F
裝edid的tool來看看,對於螢幕的Timing,物理大小是非
07/12 22:19, 4F

07/12 22:19, , 5F
必要的。
07/12 22:19, 5F
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)
文章代碼(AID): #1Htsd1MN (C_Sharp)