我发现,设置的图片大小是80*80 (毫米),但是实际在屏幕上测量得到的却是8.5*8.5,怎样编程能保证不同的显示器都一致呢?

解决方案 »

  1.   

    屏幕上的长宽是用像素和分辨率来确定的,设计的时候如果想让显示的是实际尺寸,那么就放一个一样大的控件,铺满。不同屏幕下要想显示效果一样,需要支持自动缩放。WPF ViewBox。winform程序很难实现
      

  2.   

    CSDN完了,不会有大牛了
      

  3.   

    如果没有理解错的话,你是想所有的屏幕上显示图片都是80*80mm吧。如果是这样的话,你的问题没描述清楚。
    在屏幕上图像的大小是以像素为单位的,所以首先得知道毫米和像素之间的转换。
    象素数 / DPI = 英寸数
    英寸数 * 25.4 = 毫米数 
    DPI是每英寸多少像素点
    因此 1毫米=DPI/25.4 个像素,80毫米=80*DPI/25.4个像素。所以你设置图片大小之前先要获得屏幕的DPI,然后算出显示80毫米需要的像素,设置图像大小。如果是WPF的话最好设置图像显示控件的SnapsToDevicePixels =true
      

  4.   

     <div style="width:100%;float:right"> <img class="imgShow"  src='@(!string.IsNullOrWhiteSpace(Model.thumbnail) ? Model.thumbnail : "Images/nopic.png")' width="200px" height="200px" /></div>  你换算成像素  
      

  5.   

    不要冒充大头鬼
    DPI = 96
    80毫米=80*DPI/25.4个像 = 302.36220472441
    取整(无法设置小数像素) 为 302
    运行后,实测宽度为 85mm
      

  6.   

         class GetPixSize
        {
            #region Win32 API 
            [DllImport("user32.dll")]
            static extern IntPtr GetDC(IntPtr ptr);        [DllImport("gdi32.dll")]
            static extern int GetDeviceCaps(IntPtr hdc,  int nIndex);        [DllImport("user32.dll", EntryPoint = "ReleaseDC")]
            static extern IntPtr ReleaseDC(IntPtr hWnd, IntPtr hDc);
            #endregion
            #region DeviceCaps常量 
            const int HORZSIZE = 4;
            const int VERTSIZE = 6;
            const int LOGPIXELSX = 88;
            const int LOGPIXELSY = 90;
            const int DESKTOPVERTRES = 117;
            const int DESKTOPHORZRES = 118;
            #endregion
            public static double GetPixWidth(double mm)
            {
                IntPtr hdc = GetDC(IntPtr.Zero);
                int mmDeskWidth = GetDeviceCaps(hdc, HORZSIZE);
                int pxDeskWidth = GetDeviceCaps(hdc, DESKTOPHORZRES);
                int xDpi = GetDeviceCaps(hdc, LOGPIXELSX);
                double scaleX = xDpi / 96.0;
                double pxCountPermm = 1.0 * pxDeskWidth / mmDeskWidth;
                double pxCount = pxCountPermm * mm / scaleX;
                ReleaseDC(IntPtr.Zero, hdc);            return pxCount;
            }        public static double GetPixHeight(double mm)
            {
                IntPtr hdc = GetDC(IntPtr.Zero);
                int mmDeskHeight = GetDeviceCaps(hdc, VERTSIZE);
                int pxDeskHeight = GetDeviceCaps(hdc, DESKTOPVERTRES);
                int yDpi = GetDeviceCaps(hdc, LOGPIXELSY);
                double scaleY = yDpi / 96.0;
                double pxCountPermm = 1.0 * pxDeskHeight / mmDeskHeight;
                double pxCount = pxCountPermm * mm / scaleY;
                ReleaseDC(IntPtr.Zero, hdc);            return pxCount;
            }
        }