ホームページ >バックエンド開発 >C++ >最大高さと最大幅の制約でアスペクト比を維持しながら画像のサイズを比例的に変更するにはどうすればよいですか?

最大高さと最大幅の制約でアスペクト比を維持しながら画像のサイズを比例的に変更するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-06 14:19:43871ブラウズ

How to Proportionally Resize Images While Maintaining Aspect Ratio with Max Height and Max Width Constraints?

MaxHeight および MaxWidth 制約を使用して画像を比例的にサイズ変更する

特定のサイズに合わせて画像を拡大縮小する場合、画像のアスペクト比を維持することが重要です。このシナリオの目標は、指定された最大の高さと幅の制​​約を遵守しながら、画像のサイズを比例的に変更することです。

これを達成するために、画像の幅と高さが最大値と比較されます。いずれかの寸法が制限を超えると、両方の寸法が制約を満たすまで画像が縮小されます。ただし、このスケーリングでは、歪みを避けるために元のアスペクト比を保持する必要があります。

これを実現する 1 つの方法は、次のコードを使用することです。

public static Image ScaleImage(Image image, int maxWidth, int maxHeight)
{
    double ratioX = (double)maxWidth / image.Width;
    double ratioY = (double)maxHeight / image.Height;
    double ratio = Math.Min(ratioX, ratioY);

    int newWidth = (int)(image.Width * ratio);
    int newHeight = (int)(image.Height * ratio);

    Bitmap newImage = new Bitmap(newWidth, newHeight);

    using (Graphics graphics = Graphics.FromImage(newImage))
    {
        graphics.DrawImage(image, 0, 0, newWidth, newHeight);
    }

    return newImage;
}

このコードでは、幅と高さの比率 (比率 X と比率 Y) を計算して、画像をどの程度縮小する必要があるかを決定します。これらの比率 (比率) の最小値により、アスペクト比を維持しながら、指定された最大制約を超えて画像のサイズが変更されないことが保証されます。新しい寸法 (newWidth および newHeight) は、スケーリング率に基づいて計算されます。最後に、新しいビットマップ (newImage) が作成され、元の画像がスケーリングされた寸法でその上に描画されます。

以上が最大高さと最大幅の制約でアスペクト比を維持しながら画像のサイズを比例的に変更するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。