Java 正确缩放或调整图像或精灵的大小,以保持其原始纵横比

Java 正确缩放或调整图像或精灵的大小,以保持其原始纵横比,java,algorithm,scale,aspect-ratio,Java,Algorithm,Scale,Aspect Ratio,我已经在这个网站上找到了很多答案,但不幸的是,没有什么能解决我将要描述的问题 我设计了一个应用程序,800x520处于横向模式。所有资源都使用该预定义窗口大小进行设计。我用的是单位制,但我认为这与此无关 现在,我有一个85×70大小的精灵/图像。我希望它能够扩展,但无论真实设备的窗口/屏幕大小如何,都能保持其原始纵横比。到目前为止,我有以下内容,它保持了比例,但没有正确调整大小。这意味着,如果设备屏幕的宽度和高度都大于我预定义的窗口大小,它会显示精灵仍然很小。如果高度不变,但宽度不变,或者宽度不

我已经在这个网站上找到了很多答案,但不幸的是,没有什么能解决我将要描述的问题

我设计了一个应用程序,800x520处于横向模式。所有资源都使用该预定义窗口大小进行设计。我用的是单位制,但我认为这与此无关

现在,我有一个85×70大小的精灵/图像。我希望它能够扩展,但无论真实设备的窗口/屏幕大小如何,都能保持其原始纵横比。到目前为止,我有以下内容,它保持了比例,但没有正确调整大小。这意味着,如果设备屏幕的宽度和高度都大于我预定义的窗口大小,它会显示精灵仍然很小。如果高度不变,但宽度不变,或者宽度不变,但高度不变,那就好了。不应在x或y轴上缩放图像。但下面的这段代码不起作用

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);

我不需要任何实际的代码,只要我有一个正确的算法,我将不胜感激。

您的
changeX
changeY
的计算似乎是向后的。例如,如果新设备的宽度为1600,则需要按2的比例缩放。您的
changeX
将为1/2

尝试以下方法:

float changeX = deviceW / screenW;
float changeY = deviceH / screenH;
计算完这些后,需要按2的较小值进行缩放,以保持纵横比

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

然后,您可以将原始的精灵值乘以无法保持纵横比的
比例

来计算新值。很抱歉,我在这个网站上尝试了它和许多其他解决方案,但都不起作用。只是再次尝试确定,但没有运气。丹尼尔·雅各布森的方法是正确的。WebApp的问题一定在其他地方。@A.I.Breveleri抱歉,它不起作用,我不知道为什么。我对此并不陌生。我想将完成的应用程序移植到不同的平板电脑上,所以我尝试了至少应用程序中的主要角色不应该被严重缩放。“做不到这项工作”并没有给我们太多的机会。给我们一些样品编号。屏幕的高度/宽度是多少?设备的高度/宽度是多少?你得到的价值是什么,你期望的是什么?Daniel提供的答案应该有用,所以你一定有别的东西没有告诉我们。@JimMischel屏幕大小(800宽x 520高=1.54高宽比)。设备大小(1024x768=1.33纵横比)。在设备中绘制圆/正方形时,圆/正方形不保持比例,而是在y轴上放大,应用下面Daniel给出的解决方案,实际放大。圆变成椭圆。我得到了答案中所示的比例因子,然后将其应用于圆形/方形纹理的宽度和高度,如前所述相乘。非常感谢。抱歉,如果我还不清楚的话。我写了一个jQuery插件来实现这一点,它可能会有所帮助: