日期:2014-05-17  浏览次数:21226 次

C# winform 如何获取本地计算机的DPI?
做winform打印 需要像素与毫米的转换,此转换又关系到本地的DPI值
跪求如何获取本地计算机的DPI?
本地计算机 C# WinForm DPI

------解决方案--------------------
以下是在网上找的资料。具体地址没记录,直接拷到文本保存了。希望对你有帮助。
----------------------------------------
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;