【问题标题】:C# wpf window this.Top returning wrong position on Win8?C# wpf window this.Top在Win8上返回错误的位置?
【发布时间】:2013-03-02 19:47:49
【问题描述】:

我对此有点迷惑。我们有一个 c#/WPF 屏幕捕获工具,它使用 Graphics.CopyFromScreen 抓取桌面的一部分。

它可以在几十种不同的机器上正常工作,包括 XP、Win7 和至少一个 Windows8 虚拟机。

我们遇到了一台装有 Win8 的 Acer ZS600,我们看到了我无法理解的奇怪效果。

当您拍摄时,它会抓取尺寸正确但位置错误的图像。它向顶部和左侧偏移。不是固定数额。当捕获窗口位于屏幕 0,0 位置时很好,但是当您将捕获窗口从原点移开时,偏移量会增加。

我查看了代码,发现窗口位置(this.Top 和 this.Left)报告了错误的数字。

更奇怪的是,我们已经在 Acer Z5771 上进行了尝试,这几乎是相同的硬件设置,只是它使用的是 Windows 7。我们尝试更新 Zs600 图形驱动程序,但没有任何效果。

是否有人理解这一点,或提出修复或解决方法?

编辑:我整理了一个简单的应用程序,在问题机器上显示效果。在我的开发机器上它工作正常。在这里下载:https://s3-eu-west-1.amazonaws.com/kdownload/Tools/CaptureTool_app.zip

或者下载编译后的版本:https://s3-eu-west-1.amazonaws.com/kdownload/Tools/capturetest.exe

编辑:这是问题系统上正在使用的捕获应用程序的两个屏幕截图。 https://s3-eu-west-1.amazonaws.com/kdownload/Tools/ProblemScreencap.png(编辑 - 在那个屏幕截图中,我用宽度和高度切换了 x&y 的显示数字,现在已在上传的代码中修复,请忽略此)

【问题讨论】:

  • 你能不能尝试一些固定的数字,看看会发生什么?
  • 尝试了固定数字。捕获部分抓取屏幕的右侧部分。问题是 wpf 窗口给了我错误的位置。
  • 您能否创建另一个不可见的窗口作为您用作参考的肮脏黑客,如果它的 WPF 的位置使新窗口始终在左上角始终是静态的,例如并从中工作?
  • 我上传了一些示例代码。稍后我会放一些截图。
  • 检查您的系统 DPI。

标签: c# wpf windows-8 screen-capture


【解决方案1】:

这可能是因为 OS Dpi 设置设置为 100% 以上。

您可以创建一个辅助方法来检查并根据当前 OS dpi 转换到正确的位置。

类似的东西。

public Point GetDpiSafeLocation(Point location)
{
    PresentationSource source = PresentationSource.FromVisual(Application.Current.MainWindow);
    if (source != null)
    {
        double dpiX = 96.0 * source.CompositionTarget.TransformToDevice.M11;
        double dpiY = 96.0 * source.CompositionTarget.TransformToDevice.M22;
        return new Point(location.X * 96.0 / dpiX, location.Y * 96.0 / dpiY);
    }
    return location;
}

用法:

 var point = GetDpiSafeLocation(new Point(Left, Top));

【讨论】:

  • 在哪里可以找到 dpi 设置? (我是 Windows 8 新手)
  • 你可以在这里找到一些信息nvidia.custhelp.com/app/answers/detail/a_id/3153/~/…
  • 是 - DPI 设置为 125%。我不知道这个设置存在 - 我没有意识到 DPI 和屏幕分辨率之间存在差异。谢谢。
  • 我找到了另一个修复方法。除了使用 this.Left 和 this.Top,我可以使用 var point = PointToScreen(new System.Windows.Point(0, 0)); -- 如果 DPI 为 100%,则给出相同的答案,但如果 DPI 为 125%,则给出正确答案
猜你喜欢
  • 2014-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-13
  • 2019-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多