用于绘图应用程序的RenderTargetBitmap DPI

时间:2012-01-16 04:18:35

标签: c# wpf graphics drawing

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

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

3 个答案:

答案 0 :(得分: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)的因素。系统的水平DPI为dpiXFactor * 96,垂直DPI为dpiYFactor * 96.您可以通过开始菜单在Windows 7上进行测试 - > “dpi”并选择“使文字和其他项目更大或更小”。 100%表示因子1,DPI表示96. 125%表示因子1.25,DPI表示120. 150%表示因子1.5,DPI表示144.

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

答案 1 :(得分:0)

渲染非矢量图像时使用DPI。您不必担心更改由操作系统和监视器硬件确定的不同监视器或屏幕的DPI。您需要考虑的是图像中想要的像素化级别。作为一般经验法则,100x100像素图像下的小图像应该可以使用96 DPI,100x100和300x300之间的任何东西都应该是150-175 DPI。对于任何大于300的东西,你可以去300-400 DPI。在某一点之后它只是矫枉过正。除非您进行随机打印,否则大多数商业打印都是在350 DPI下完成的。如果您的绘图线条的行程为1-3,您可以使用96 DPI,那么任何更大的我都会建议使用150 DPI。

答案 2 :(得分:0)

您使用的DPI取决于输出的作用。如果您的绘图只能在屏幕上观看而不进行缩放,那么96dpi就可以了,您不再需要担心它了。如果您需要放大绘图,那么更高的分辨率可以提供更好的用户体验。如果打印您的绘图是您的用户体验的重要部分,那么使用300dpi可能会更好。