簡體   English   中英

通過保持不同屏幕分辨率的寬高比來計算圖像大小

[英]Image size calculation by keeping aspect ratio with different screen resolutions

我試圖通過保持縱橫比來調整圖像大小。 它應該足夠大,可以填充屏幕,沒有空白區域,如果需要,一些圖像應該在屏幕外。

下圖顯示了如何根據黑屏尺寸調整黃色圖像的大小。

在此輸入圖像描述

這是我實際使用的代碼,有沒有更好的方法來做到這一點?

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 < swidth && bheight > 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 < bheight) {
    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 < 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 >= 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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM