从目前所掌握的资料来看,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# 刻度:毫米 英寸 像素转换的更多相关文章

  1. C#中毫米与像素的换算方法

    C#中以像素作为尺寸单位,像素是一种相对的尺寸概念,与毫米的转换与当前显示器的分辨率有关.在不同分辨率下转换的系数不同. 借助GDI可以完成毫米至像素的转换. public static double ...

  2. PixelUtils:像素转换工具

    /** 像素转换工具 */ public class PixelUtils { /** * The context. */ private static Context mContext = Cust ...

  3. FFmpeg(四) 像素转换相关函数理解

    一.基本流程 1.sws_getCachedContext();//得到像素转换的上下文 2.sws_scale()://进行转换 二.函数说明 1.SwsContext *vctx = NULL;  ...

  4. iOS关于图片点到像素转换之杂谈

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 不管是以什么方法生成的图片,是从磁盘上读取的,还是从其他对象中 ...

  5. ASP.NET Core WebApi中简单像素转换跟踪实现

    像素跟踪虽然是最早用于跟踪营销转换的方法,但它仍然被广泛使用,像Facebook这样的大公司仍然将其视为跟踪网页转换的方法之一. 由于它的简单性,通过像素方法的跟踪转换仍然被广泛使用.它不需要任何复杂 ...

  6. 毫米转像素dpi

    public static double MillimeterToPixel_X(double length) //length是毫米,1厘米=10毫米 { System.Windows.Forms. ...

  7. 像素转换mm

    public static double MillimetersToPixelsWidth(double length) //length是毫米,1厘米=10毫米 { System.Windows.F ...

  8. 像素转换问题-队列解决办法(或者dfs)

    在一定大小的像素图像中,将同色区域的颜色值替换为其他颜色值,从而产生新的图像,输入数据,图像大小,指定的像素点坐标,要替换成的颜色. 一开始出队操作写错了折腾半天,当队列中只有一个元素是出队后要将队首 ...

  9. js厘米与英寸尺码转换

    <style type="text/css"> #txt_cm1, #txt_inch1, #txt_inch2, #txt_cm2 { width: 63px; he ...

随机推荐

  1. How to setup ELM327 Bluetooth WiFi for Android software Torque

    1.    Install OBDII 2.    Install Android Software Torque a)    Copy software to phone from CD b)   ...

  2. 【Android 界面效果35】管理Fragments

    http://www.cnblogs.com/mengdd/archive/2013/01/09/2853254.html

  3. 要检测两个C文件的代码的抄袭情况

    将抄袭部分输出 如果只是变量名替换了 也算抄袭 如果输入了一些干扰代码以防止被检测出来 也算抄袭专业程序代写c++程序代写

  4. struts2 零配置

    一.新建一个web项目,命名为:struts2 二.导入strut2所需的jar包 所需jar下载:http://pan.baidu.com/s/1dDxP4Z3 三.配置struts2的启动文件,在 ...

  5. XML基础概念

    XML基础概念 一.什么是XML. 可扩展标记语言(EXtensible Markup Language),标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言. 二.XML特点 1 ...

  6. [转]Webservice client timeout

    本文转自:http://social.msdn.microsoft.com/Forums/vstudio/en-us/ed89ae3c-e5f8-401b-bcc7-333579a9f0fe/webs ...

  7. dfa最小化,修正了上个版本的一些错误。

    上个版本测试的时候,只用了两个非常简单的测试用例,所以好多情况有问题却没有测试出来 bug1:在生成diff_matrix的时候,循环变量少循环了一次,导致最后一个节点在如果无法与其他点合并的情况下, ...

  8. ASP.NET自定义错误页面

    ASP.NET自定义错误页面 ASP.NET 提供三种用于在出现错误时捕获和响应错误的主要方法:Page_Error 事件.Application_Error 事件以及应用程序配置文件 (Web.co ...

  9. Sql Server中的分组

    1.Group by可以将相同的数据合并为一组,分组后的数据可以看成是一个临时的表,注意如果sql中有where条件,那么group by必须放在where之后. 2.GROUP BY子句中可以指定多 ...

  10. Part 17 Temporary tables in SQL Server

    Temporary tables in SQL Server