C# winform 如何获取本地计算机的DPI? 做winform打印 需要像素与毫米的转换,此转换又关系到本地的DPI值跪求如何获取本地计算机的DPI?本地计算机C#WinFormDPI 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 以下是在网上找的资料。具体地址没记录,直接拷到文本保存了。希望对你有帮助。----------------------------------------------------------------------------C# 图片像素与毫米之间的转换问题 (2011-03-25 17:18:47)转载▼标签: c 像素转换 显示器 dpi 杂谈 分类: 程序开发接到一个活,要把导入的图片中任意两点之间的水平距离和垂直距离求出来,一开始觉得这太容易了,也用得着做软件?半个小时就搞定了,洋洋自得了一会儿突然发现……求出来的是像素值,人家要的是毫米数,这才开始觉出问题。在 网上搜了半天,什么设备啊分辨率啊显示器什么的都想过了,后来咨询一朋友,人家被俺的白目给刺激到了,直接打开photoshop图片大小的界面截图给 我,告诉我……直接取图片的DPI再换算就成了,于是恍然大悟,这和机器的显示器分辨率有个毛关系啊,图片DPI才是王道啊。嗯,具体过程如下:private Point p1 = Point.Empty, p2 = Point.Empty; //两个点的坐标private double hd = 0, vd = 0; //水平距离和垂直距离private float dpiX = 0, dpiY = 0; //图片DPI值private Bitmap curBitMap;设置一个选择图片的按钮,点击事件:private void inputPictureButton_Click(object sender, EventArgs e){ OpenFileDialog fd = new OpenFileDialog(); fd.Title = "打开图片"; fd.DefaultExt = "jpg"; fd.Multiselect = false; if (fd.ShowDialog() == DialogResult.OK) { try { curBitMap = (Bitmap)Image.FromFile(fd.FileName); //取出图片存入curBitMap //取图片水平DPI,比如是72,表示1像素=1/72英寸,下同 dpiX = curBitMap.HorizontalResolution; dpiY = curBitMap.VerticalResolution; } catch { MessageBox.Show("图片读取异常。", "系统提示"); return; } pictureBox1.Image = curBitMap; horizontalTextbox.Text = string.Empty; verticalTextBox.Text = string.Empty; p1 = Point.Empty; p2 = Point.Empty; }}picturebox的Click事件,鼠标在picturebox1中点击取坐标值并计算距离:private void pictureBox1_Click(object sender, EventArgs e){ if (p1 == Point.Empty) { //取鼠标在控件内的坐标,如直接用p1 = MousePosition取的是鼠标在屏幕中的位置 p1 = this.pictureBox1.PointToClient(MousePosition); } else if (p2 == Point.Empty) { p2 = this.pictureBox1.PointToClient(MousePosition); } if (p1 != Point.Empty && p2 != Point.Empty) { hd = Math.Abs((p1.X - p2.X); //计算水平距离 vd = Math.Abs((p1.Y - p2.Y); //计算垂直距离 hd = hd * 25.4 / dpiX; //1英寸=25.4毫米,所以距离的毫米数=(像素/DPI)*25.4 vd = vd * 25.4 / dpiY; horizontalTextbox.Text = hd.ToString("F2"); //显示距离,保留两位小数 verticalTextBox.Text = vd.ToString("F2");k p1 = Point.Empty; //清空坐标值 p2 = Point.Empty; }} 日期控件在输入时怎么跳过分隔符 关于winform时间日期控件的问题。 关于datagridview添加行的问题 有没有办法让double不用科学计数法显示,而且不填充0 .net 调试问题 简单正则表达式,出了点问题。 C# 多窗体数据同步问题 new SqlParameter("@UserId", order.User.Id) 这种是什么用法啊?能行? VS2010关于“未将对象引用设置到对象的实例。” 用HashTable可不可以删除最后一个添加进表的值啊 VS环境下的C# DX 控件的TreeList问题,跪求!!!
----------------------------------------------------------------------------
C# 图片像素与毫米之间的转换问题 (2011-03-25 17:18:47)转载▼
标签: c 像素转换 显示器 dpi 杂谈 分类: 程序开发
接到一个活,要把导入的图片中任意两点之间的水平距离和垂直距离求出来,一开始觉得这太容易了,也用得着做软件?半个小时就搞定了,洋洋自得了一会儿突然发现……求出来的是像素值,人家要的是毫米数,这才开始觉出问题。
在 网上搜了半天,什么设备啊分辨率啊显示器什么的都想过了,后来咨询一朋友,人家被俺的白目给刺激到了,直接打开photoshop图片大小的界面截图给 我,告诉我……直接取图片的DPI再换算就成了,于是恍然大悟,这和机器的显示器分辨率有个毛关系啊,图片DPI才是王道啊。
嗯,具体过程如下:
private Point p1 = Point.Empty, p2 = Point.Empty; //两个点的坐标
private double hd = 0, vd = 0; //水平距离和垂直距离
private float dpiX = 0, dpiY = 0; //图片DPI值
private Bitmap curBitMap;
设置一个选择图片的按钮,点击事件:
private void inputPictureButton_Click(object sender, EventArgs e)
{
OpenFileDialog fd = new OpenFileDialog();
fd.Title = "打开图片";
fd.DefaultExt = "jpg";
fd.Multiselect = false;
if (fd.ShowDialog() == DialogResult.OK)
{
try
{
curBitMap = (Bitmap)Image.FromFile(fd.FileName); //取出图片存入curBitMap
//取图片水平DPI,比如是72,表示1像素=1/72英寸,下同
dpiX = curBitMap.HorizontalResolution;
dpiY = curBitMap.VerticalResolution;
}
catch
{
MessageBox.Show("图片读取异常。", "系统提示");
return;
}
pictureBox1.Image = curBitMap;
horizontalTextbox.Text = string.Empty;
verticalTextBox.Text = string.Empty;
p1 = Point.Empty;
p2 = Point.Empty;
}
}
picturebox的Click事件,鼠标在picturebox1中点击取坐标值并计算距离:
private void pictureBox1_Click(object sender, EventArgs e)
{
if (p1 == Point.Empty)
{
//取鼠标在控件内的坐标,如直接用p1 = MousePosition取的是鼠标在屏幕中的位置
p1 = this.pictureBox1.PointToClient(MousePosition);
}
else if (p2 == Point.Empty)
{
p2 = this.pictureBox1.PointToClient(MousePosition);
}
if (p1 != Point.Empty && p2 != Point.Empty)
{
hd = Math.Abs((p1.X - p2.X); //计算水平距离
vd = Math.Abs((p1.Y - p2.Y); //计算垂直距离
hd = hd * 25.4 / dpiX; //1英寸=25.4毫米,所以距离的毫米数=(像素/DPI)*25.4
vd = vd * 25.4 / dpiY;
horizontalTextbox.Text = hd.ToString("F2"); //显示距离,保留两位小数
verticalTextBox.Text = vd.ToString("F2");k
p1 = Point.Empty; //清空坐标值
p2 = Point.Empty;
}
}