3

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つの引数を取ります

4

2 に答える 2

8

ドキュメントはゴミなので、ソースコードを覗いてみました。彼らが使用しているロジックは、高さと幅に渡された値を調べ、新しい値を現在の値と比較するそれぞれのアスペクト比を計算することです。アスペクト比が大きい方の値(高さまたは幅)は、他の値から計算された値を取得します。関連するスニペットは次のとおりです。

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、にheight基づいて計算されwidthます。

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);
于 2013-01-30T22:07:27.467 に答える
1

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);
于 2013-01-30T20:48:45.543 に答える