C#图⽚像素与毫⽶之间的转换问题
C# 图⽚像素与毫⽶之间的转换问题 - []
接到⼀个活,要把导⼊的图⽚中任意两点之间的⽔平距离和垂直距离求出来,⼀开始觉得这太容易了,也⽤得着做软件?半个⼩时就搞定了,洋洋⾃得了⼀会⼉突然发现……求出来的是像素值,⼈家要的是毫⽶数,这才开始觉出问题。
在⽹上搜了半天,什么设备啊分辨率啊显⽰器什么的都想过了,后来咨询⼀朋友,⼈家被俺的⽩⽬给刺激到了,直接打开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的值,这个……有需要再研究。--收藏到: