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信息得到顯示器的物理尺寸,比較複雜,研究中
函數原型: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信息得到顯示器的物理尺寸,比較複雜,研究中
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.