想画一把刻度尺,并打印出来。在屏幕上画,拿实际尺子量屏幕,总是小于实际尺子。以下代码如果单纯拷贝可能不能运行,我会在下面说明以下。Pen p = new Pen(Color.Black, 0.1f);
            for (int i = 0; i < 420; i++ )
            {
               
                if ((i % 10) == 0)
                {//厘米
                    m_TopStaffGph.DrawLine(p, (float)((float)(i * 96) / (float)25.4 + TopLeftBank.Width), 0, (float)((float)(i * 96) / (float)25.4 + TopLeftBank.Width), lineH / 2);
                    m_TopStaffGph.DrawString((i / 10).ToString(), m_TopStaffFone, Brushes.Black, (float)((float)(i * 96) / (float)25.4 + TopLeftBank.Width - 5), lineH / 2);                  
                }
                else if ((i % 5) == 0)
                {//5毫米
                    m_TopStaffGph.DrawLine(p, (float)((float)(i * 96) / (float)25.4 + TopLeftBank.Width), 0, (float)((float)(i * 96) / (float)25.4 + TopLeftBank.Width), lineH / 3);                  
                }
                else
                {//毫米        
                    m_TopStaffGph.DrawLine(p, (float)((float)(i * 96) / (float)25.4 + TopLeftBank.Width), 0, (float)((float)(i * 96) / (float)25.4 + TopLeftBank.Width), lineH / 4);
                }
            }这是在TopStaff_Paint事件中的代码。TopStaff是个panel。
m_TopStaffGph是由TopStaff.CreateGraphics建立的。
上面代码中 我单纯的认为96/25.4是屏幕一毫米的刻度。
因为不管是事件中的e还是m_TopStaffGph,它们的dpix都是96。
可是实际画出来以后,当我傻呼呼的拿尺子去量屏幕时,发现总是小于实际。求指点。
后面还有用打印机打印出纸张,先解决前面的问题。C#dpigraphics

解决方案 »

  1.   

    同样两个点,在旧显示器上和LCD或LED上距离也是不同的,这个是没有标准的。
      

  2.   

    通过Google计算器得打 1cm 在96像素密度的显示器下 约占 37.8个像素
    (有可能有其他的像素密度的,一般的Window默认都是96)graphic.DrawLine(Pens.Black, new PointF(50,50),new PointF(50,50+37.8f));我的显示器,刚好是1cm
      

  3.   

    好像是的,Window的图形界面好像和硬件设备没有关系。
    同样的显示器,设置成1920*1080 和设置成 1600*900,DPI都是96。这样的话,可能要获取硬件设备的大小了
    可以看看下面的这篇文章
    VC++获取屏幕大小第二篇 物理大小GetDeviceCaps 上