两个屏幕之间的转换点
Transform points between two screens
我想在脚本中将大量点从一个 screen/monitor 转换为另一个。
屏幕 A - 2880x1800 分辨率
屏幕 B - 1280x1024 分辨率
• 黑框:screen/monitor.
• 绿框:屏幕的一部分,所有点都将从 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
的正确方法是什么?
当然,公式 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
。
我想在脚本中将大量点从一个 screen/monitor 转换为另一个。
屏幕 A - 2880x1800 分辨率
屏幕 B - 1280x1024 分辨率
• 黑框:screen/monitor.
• 绿框:屏幕的一部分,所有点都将从 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
的正确方法是什么?
当然,公式 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
。