【问题标题】:Properly scaling or resizing an image or sprite maintaining its original aspect ratio正确缩放或调整图像或精灵的大小,保持其原始纵横比
【发布时间】:2013-12-04 14:16:24
【问题描述】:

我在这个网站上找到了很多答案,但不幸的是,没有任何东西能解决我要描述的问题。

我设计了一个 800x520 横向模式的应用。所有资产都是使用该预定义的窗口大小设计的。我使用了单位制,但我认为这无关紧要。

现在,我有一个 85x70 大小的精灵/图像。无论真实设备的窗口/屏幕大小如何,我都希望它可以缩放但保持其原始纵横比。到目前为止,我有以下内容,它保持了比率但没有正确调整大小,这意味着如果设备屏幕的宽度和高度都大于我预定义的窗口大小,它显示精灵仍然很小。如果高度没有变化但只有宽度或宽度没有变化但只有高度,那很好。图像不应在 x 或 y 上缩放。但是下面的这个 sn-p 并不能完成这项工作。

float screenW = Screen.SCREEN_WIDTH; // Predefined width 800
float screenH = Screen.SCREEN_HEIGHT; // Predefined height 520

float deviceW = Gdx.graphics.getWidth(); // Actual device width that can vary
float deviceH = Gdx.graphics.getHeight(); // Actual device height that can vary

float changeX = screenW / deviceW; // Also tried deviceW / screenW 
float changeY = screenH / deviceH; // Also tried deviceH / screenH

// I tried applying the changeX and changeY  above
// in sprite's scale.x and scale.y respectively but no luck
// So I tried the below to get the new size of the sprite 
// with and without applying scale above..
// Tried a lot of ways but no luck

float newWidth = (Sprite.WIDTH * changeX);
float newHeight = (Sprite.HEIGHT * changeY);

我不需要任何实际代码,只要我有正确的算法,我会很感激的。

【问题讨论】:

  • “不做这项工作”并没有给我们太多的帮助。给我们一些样本编号。屏幕高度/宽度是多少?设备的高度/宽度是多少?你得到的价值是什么,你期待什么?丹尼尔提供的答案应该有效,所以一定有其他事情你没有告诉我们。
  • @JimMischel 屏幕尺寸(800 宽 x 520 高 = 1.54 纵横比)。设备尺寸(1024 x 768 = 1.33 纵横比)。在设备中绘制圆形/正方形时,圆形/正方形不会保持比例并在 y 上按比例放大,实际上是应用 Daniel 下面给出的解决方案。圆变成椭圆。我得到答案中所示的比例因子,然后通过按所述相乘将其应用于圆形/方形纹理的宽度和高度。谢谢你。对不起,如果我仍然不清楚。
  • 我为此编写了一个 jQuery 插件,它可能会有所帮助:stackoverflow.com/questions/18838963/…

标签: java algorithm scale aspect-ratio


【解决方案1】:

changeXchangeY 的计算似乎倒退了。例如,如果新设备的宽度为 1600,您可能希望按 2 倍缩放。您的 changeX 将是 1/2。

尝试类似:

float changeX = deviceW / screenW;
float changeY = deviceH / screenH;

计算完这些后,您需要按 2 中的较小者进行缩放以保持纵横比。

float scale = Math.min(changeX, changeY);

然后你可以通过将原始精灵值乘以scale来计算新值

【讨论】:

  • 那不保持纵横比。
  • 对不起,我尝试了它以及该站点的许多其他解决方案,但没有奏效。只是再次尝试确定,但没有成功。
  • 丹尼尔雅各布森的方法是正确的。 WebApp 的问题肯定出在其他地方。
  • @A.I.Breveleri 对不起,但它不起作用,我不知道为什么。我对此并不陌生。我希望将完成的应用程序移植到不同的平板电脑上,所以我至少尝试了应用程序中的主角不应该被严重缩放。
猜你喜欢
  • 2012-10-02
  • 2013-06-26
  • 2012-04-15
  • 1970-01-01
  • 2017-02-08
  • 2012-05-01
相关资源
最近更新 更多