c# 刻度:毫米 英寸 像素转换
生活随笔
收集整理的這篇文章主要介紹了
c# 刻度:毫米 英寸 像素转换
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
從目前所掌握的資料來看,c#程序中將毫米轉換像素的方法無非兩種:
第一種:
1: /// <summary>
2: /// 以毫米為單位的顯示寬度
3: /// </summary>
4: const int HORZSIZE = 4;
5: /// <summary>
6: /// 以像素為單位的顯示寬度 0~65535
7: /// </summary>
8: const int HORZRES = 8;
9: const int LOGPIXELSX = 88;
10: const int LOGPIXELSY = 90;
11: public static double MillimetersToPixelsWidth(IntPtr handle, double length) //length是毫米,1厘米=10毫米
12: {
13: System.Drawing.Graphics g = System.Drawing.Graphics.FromHwnd(handle);
14: IntPtr hdc = g.GetHdc();
15: int width = GetDeviceCaps(hdc, HORZSIZE); // HORZRES
16: int pixels = GetDeviceCaps(hdc, HORZRES); // BITSPIXEL
17: g.ReleaseHdc(hdc);
18: return (((double)pixels / (double)width) * (double)length);
19: }
20:
21: [System.Runtime.InteropServices.DllImport("gdi32.dll")]
22: private static extern int GetDeviceCaps(IntPtr hdc, int Index);
此種方法計算的值與實際刻度相比:10mm=實際刻度8mm
以此技術的程序:桌面刻度尺
技術文章引用:http://hi.baidu.com/kingcham/item/b3653ce0c69756216dabb8cd
在文章中所說的
GDI中有一個函數是GetDeviceCaps(),可以獲取一些關于設備的一些屬性,如HORZSIZE/HORZRES/LOGPIXELSX等。
以上三者的關系通常滿足:HORZSIZE = 25.4 * HORZRES/LOGPIXELSX
但是在程序中卻無法滿足該條件。
第二種:
1: /// <summary>
2: /// 1英寸=25.4毫米
3: /// </summary>
4: const double millimererTopixel = 25.4;
5:
6: public static double MillimeterToPixel(IntPtr handle, double length) //length是毫米,1厘米=10毫米
7: {
8: System.Windows.Forms.Panel p = new System.Windows.Forms.Panel();
9: System.Drawing.Graphics g = System.Drawing.Graphics.FromHwnd(handle);
10:
11: //1英寸=25.4mm=96DPI,那么1mm=96/25.4DPI
12: return (((double)g.DpiX / millimererTopixel) * (double)length);
13: }
此種方法是根據網上的換算關系得來的。得到的值與實際刻度相比:180mm=實際刻度185mm
以此技術的程序:夏克屏幕刻度尺
以目前而言,還無法準確的進行轉換,從而繪制標準刻度尺。如果各位有更好的方法,還望提示下,先謝謝了。
總結
以上是生活随笔為你收集整理的c# 刻度:毫米 英寸 像素转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中国移动怎么查看话费消费详情和使用记录
- 下一篇: 王者荣耀小乔缤纷独角兽星元皮肤特效一览