2013-01-01 52 views
2

我正在創建圖像調整大小的方法,以便將圖像調整爲最大大小(最大寬度和最大高度)。我正在使用以下方法計算目標尺寸。如果寬度大於最大寬度,我將寬度設置爲最大寬度並計算高度,然後通過使用這個簡單的數學公式來重新計算高度:計算尺寸以調整圖像大小

(width/height)=(maxWidth/maxHeight)

但是,調整後的圖像在調整大小時似乎沒有正確的尺寸。我的方法是這樣的:

private static Size CalculateDimensions(Size currentSize, double maxWidth, double maxHeight) {    
    double width = currentSize.Width, 
      height = currentSize.Height; 
    if (width > maxWidth) { 
     width = maxWidth; 
     height = width * maxHeight/maxWidth; 
    } 
    if (height > maxHeight) { 
     height = maxHeight; 
     width = height * maxWidth/maxHeight; 
    } 
    return new Size(Convert.ToInt32(width), Convert.ToInt32(height)); 
} 

你能告訴我我在哪裏錯了嗎?爲什麼這不起作用?

+0

你真的打算繁殖嗎?你能否應用一些適當的數字值並計算結果? – bonCodigo

回答

0

檢查您的最大高度和最大寬度總是與圖像尺寸成正比。 因爲要使公式正常工作,始終當前尺寸必須與最大尺寸成正比。

+0

雅如ChrisF說盡量使用圖片的比例。那可行。 – GautamJeyaraman

0
private static Size CalculateDimensions(Size currentSize, double maxWidth, double maxHeight) { 
    var sourceWidth = (double)currentSize.Width; 
    var sourceHeight = (double)currentSize.Height; 

    var widthPercent = maxWidth/sourceWidth; 
    var heightPercent = maxHeight/sourceHeight; 

    var percent = heightPercent < widthPercent 
        ? heightPercent 
        : widthPercent; 

    var destWidth = (int)(sourceWidth * percent); 
    var destHeight = (int)(sourceHeight * percent); 

    return new Size(destWidth, destHeight); 
} 
1

不要使用maxWidthmaxHeight的比例,但原來widthheight的比例。

您目前計算的是您的最大尺寸圖像的縱橫比,它與原始圖像的長寬比將是一個常數並且不同。

你需要像下面的代碼:

if (width > maxWidth) 
{ 
    double ratio = height/width; 
    width = maxWidth; 
    height = width * ratio; 
} 
if (height > maxHeight) 
{ 
    double ratio = width/height; 
    height = maxHeight; 
    width = height * ratio; 
} 

可能有其他的優化,你可以做的代碼。

相關問題