用于截屏的VB比例表格

时间:2016-12-15 23:32:47

标签: vb.net scale

我正在尝试使用下面的代码进行屏幕捕获

    Dim area As Rectangle = FormPrintArea.Bounds
    Dim areaWidth As Integer = CInt(area.Width * ScaleFactor)
    Dim areaHeight As Integer = CInt(area.Height * ScaleFactor)
    Dim capture As Bitmap = New Bitmap(areaWidth, areaHeight, PixelFormat.Format32bppArgb)
    Dim graph As Graphics = Graphics.FromImage(capture)
    Dim ScaledSize As New Size With {
        .Height = areaHeight,
        .Width = areaWidth
    }
    graph.CopyFromScreen(area.X, area.Y, 0, 0, ScaledSize, CopyPixelOperation.SourceCopy)
    PictureBox1.Image = capture

`` 问题是我找不到ScaleFactor,只要在Windows 10显示设置中“更改文本,应用程序和其他项目的大小:100%”,但是如果设置不同,如125%(推荐),则一切都很完美,我失去了大约20%的图像。看起来在LanguageFont类中有一个ScaleFactor,但我似乎无法从VB(或C#)访问它。

应用程序有一个VB表单(FormPrintArea),用户可以使用它来定义打印区域。如果我在设置为125%(推荐)的系统上将ScaleFactor设置为1.25,那么一切正常。有没有办法通过API从Windows获得价值? ScaleFactor 1

ScaleFactor 1.25

1 个答案:

答案 0 :(得分:0)

我需要声明我的App DPIaware @Hans Passant说,最简单的方法是将下面的行添加到Partial Class启动表单(Form1)。

some_mail_method

然后更改启动表单末尾的New Sub以调用SetProcessDPIAware

<DllImport("User32.dll")> Private Shared Sub SetProcessDPIAware() End Sub

完成后,您可以在Form1.Load中获取ScaleFactor,如下所示 Public Sub New() SetProcessDPIAware() InitializeComponent() End Sub