2

画像を最大サイズ (最大幅と最大高さ) に合わせるための画像サイズ変更メソッドを作成しています。次の方法を使用して、ターゲットの寸法を計算しています。幅が max-width よりも大きい場合は、幅を max-width に設定して高さを計算し、次の簡単な数式を使用して高さを計算します。

(幅 / 高さ) = (最大幅 / 最大高さ)

しかし、サイズ変更された画像は、サイズ変更されたときに正しい寸法ではないようです。私の方法はこれです:

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));   
}

どこが間違っているのか教えてもらえますか? なぜこれが機能しないのですか?

4

3 に答える 3

2

と の比率ではなく、元のmaxWidthとの比率を使用します。maxHeightwidthheight

現在計算しているのは、最大サイズの画像の縦横比です。これは一定で、元の画像の縦横比とは異なります。

次のコードのようなものが必要です。

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

コードに対して実行できる他の最適化もおそらくあるでしょう。

于 2013-01-01T15:28:01.697 に答える
0

max-height と max-width が常に画像のサイズに比例しているかどうかを確認してください。式が正しく機能するためには、常に現在のサイズが最大サイズに比例する必要があるためです。

于 2013-01-01T15:24:32.680 に答える
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);
}
于 2013-01-01T15:27:42.750 に答える