通过保持不同屏幕分辨率的宽高比来计算图像大小

我试图通过保持纵横比来调整图像大小。 它应该足够大,以填充屏幕没有空格,如果需要,一些图像应该在屏幕外。

下图显示了如何根据黑屏尺寸调整黄色图像的大小。

在此处输入图像描述

这是我实际使用的代码,有没有更好的方法来做到这一点?

if(bwidth > bheight) { if(bwidth > swidth && bheight > sheight) { new_height = sheight; new_width = (int) ((double) (bwidth/100)*(sheight/((double) (bheight)/100))); } else if(bwidth > swidth && bheight < sheight) { new_height = sheight; new_width = (int) ((double) (bwidth/100)*(sheight/((double) (bheight)/100))); } else if(bwidth < swidth && bheight < sheight) { new_height = sheight; new_width = (int) ((double) (bwidth/100)*(sheight/((double) (bheight)/100))); } else if(bwidth  sheight) { new_height = sheight; new_width = (int) ((double) (bwidth/100)*(sheight/((double) (bheight)/100))); } else if(bwidth >= swidth && bheight >= sheight) { new_width = swidth; new_height = (int) ((double) (bheight/100)*(swidth/((double) (bwidth)/100))); } } else if(bwidth  swidth && bheight > sheight) { new_width = swidth; new_height = (int) ((double) (bheight/100)*(swidth/((double) (bwidth)/100))); } else if(bwidth  sheight) { new_width = swidth; new_height = (int) ((double) (bheight/100)*(swidth/((double) (bwidth)/100))); } else if(bwidth < swidth && bheight < sheight) { new_width = swidth; new_height = (int) ((double) (bheight/100)*(swidth/((double) (bwidth)/100))); } else if(bwidth < swidth && bheight = swidth && bheight >= sheight) { new_width = swidth; new_height = (int) ((double) (bheight/100)*(swidth/((double) (bwidth)/100))); } } 
  • swidth =屏幕宽度
  • 高度=屏幕高度
  • bwidth =图像宽度
  • bheight =图像高度

比较比率。

如果图像的宽高比大于屏幕的宽高比,那么您知道您将使用屏幕宽度并计算高度。 否则,您将使用屏幕高度并计算宽度。 只要确保没有任何高度为零!

请注意,此处的代码将调整图像大小,使其始终填满屏幕。 这有效地消除了图像的任何其他部分。 要在完全可见的同时使图像尽可能大,请将第一行中的<更改为>

 if (bwidth / bheight < swidth / sheight) { new_width = swidth; new_height = (int) Math.floor((double) bheight * (double) swidth / (double) bwidth); } else { new_height = sheight; new_width = (int) Math.floor((double) bwidth * (double) sheight / (double) bheight); } 

我还做了一些改进:

  • 简化了方程式。 将分子和分母两者除以100都不起作用。
  • 简化了类型转换。 我不知道每个变量的类型,但它们都需要加倍。
  • 使用Math.floor而不仅仅是对int进行类型转换,以确保它不会向上舍入。

谢谢你@Erick Robertson改变了一点点,但现在它有效!

这是更改的代码:

 if (bwidth / swidth < bheight / sheight) { new_width = swidth; new_height = (int) Math.floor((double) bheight * (double) swidth / (double) bwidth); } else { new_height = sheight; new_width = (int) Math.floor((double) bwidth * (double) sheight / (double) bheight); }