簡體   English   中英

在保持縱橫比和舍入到整數的同時調整大小

[英]Resizing while maintaining aspect ratio and rounding to even integers

我允許用戶在嘗試保持圖像的原始寬高比時調整圖像大小。

對於每個調整大小操作,我有一個“偏移”變量,表示寬度和高度的變化。 這是基於鼠標移動,因此它可以是值的任意組合,具體取決於它們在調整大小時移動鼠標的程度。

我現在正在做的是取兩個值中的較大值(x和y變化)並使用它來計算相同寬高比的另一個值。 這是我的代碼:

if (Math.Abs(offset.X) > Math.Abs(offset.Y))
{
    offset.Y = (int)(offset.X / AspectRatio);
}
else
{
    offset.X = (int)(offset.Y * AspectRatio);
}

寬高比是標准寬度/高度值。

我的代碼的問題是它使用整數值,因此它會舍入並導致寬高比變形。

我假設我需要做的是捕捉到可以被寬高比整除的整數值,或者為此目的。 但我不知道如何通過修改這些x和y“偏移”值來做到這一點。

使offset.X,.Y和AspectRatio浮動/加倍,執行您需要的任何計算,並且只計算一次新的大小將其四舍五入為整數。
這樣你就可以獲得最大的精度。

PS使用Math.Round而不是簡單地轉換為int,這將獲得一些額外的精度。

我假設我需要做的是捕捉到可以被寬高比整除的整數值,或者為此目的。 但我不知道如何通過修改這些x和y“偏移”值來做到這一點。

要么你有不完美的縱橫比,裁剪或厚實的調整。 想一想:

使用3:4縱橫比,您可以水平縮放的最小尺寸是多少,仍然與原始比例完美匹配?

四個像素。

現在將縱橫比更改為兩個大素數,您將看到問題所在。

除此之外,您可以在一個維度上裁剪圖像,或使用圖像過濾進行插值,並使用不太完美的寬高比更改。

確保你的計算是正確的。 將縱橫比計算為浮點值,並僅在最終計算時截斷為整數。 否則您將出現雙舍入錯誤。

暫無
暫無

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

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