C# 图片像素与毫米之间的转换问题 您所在的位置:网站首页 图片像素和毫米换算怎么算出来的 C# 图片像素与毫米之间的转换问题

C# 图片像素与毫米之间的转换问题

2024-07-13 19:45| 来源: 网络整理| 查看: 265

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明 http://graves.blogbus.com/logs/62202920.html

接到一个活,要把导入的图片中任意两点之间的水平距离和垂直距离求出来,一开始觉得这太容易了,也用得着做软件?半个小时就搞定了,洋洋自得了一会儿突然发现……求出来的是像素值,人家要的是毫米数,这才开始觉出问题。 在网上搜了半天,什么设备啊分辨率啊显示器什么的都想过了,后来咨询一朋友,人家被俺的白目给刺激到了,直接打开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");     p1 = Point.Empty; //清空坐标值     p2 = Point.Empty;   } }

这是取图片中的距离,如果和图片无关,取屏幕上任意两点的距离,就需要取显示器的DPI的值,这个……有需要再研究。--

收藏到: Del.icio.us


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有