我有很多要从脚本中的一个屏幕/监视器转换到另一个屏幕/监视器的点。
屏幕A-2880x1800分辨率
屏幕B-1280x1024分辨率
•黑匣子:屏幕/显示器。
•绿框:屏幕上所有点将从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
的正确方法是什么?
答案 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_Coeff
或Y_Coeff
。