2015-10-29 27 views
0

我有一个点的数组,所有的范围从x(0-512)和y(0-384),这意味着长宽比为4:3。比例4:3分到16:9分

如果我想在16:9显示器上完美地显示每个点,那么需要什么数学来实现呢?

比方说,“EE”是我的4:3点和“点”是16:9点,我需要..

我想,因为我想它的规模1920上:1080显示器,这是一个16:9的长宽比

point = new PointF(ee.x * (1920/512), ee.y * (1080/384)); 

但这似乎是由abit。

任何帮助?谢谢。

+0

“完美”是什么意思?填满整个16:9的显示器,这会破坏纵横比(一个圆圈会变成一个蛋),或者保留宽高比,并在3:4图像的左侧和右侧接受黑色垂直条? – Roland

+0

确保你使用浮动,然后在整数“1920/512 = 3”和“1080/382 = 2”的原因这里...只是做'1920.0'和'1080.0' –

回答

1

您不能匹配正好的方面,而不是每个维度乘以一个整数。这里,将适合的唯一整数是2(384事业* 3> 1080)...

,所以你必须做的:

point = new Point (ee.x * 2, ee.y * 2); 

,你可以用它居中:

point = new Point (ee.x * 2 + ((1920 - 512*2)/2), ee.y * 2 + ((1080 - 384*2)/2))); 

希望帮助...

编辑:用浮漂,你必须采取的最低的乘数:

var multiplier = Math.Min(1920.0/512, 1080.0/384); 
point = new Point (ee.x * multiplier + ((1920 - 512*multiplier)/2), ee.y * multiplier + ((1080 - 384*multiplier)/2))); 
+0

我很抱歉..我忘了说PointF而不是Point。我也接受浮点值。 – Pops

0

你能详细说明你的意思吗?“off”?

如果您的意思是图像水平拉伸,这是因为高宽比比以前更大。如果你想让图像看起来像以前(但更大),你需要通过纵横比缩放一个轴来修复它。

aspect_ratio_before = 4.0f/3.0f; 
aspect_ratio_after = 16.0f/9.0f; 

// This is equal to 4/3. 
aspect_ratio_difference = aspect_ratio_after/aspect_ratio_before; 

// I squish the X axis here. 
point.x /= aspect_ratio_difference; 

// Alternatively, you can also multiply point.y by the 
// aspect_ratio_difference, though that will stretch the Y axis instead. 
// Use only one! 
// point.y *= aspect_ratio_difference; 

声明:我之前没有使用过.net,所以我不知道其渲染引擎的所有细节。这是基于我使用OpenGL和缩放的经验。