Rumah >pembangunan bahagian belakang >C++ >Bagaimana Mengubah Saiz Imej Secara Berkadaran Sambil Mengekalkan Lebar dan Ketinggian Maksimum?

Bagaimana Mengubah Saiz Imej Secara Berkadaran Sambil Mengekalkan Lebar dan Ketinggian Maksimum?

DDD
DDDasal
2025-01-06 15:30:40167semak imbas

How to Proportionally Resize Images While Maintaining Maximum Width and Height?

Mengubah Saiz Imej Secara Berkadaran: Mengekalkan Lebar dan Ketinggian Maksimum

Dalam senario di mana imej mempamerkan dimensi yang melebihi had maksimum yang ditetapkan, adalah penting untuk menskalakannya turun secara berkadar. Walau bagaimanapun, pelarasan ini memerlukan memastikan bahawa kedua-dua lebar dan tinggi kekal dalam kekangan ini. Selain itu, proses harus mematuhi nisbah aspek asal.

Untuk mencapainya, penyelesaian yang disesuaikan dipersembahkan:

public static void Test()
{
    using (var image = Image.FromFile(@"c:\logo.png"))
    using (var newImage = ScaleImage(image, 300, 400))
    {
        newImage.Save(@"c:\test.png", ImageFormat.Png);
    }
}

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

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

    var newImage = new Bitmap(newWidth, newHeight);

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

    return newImage;
}

Kaedah ScaleImage mengira dengan teliti faktor penskalaan yang sesuai untuk mengurangkan secara berkadar imej tanpa menjejaskan nisbah bidangnya. Ia mencapai ini dengan membandingkan lebar dan ketinggian maksimum yang disediakan dengan dimensi imej asal. Setelah nisbah yang betul ditentukan, ia digunakan pada kedua-dua dimensi untuk memperoleh nilai berskala. Peta bit baharu kemudian dibuat dengan dimensi berskala, dan imej asal dilukis padanya secara berkadar menggunakan konteks grafik. Imej yang terhasil mengekalkan kekangan maksimum sambil mengekalkan perkadaran asalnya.

Atas ialah kandungan terperinci Bagaimana Mengubah Saiz Imej Secara Berkadaran Sambil Mengekalkan Lebar dan Ketinggian Maksimum?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn