C# 厘米轉成像素


C#中以像素作為尺寸單位,像素是一種相對的尺寸概念,與毫米的轉換與當前顯示器的分辨率有關。在不同分辨率下轉換的系數不同。

借助GDI可以完成毫米至像素的轉換。

public static double MillimetersToPixelsWidth(double length) //length是毫米,1厘米=10毫米
{
    System.Windows.Forms.Panel p = new System.Windows.Forms.Panel();
    System.Drawing.Graphics g = System.Drawing.Graphics.FromHwnd(p.Handle);
    IntPtr hdc = g.GetHdc();
    int width = GetDeviceCaps(hdc, 4);     // HORZRES
    int pixels = GetDeviceCaps(hdc, 8);     // BITSPIXEL
    g.ReleaseHdc(hdc);
    return (((double)pixels / (double)width) * (double)length);
}
[DllImport("gdi32.dll")]
private static extern int GetDeviceCaps(IntPtr hdc, int Index);



 

像素與毫米的轉換
轉換還需要知道另一個參數:DPI(每英寸多少點)
象素數 / DPI = 英寸數
英寸數 * 25.4 = 毫米數

對於顯示設備,不管是打印機還是屏幕,都有一種通用的方法
先用GetDeviceCaps(設備句柄,LOGPIXELSX)
或者
GetDeviceCaps(設備句柄,LOGPIXELSY)獲得設備每英寸的像素數
分別記為:px 和 py
一英寸等於25.4mm
那么毫米換算成像素的公式為 
水平方向的換算: x * px /25.4
垂直方向的換算: y * py /25.4
像素換算為毫米 x * 25.4 / px
在程序中這么寫
MyControl.Height := 10{mm} * PixelsPerInch * 10 div 254;
分子和分母同乘以10,將浮點數運算轉化為整數運算,效率更高


 

顯示器屏幕1024×768

1厘米=31.03像素

 

還有一些方法,都是位於

    System.Drawing.Graphics g = System.Drawing.Graphics.FromHwnd(p.Handle);

g.下面的,

如:g.DpiY等。自己看下吧

 

以下是別人總結的,這些方法我都沒有找到,知道的留言告訴我啊。

screen.

availHeight 獲取系統屏幕的工作區域高度,排除 Microsoft® Windows® 任務欄。
availWidth 獲取系統屏幕的工作區域寬度,排除 Windows 任務欄。
bufferDepth 設置或獲取用於畫面外位圖緩沖顏色的每像素位數。
colorDepth 獲取用於目標設置或緩沖區的顏色每像素位數。
deviceXDPI 設置或獲取系統屏幕水平每英寸點數(DPI)的數值。
deviceYDPI 設置或獲取系統屏幕垂直每英寸點數(DPI)的數值。
fontSmoothingEnabled 獲取用戶是否在控制面板的顯示設置中啟用了圓整屏幕字體邊角的選項。
height 獲取屏幕的垂直分辨率。
logicalXDPI 獲取系統屏幕水平每英寸點數(DPI)的常規數值。
logicalYDPI 獲取系統屏幕垂直每英寸點數(DPI)的常規數值。
updateInterval 設置或獲取屏幕的更新間隔。

width 獲取屏幕的垂直分辨率。

 

來自http://blog.csdn.net/z0582/article/details/7568280


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM