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


    C#中以像素作为尺寸单位,像素是一种相对的尺寸概念,与毫米的转换与当前显示器的分辨率有关。在不同分辨率下转换的系数不同。

    借助GDI可以完成毫米至像素的转换。

    public static double MillimetersToPixelsWidth(double length) //length是毫米,1厘米=10毫米
    {
        System.Windows.Forms.Panel p = new System.Windows.Forms.Panel();
        System.Drawing.Graphics g = System.Drawing.Graphics.FromHwnd(p.Handle);
        IntPtr hdc = g.GetHdc();
        int width = GetDeviceCaps(hdc, 4);     // HORZRES
        int pixels = GetDeviceCaps(hdc, 8);     // BITSPIXEL
        g.ReleaseHdc(hdc);
        return (((double)pixels / (double)width) * (double)length);
    }
    [DllImport("gdi32.dll")]
    private static extern int GetDeviceCaps(IntPtr hdc, int Index);



     

    像素与毫米的转换
    转换还需要知道另一个参数:DPI(每英寸多少点)
    象素数 / DPI = 英寸数
    英寸数 * 25.4 = 毫米数

    对于显示设备,不管是打印机还是屏幕,都有一种通用的方法
    先用GetDeviceCaps(设备句柄,LOGPIXELSX)
    或者
    GetDeviceCaps(设备句柄,LOGPIXELSY)获得设备每英寸的像素数
    分别记为:px 和 py
    一英寸等于25.4mm
    那么毫米换算成像素的公式为 
    水平方向的换算: x * px /25.4
    垂直方向的换算: y * py /25.4
    像素换算为毫米 x * 25.4 / px
    在程序中这么写
    MyControl.Height := 10{mm} * PixelsPerInch * 10 div 254;
    分子和分母同乘以10,将浮点数运算转化为整数运算,效率更高


     

    显示器屏幕1024×768

    1厘米=31.03像素

    还有一些方法,都是位于

        System.Drawing.Graphics g = System.Drawing.Graphics.FromHwnd(p.Handle);

    g.下面的,

    如:g.DpiY等。自己看下吧

    以下是别人总结的,这些方法我都没有找到,知道的留言告诉我啊。

    screen.

    availHeight 获取系统屏幕的工作区域高度,排除 Microsoft® Windows® 任务栏。
    availWidth 获取系统屏幕的工作区域宽度,排除 Windows 任务栏。
    bufferDepth 设置或获取用于画面外位图缓冲颜色的每像素位数。
    colorDepth 获取用于目标设置或缓冲区的颜色每像素位数。
    deviceXDPI 设置或获取系统屏幕水平每英寸点数(DPI)的数值。
    deviceYDPI 设置或获取系统屏幕垂直每英寸点数(DPI)的数值。
    fontSmoothingEnabled 获取用户是否在控制面板的显示设置中启用了圆整屏幕字体边角的选项。
    height 获取屏幕的垂直分辨率。
    logicalXDPI 获取系统屏幕水平每英寸点数(DPI)的常规数值。
    logicalYDPI 获取系统屏幕垂直每英寸点数(DPI)的常规数值。
    updateInterval 设置或获取屏幕的更新间隔。

    width 获取屏幕的垂直分辨率。

    转自:http://hi.baidu.com/%D0%A1%C5%AE%CE%D7%D2%C0%D2%C0/blog/item/208fbbd3311408153af3cfe1.html

  • 相关阅读:
    C# 不用添加WebService引用,调用WebService方法
    贪心 & 动态规划
    trie树 讲解 (转载)
    poj 2151 Check the difficulty of problems (检查问题的难度)
    poj 2513 Colored Sticks 彩色棒
    poj1442 Black Box 栈和优先队列
    啦啦啦
    poj 1265 Area(pick定理)
    poj 2418 Hardwood Species (trie树)
    poj 1836 Alignment 排队
  • 原文地址:https://www.cnblogs.com/ChineseMoonGod/p/5203989.html
Copyright © 2020-2023  润新知