我正在處理圖像縮放應用程序,並給出縮放比例和矩形。我需要將矩形與比率相乘,但也要確保生成的矩形只包含整數(即沒有浮點)。如果不是,我想擴展源矩形,以使上述條件成立。對整數進行舍入,使其乘以浮點數返回整數
目前我很勉強它(代碼如下)。但我很肯定有一種方法可以用聰明的數學來做這件事。
RECT AdjustRectWholeNumber(RECT SrcRect, float ratio)
{
RECT adjustedRect = SrcRect;
while (!isWholeNumber(adjustedRect.left * ratio))
{
adjustedRect.left--;
}
while (!isWholeNumber(adjustedRect.top * ratio))
{
adjustedRect.top--;
}
while (!isWholeNumber(adjustedRect.right * ratio))
{
adjustedRect.right++;
}
while (!isWholeNumber(adjustedRect.bottom * ratio))
{
adjustedRect.bottom++;
}
return adjustedRect;
}
實例:假設矩形(78,188,1068,790)和比1.25,則它應該返回(76,188,1068,792)
推理:如果我是乘以(78,188,1068, 790)減少1.25,它會給我(97.5,188,1068,987.5)。這是不理想的,因爲如果我縮放(縮小或縮小)縮放的矩形,我會失去精度,這在屏幕上顯示爲小的損壞僞像。就像我們擴展源矩形一樣,在乘以比例因子後,我們可以得到所有的整數,不會丟失精度,從而不會出現損壞。
注:縮放比例保證能夠生產整數
任何幫助表示讚賞!
編輯:添加isWholeNumber
代碼的要求
bool isWholeNumber(float f)
{
if (floor(f) == f)
return true;
return false;
}
澄清,讓我們假設,我將永遠得到唯一的比率(1.25,1.5,1.75,2.0,2.25)
你可能會更好地傳遞一個實際的比率或分數(即分子/分母作爲'int's)。如果我通過pi傳遞,不確定你的函數需要返回什麼? – franji1
你可以包含'isWholeNumber'的代碼嗎? –
「(78,188,1068,790)和1.25,它應該返回(76,188,1068,792)」?它不應該是(x',y',1335,988)。僞代碼/數學是'newWidth =((int)(oldWidth * ratio + 0.5f))'0.5來說明四捨五入。 (x',y')將基於您要縮放的點。 – SGM1