WPF關(guān)于設(shè)備無(wú)關(guān)性的理解
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
wpf的像素單位是1/96*系統(tǒng)dpi。當(dāng)前系統(tǒng)dpi是96,那么wpf的一個(gè)單位長(zhǎng)就是1px像素。這個(gè)系統(tǒng)dpi的意思就是物理單位一英寸里有多少個(gè)像素點(diǎn),比如windows標(biāo)準(zhǔn)的96dpi,意味著一英寸有96個(gè)像素。則每個(gè)像素大小是1/96(英寸)。計(jì)算dpi的方法是(根號(hào)下(分辨率橫向平方+分辨率縱向平方))/顯示屏對(duì)角線尺寸(英寸位單位),比如27寸的2k顯示器,dpi的計(jì)算就等于(根號(hào)下(2560*2560)+(1440*1440))/27。這個(gè)分辨率就是顯示器橫向2560個(gè)像素,縱向1440個(gè)像素。 接下來(lái),我們可以計(jì)算一個(gè)With=96的按鈕在dpi等于96的系統(tǒng)上的按鈕的物理英寸大小為96*(1/96*96)/96=1(英寸)。解釋一下96*(1/96*96)表示這個(gè)按鈕的長(zhǎng)是多少像素,最后除以96表示除以的是dpi,得到的結(jié)果就是1英寸。比如一個(gè)dpi為192的系統(tǒng),一個(gè)按鈕長(zhǎng)為96的按鈕的像素值96*(1/96*192)=192px,192(px)/dpi192=1(英寸),雖然dpi增大了,一個(gè)長(zhǎng)96的按鈕的像素值是192px,但是它再除以192dpi,最終得到的結(jié)果還是物理尺寸1英寸。 總的來(lái)講,wpf的設(shè)備無(wú)關(guān)性,我的理解就是,無(wú)論系統(tǒng)的分辨率是多少,寫(xiě)按鈕的Width=96,在這些不同的dpi的顯示器上,這個(gè)按鈕的物理尺寸長(zhǎng)度的依然是1英寸。但是如果調(diào)整了dpi的倍數(shù),比如120%dpi,那么按鈕的物理尺寸就會(huì)相應(yīng)的變長(zhǎng)。 在winform中,就會(huì)有這樣的現(xiàn)象,應(yīng)用在dpi為96的系統(tǒng)開(kāi)發(fā),然后放在dpi為85的系統(tǒng)C上,就會(huì)發(fā)現(xiàn)應(yīng)用的系統(tǒng)的字體,控件長(zhǎng)寬變寬了。這是因?yàn)楸緛?lái)a控件寫(xiě)Width=96,但是在C系統(tǒng)上,一英寸只需要85個(gè)像素,那么96/85>1英寸了,所以它看起來(lái)就變長(zhǎng)了。同理,如果是放在dpi為192的系統(tǒng)M上,就會(huì)發(fā)現(xiàn)控件的長(zhǎng)寬字體大小都縮小了一倍,就是因?yàn)?6/192=0.5(英寸),它只有0.5英寸長(zhǎng)了,縮小了一半。 ?這也是為什么windows會(huì)有放大dpi的功能,在120%放大,這個(gè)放大不是說(shuō)dpi*1.2這樣放大,而是放大的像素點(diǎn)的大小。那么放大后,相當(dāng)與表示1英寸所需的像素點(diǎn)將會(huì)減少,因?yàn)橄袼攸c(diǎn)放大了,那么96標(biāo)準(zhǔn)dpi下的軟件,在高dpi系統(tǒng)的120%倍放大效果下,它的物理尺寸就會(huì)被拉長(zhǎng),因?yàn)橄袼攸c(diǎn)的邊大了,這樣字體和控件大小更接近96dpi系統(tǒng)下的大小了。 轉(zhuǎn)自https://www.cnblogs.com/HelloQLQ/p/18803102 該文章在 2025/4/3 15:20:39 編輯過(guò) |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |