【问题标题】:RenderTargetBitmap DPI for drawing application用于绘图应用程序的 RenderTargetBitmap DPI
【发布时间】:2012-01-16 04:18:34
【问题描述】:

我一直在使用 RenderTargetBitmap 为我的应用程序绘制线条,如 here 所示。

它工作正常,但我不太了解 DPI。如果我需要在鼠标下绘制线条,我使用 96 的 DPI。我只需要知道这是否适用于所有设备和屏幕,如果不是,如何找到正确的。

【问题讨论】:

    标签: c# wpf graphics drawing


    【解决方案1】:

    这是我用来获取系统 DPI 的代码:

    // Get system DPI
    Matrix m = PresentationSource.FromVisual(Application.Current.MainWindow).CompositionTarget.TransformToDevice;
    if (m.M11 > 0 && m.M22 > 0)
    {
        dpiXFactor = m.M11;
        dpiYFactor = m.M22;
    }
    else
    {
        // Sometimes this can return a matrix with 0s. Fall back to assuming normal DPI in this case.
        dpiXFactor = 1;
        dpiYFactor = 1;
    }
    

    这将是系统具有的正常 DPI (96) 的因子。系统将具有 dpiXFactor * 96 的水平 DPI 和 dpiYFactor * 96 的垂直 DPI。您可以在 Windows 7 上通过转到开始菜单 ->“dpi”并选择“使文本和其他项目更大或更小”来进行测试。 100% 表示系数为 1,DPI 为 96。125% 表示系数为 1.25,DPI 为 120。150% 表示系数为 1.5,DPI 为 144。

    回退逻辑是由于客户崩溃报告造成的,我认为这可能只是由全为零的变换矩阵引起的。可能有一种更可靠的方式来获取系统 DPI(也许是 pinvoke?),但我不知道。

    【讨论】:

      【解决方案2】:

      在渲染非矢量图像时使用 DPI。您不必担心更改由操作系统和显示器硬件确定的不同显示器或屏幕的 DPI。您必须考虑的是您希望图像中的像素化水平。作为一般经验法则,100x100 像素以下的小图像应该可以使用 96 DPI,100x100 到 300x300 之间的任何东西都应该使用 150-175 DPI。对于任何大于 300 的内容,您可以使用 300-400 DPI。在某一点之后,它只是矫枉过正。大多数商业印刷都是在 350 DPI 下完成的,除非您进行随机印刷。如果您的画线笔画为 1-3,您应该可以使用 96 DPI,如果更大,我建议使用 150 DPI。

      【讨论】:

      • 看起来他正在使用WritableBitmap,这可能需要将 WPF 鼠标位置转换为位图上的像素位置。
      【解决方案3】:

      您使用的 DPI 取决于将如何处理输出。如果您的绘图仅在屏幕上查看而不进行缩放,那么您可以使用 96dpi,并且您不再需要担心它。如果您需要放大绘图,则更高的分辨率可以提供更好的用户体验。如果打印绘图是用户体验的重要组成部分,那么使用 300dpi 可能会更好。

      【讨论】:

        猜你喜欢
        • 2011-08-09
        • 2011-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-07
        • 2012-12-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多