在两个屏幕之间转换点

时间:2019-01-10 12:51:09

标签: geometry transformation resolution scaling coordinate-transformation

我有很多要从脚本中的一个屏幕/监视器转换到另一个屏幕/监视器的点。

屏幕A-2880x1800分辨率
屏幕B-1280x1024分辨率

enter image description here

•黑匣子:屏幕/显示器。
•绿框:屏幕上所有点将从C(a)转换为C(b)的部分。

绿色框是两个屏幕上纵横比为16:9的视频源。我实际上不确定此绿色框是否重要,但我将其包含在内以表明我要执行的操作。

到目前为止,我已经尝试遵循this post,它似乎可以很好地转换x值:

Rectangle Old
NW coordinate - (X0_Old, Y0_Old)
SE coordinate - (X1_Old, Y1_Old)

Rectangle New
NW coordinate - (X0_New, Y0_New)
SE coordinate - (X1_New, Y1_New)

X_New = X0_New + (X_Old - X0_Old) * X_Coeff
X_New =   0    + (X_Old -   0   ) * X_Coeff
  where 
    X_Coeff = (X1_New - X0_New) / (X1_Old - X0_Old)
    X_Coeff = (1280   -   0   ) / (2880   -   0   )

X_New = (X_Old)*(1280/2880)

X_New并不完美,但由于某种原因,它是:
X_New = 2*(X_Old)*(1280/2880)

也许这是由于某种扩展引起的吗? x坐标在起作用,因此我没有提出疑问并继续前进。

当我尝试转换Y坐标时出现了问题:

Y_New = Y0_New + (Y_Old - Y0_Old) * Y_Coeff
Y_Coeff = (Y1_New - Y0_New) / (Y1_Old - Y0_Old)

Y_New = Y0_New + (Y_Old - Y0_Old) * Y_Coeff
Y_New =    0   + (Y_Old -   136 ) * Y_Coeff
  where
    Y_Coeff = (Y1_New - Y0_New) / (Y1_Old - Y0_Old)
    Y_Coeff = (  720  -   174 ) / (1620   -   136)
    Y_Coeff = 546/1484

Y_New = (Y_Old - 136) * (546/1484)
Y_New计算的

Y值肯定太低而无法正确。计算Y_New的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

绝对可以,公式X_New = (X_Old)*(1280/2880)是正确的-它可以将0转换为0,将2880转换为1280,将1440转换为640。也许您真的有某种缩放比例?

关于Y-在这种情况下(受X轴限制),您也应该对Y使用相同的系数X_Coeff

但是我可以看到第二个屏幕上的16x9矩形的尺寸为1280x720,高度为152的空条纹,而对于第一个屏幕,尺寸为2880x1620的高度为90的空条纹

Y_New = 152 + (Y_Old -  90) * X_Coeff

通常情况下,您必须根据屏幕和视频尺寸矩形之间的比率选择X_CoeffY_Coeff