从目前所掌握的资料来看,c#程序中将毫米转换像素的方法无非两种:
第一种:
/// <summary>
/// 以毫米为单位的显示宽度
/// </summary>
int HORZSIZE = 4;
/// <summary>
/// 以像素为单位的显示宽度 0~65535
/// </summary>
int HORZRES = 8;
int LOGPIXELSX = 88;
int LOGPIXELSY = 90;
//length是毫米,1厘米=10毫米
12: {
13: System.Drawing.Graphics g = System.Drawing.Graphics.FromHwnd(handle);
14: IntPtr hdc = g.GetHdc();
// HORZRES
// BITSPIXEL
17: g.ReleaseHdc(hdc);
double)length);
19: }
20:
)]
int Index);
此种方法计算的值与实际刻度相比:10mm=实际刻度8mm
以此技术的程序:桌面刻度尺
技术文章引用:http://hi.baidu.com/kingcham/item/b3653ce0c69756216dabb8cd
在文章中所说的
GDI中有一个函数是GetDeviceCaps(),可以获取一些关于设备的一些属性,如HORZSIZE/HORZRES/LOGPIXELSX等。
以上三者的关系通常满足:HORZSIZE = 25.4 * HORZRES/LOGPIXELSX
但是在程序中却无法满足该条件。
第二种:
/// <summary>
/// 1英寸=25.4毫米
/// </summary>
double millimererTopixel = 25.4;
5:
//length是毫米,1厘米=10毫米
7: {
new System.Windows.Forms.Panel();
9: System.Drawing.Graphics g = System.Drawing.Graphics.FromHwnd(handle);
10:
//1英寸=25.4mm=96DPI,那么1mm=96/25.4DPI
double)length);
13: }
此种方法是根据网上的换算关系得来的。得到的值与实际刻度相比:180mm=实际刻度185mm
以此技术的程序:夏克屏幕刻度尺
以目前而言,还无法准确的进行转换,从而绘制标准刻度尺。如果各位有更好的方法,还望提示下,先谢谢了。