在C#中是以像素作为尺寸单位的,像素是一种相对的尺寸概念,与毫米的转换跟当前显示器的分辨率有关,在不同分辨率下转换的系数也不同。
借助C#中的GDI可以实现像素与毫米的换算:
一、根据Win32 API定义函数获取显示器设备信息:
/// <summary> /// 获取设备信息 /// </summary> /// <param name="hdc">要查询设备的句柄</param> /// <param name="index">设备信息所在的索引值</param> /// <returns>返回对应索引值上的设备信息</returns> [DllImport("gdi32.dll")] private static extern int GetDeviceCaps(IntPtr hdc, int index);
二、根据显示器设备信息计算像素与毫米的换算比率:
// 定义获取Graphics对象所需的控件 Panel panel = new Panel(); // 根据控件所在句柄获取Graphics对象 Graphics graphics = Graphics.FromHwnd(panel.Handle); // 获取设备句柄 IntPtr hdc = graphics.GetHdc(); // 获取屏幕宽度(毫米)HORZSIZE int width = GetDeviceCaps(hdc, 4); // 获取屏幕高度(毫米)VERTSIZE int height = GetDeviceCaps(hdc, 6); // 获取屏幕宽度(像素)HORZRES int xPixels = GetDeviceCaps(hdc, 8); // 获取屏幕高度(像素)VERTRES int yPixels = GetDeviceCaps(hdc, 10); // 释放设备句柄 graphics.ReleaseHdc(hdc); // 释放Graphics对象 graphics.Dispose(); // 计算X轴方向像素与毫米的比率 double xRate = (double)xPixels / (double)width; // 计算Y轴方向像素与毫米的比率 double yRate = (double)yPixels / (double)height;
三、像素数换算为毫米数:
// 定义要换算的毫米数 double millimeter = 10; // 计算X轴方向像素数 int xPixel = (int)Math.Round(xRate * millimeter); // 计算Y轴方向像素数 int yPixel = (int)Math.Round(yRate * millimeter);
四、毫米数换算为像素数:
// 定义要换算的像素数 int pixel = 10; // 计算X轴方向毫米数 double xMillimeter = pixel / xRate; // 计算Y轴方向毫米数 double yMillimeter = pixel / yRate;
更多信息请参阅:GetDeviceCaps function (Windows)