c# 刻度:毫米 英寸 像素转换

时间:2022-08-26 07:57:20

从目前所掌握的资料来看,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&num;中毫米与像素的换算方法

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

  2. PixelUtils:像素转换工具

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

  3. FFmpeg&lpar;四&rpar; 像素转换相关函数理解

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

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

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

  5. ASP&period;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. asp&period;net 解决 &quot&semi;回发或回调参数无效&quot&semi; 一些常见解决方案

    一.回发或回调参数无效,出现下图错误, 常见解决方案: 1.在页面的<%@ Page Language="C#"  AutoEventWireup="true&qu ...

  2. PHP基础(一)

    <?php $expression = false; if($expression == true): ?> <p>This will show if the expressi ...

  3. js不能执行的几个小白错误

    1.如果使用jquery,而没有将js代码写在$(function(){}):里边,没等dom全部加载完,在执行时出现错误 2.如果感觉都写对了却没有执行,那么可能是在想要执行的函数前有一加载就能执行 ...

  4. 297&period;&Tab;Serialize and Deserialize Binary Tree

    题目: Serialization is the process of converting a data structure or object into a sequence of bits so ...

  5. noip2002提高组题解

    再次280滚粗.今天早上有点事情,所以做题的时候一直心不在焉,应该是三天以来状态最差的一次,所以这个分数也还算满意了.状态真的太重要了. 第一题:均分纸牌 贪心.(昨天看BYVoid的noip2001 ...

  6. error while loading shared libraries&colon; libgtk-x11-2&period;0&period;so&period;0 2014-05-12 22&colon;49&colon;34

      http://askubuntu.com/questions/356605/ubuntu-13-10-64-bit-machinarium-error-while-loading-shared-l ...

  7. activiti 多实例任务

    1.1.1. 前言 个人,那么当5个人都投票的时候大概分为如下几种: 1.部门所有人都去投票,当所有人都投票完成的时候,这个节点结束,流程运转到下一个节点.(所有的人都需要投票) 2.部门所有人都去投 ...

  8. postman接口测试笔记

    1.GET 和POST 的区别: GET 使用URL 或Cookie 传参,而POST将数据放在Body 中. GET的URL 在长度上会有限制,而POST没有. POST比GET相对安全,因为在地址 ...

  9. Oracle设置某张表为只读

    Oracle 11g开始支持设置某张表为只读,这样可以防范对某些表的修改,起到一定的安全性. 设置如下: --设置表为只读权限(加锁) ALTER TABLE tab_name READ ONLY ; ...

  10. linux系统上面使用tab补全命令

    tab的模块脚本 [root@centos7 ~]# cat tab.py #!/usr/bin/python3.6 # python startup file import sys import r ...