簡體   English   中英

調整c#中的圖像寬度,但不調整高度

[英]Resize image width in c# but not the height

如何使用image.resize()調整C#中圖像的寬度而不調整高度

當我這樣做時:

image.Resize(width: 800, preserveAspectRatio: true,preventEnlarge:true);

這是完整的代碼:

var imagePath = "";
var newFileName = "";
var imageThumbPath = "";
WebImage image = null;            
image = WebImage.GetImageFromRequest();
if (image != null)
{
    newFileName = Path.GetFileName(image.FileName);
    imagePath = @"pages/"+newFileName;
    image.Resize(width:800, preserveAspectRatio:true, preventEnlarge:true);
    image.Save(@"~/images/" + imagePath);
    imageThumbPath = @"pages/thumbnail/"+newFileName;
    image.Resize(width: 150, height:150, preserveAspectRatio:true, preventEnlarge:true);
    image.Save(@"~/images/" + imageThumbPath);
}

我收到此錯誤消息:

方法'Resize'沒有重載需要3個參數

文檔是垃圾,所以我偷看了源代碼 他們使用的邏輯是查看為高度和寬度傳遞的值,並計算每個值將新值與當前值進行比較的寬高比。 無論哪個值(高度或寬度)具有更大的縱橫比,其值都是從另一個值計算得出的。 這是相關的片段

double hRatio = (height * 100.0) / image.Height;
double wRatio = (width * 100.0) / image.Width;
if (hRatio > wRatio)
{
    height = (int)Math.Round((wRatio * image.Height) / 100);
}
else if (hRatio < wRatio)
{
    width = (int)Math.Round((hRatio * image.Width) / 100);
}

所以,這意味着,如果你不想自己計算高度值,只需傳入一個非常大的高度值。

image.Resize(800, 100000, true, true);

這將導致hRatio大於wRatio ,然后將根據width計算height

由於您將preventEnlarge設置為true ,因此您可以直接傳遞image.Height

image.Resize(800, image.Height, true, true);

當然,自己計算height並不困難:

int width = 800;
int height = (int)Math.Round(((width * 1.0) / image.Width) * image.Height);
image.Resize(width, height, false, true);

適用於Winform的解決方案


使用此功能:

public static Image ScaleImage(Image image, int maxWidth)
{    
    var newImage = new Bitmap(newWidth, image.Height);
    Graphics.FromImage(newImage).DrawImage(image, 0, 0, newWidth, image.Height);
    return newImage;
}

用法:

Image resized_image = ScaleImage(image, 800);

暫無
暫無

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

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