根据用户运行的分辨率转换分辨率

时间:2019-05-14 14:48:27

标签: c#

我正在编写一个程序,该程序使具有快速输入的游戏变得更容易。由于我的工具目前仅适用于1920x1080,因此我想将其用于多种分辨率。那就是我现在的1920x1080分辨率。

              SetCursorPos(105, 640);
              System.Threading.Thread.Sleep(30);
              sim.Mouse.LeftButtonClick();
              System.Threading.Thread.Sleep(30);
              SetCursorPos(274, 547);
              System.Threading.Thread.Sleep(30);
              sim.Mouse.LeftButtonClick();
              System.Threading.Thread.Sleep(1560);
              sim.Keyboard.KeyPress(VirtualKeyCode.VK_T);
              System.Threading.Thread.Sleep(50);
              SetCursorPos(274, 547);
              sim.Mouse.LeftButtonClick();
              System.Threading.Thread.Sleep(1610);
              SetCursorPos(274, 547);
              sim.Mouse.LeftButtonClick();
              System.Threading.Thread.Sleep(1610);
              SetCursorPos(274, 547);
              sim.Mouse.LeftButtonClick();
              SetCursorPos(960, 540);

我有点希望程序检测实际的屏幕分辨率,并将像素位置从1920x1080转换为所需的位置。

2 个答案:

答案 0 :(得分:0)

理论上...将您的(x,y)坐标存储为十进制数字,代表您开发它们的原始分辨率的“百分比”。

例如,您的第一点是(105,640)。作为“百分比点”,将x坐标除以1920,将y坐标除以1080,得到(0.0546875,0.5925925925925926)。可以使用PointF结构进行存储。

现在,您可以使用这些十进制百分比数字,只需将它们乘以屏幕的宽度/高度即可在任何分辨率下获得所需的等效点。

您可以使用Screen.Bounds获取当前的屏幕分辨率:

Rectangle rc = Screen.PrimaryScreen.Bounds;

答案 1 :(得分:0)

您需要的是Scaling

您已为1920x1080的固定结果编码。即1920像素宽度和1080像素高度。

如果需要缩放比例,则可以获取当前屏幕结果,然后计算比例。

假设分辨率为640x480。然后,您可以使用以下公式计算X(或宽度)比率:

640 / 1920 = 0.3333...

Y(或高度)比率,其中:

480 / 1080 = 0.4444...

要进行缩放,现在将宽度和高度乘以各自的比例:

SetCursorPos(105 * 0.3333, 640 * 0.4444)

在代码中,它将类似于:

int currentX = SystemParameters.PrimaryScreenHeight;
int currentY = SystemParameters.PrimaryScreenWidth;

var xScale = currentX / 1920;
var yScale = currenty / 1080;

SetCursorPos(105 * xScale, 640 * yScale);