[英]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.