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#中毫米与像素的换算方法的更多相关文章
- C#中的bitmap类和图像像素值获取方法
一.Bitmap类 Bitmap对象封装了GDI+中的一个位图,此位图由图形图像及其属性的像素数据组成.因此Bitmap是用于处理由像素数据定义的图像的对象.该类的主要方法和属性如下: 1. GetP ...
- c# 刻度:毫米 英寸 像素转换
从目前所掌握的资料来看,c#程序中将毫米转换像素的方法无非两种: 第一种: 1: /// <summary> 2: /// 以毫米为单位的显示宽度 3: /// </summary& ...
- 【微信小程序项目实践总结】30分钟从陌生到熟悉 web app 、native app、hybrid app比较 30分钟ES6从陌生到熟悉 【原创】浅谈内存泄露 HTML5 五子棋 - JS/Canvas 游戏 meta 详解,html5 meta 标签日常设置 C#中回滚TransactionScope的使用方法和原理
[微信小程序项目实践总结]30分钟从陌生到熟悉 前言 我们之前对小程序做了基本学习: 1. 微信小程序开发07-列表页面怎么做 2. 微信小程序开发06-一个业务页面的完成 3. 微信小程序开发05- ...
- HTML5中canvas的save和restore方法
canvas的save和restore方法: save() 方法把当前绘画状态的一份拷贝压入到一个保存图像状态的栈中.这里的绘画状态指坐标原点.变形时的变化矩阵(该矩阵是调用 rotate().sca ...
- c#图像处理入门(-bitmap类和图像像素值获取方法) 转
一.Bitmap类 Bitmap对象封装了GDI+中的一个位图,此位图由图形图像及其属性的像素数据组成.因此Bitmap是用于处理由像素数据定义的图像的对象.该类的主要方法和属性如下: 1. GetP ...
- html5 750 REM JS换算方法
在安卓手机低版本浏览器,如果进页面快速执行的话会出现计算宽度不正确的情况,解决方法是放在onload方法里面执行,但这种解决方式在一些高版本浏览器中会出现页面闪动,所以使用判断浏览器版本的方式来解决, ...
- IOS中对图片进行重绘处理的方法总结
一.CGImageRef是什么 CGImageRef是定义在QuartzCore框架中的一个结构体指针,用C语言编写.在CGImage.h文件中,我们可以看到下面的定义: ? 1 typedef st ...
- WebGIS中通过行列号来换算出多种瓦片的URL 之离线地图(转载)
WebGIS中通过行列号来换算出多种瓦片的URL 之离线地图 1.前言 在前面我花了两个篇幅来讲解行列号的获取,也解释了为什么要获取行列号.在这一章,我将把常见的几种请求瓦片时的URL样式罗列出来,并 ...
- c#图像处理入门(-bitmap类和图像像素值获取方法)
c#图像处理入门 -bitmap类和图像像素值获取方法 一.Bitmap类 Bitmap对象封装了GDI+中的一个位图,此位图由图形图像及其属性的像素数据组成.因此Bitmap是用于处理由像素数据定义 ...
随机推荐
- linux调整分区大小
查看一下当前分区情况 1 2 3 4 5 6 7 8 [root@localhost ~]# df -h Filesystem Size Used Avail Use% Mou ...
- 浅析Objective-C字面量
编写Objective-C程序时,总会用到某几个类,它们属于Foundation框架.虽然从技术上来说,不用Foundation框架也能写出Objective-C代码,但实际上却经常要用到此框架.这几 ...
- python pandas/numpy
import pandas as pdpd.merge(dataframe1,dataframe2,on='common_field',how='outer') replace NaN datafra ...
- 63.Assignment to name ignored, since the identifier is never used
在文件中单独定义一些信号变量,如start_flag,即使进行(*KEEP=“TRUE”*)的声明,但在cdc文件上依然找不到start_flag变量,这是为什么呢?因为ISE综合器非常聪明,对一些没 ...
- mozilla css developer center
https://developer.mozilla.org/en-US/docs/Web/CSS
- 标准非STL之bitset
template <size_t N> class bitset; BitsetA bitset stores bits (elements with only two possible ...
- 文件操作的openmode
C中文件的openmode如下: r 只读 为输入打开一个文本文件 w 只写 为输出打开一个文本文件 a 追加 向文本文件尾添加数据 rb 只读 为输入打开一个二进制文件 wb 只写 为输出打开一个二 ...
- xml之XSLT
1.XSLT是什么 XSLT是XSL的子集,XSL是样式表.XSLT的作用:将XML文档转化成HTML,做的是中间转换者. 而主要需要学习的是XSLT(XSLTransformation). 2 ...
- 站立会议 ~NO.1
Yesterday:None Today: Search for offline maps of our school and testify the veracities of it Problem ...
- android开发 textview根据字数长度自动调整字体大小
需求:根据输入的值实时显示到textview中预览,但是字体大小是要自动适配的 网上有一个代码,但是在我这里不能用,注意方法:refitText 注释掉的是之前的代码 import com.cars ...