欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#不改變圖像長寬比例調(diào)整圖像大小方式

 更新時間:2025年01月20日 14:51:04   作者:hyq106  
文章介紹了在UI顯示圖片時,當容器大小固定而圖片尺寸大于容器時,可以通過編碼計算長寬來重繪圖像,以確保圖像的長寬比例不變,C#代碼示例展示了如何在Winform前端實現(xiàn)這一功能

C#不改變圖像長寬比例調(diào)整圖像大小

在UI顯示圖片時,如果容器大小固定,而圖片尺寸大于容器,那顯示圖片時會顯示不全。

有些容器(例如PictureBox)本身可以通過設(shè)置屬性來改變圖像大小,讓圖像大小自動適應(yīng)容器,但這不能保證圖像的長寬比例不變。

這時,我們可以通過編碼計算長寬來重繪圖像。

C#代碼

如下:

/// <summary>
/// 根據(jù)容器(如PictureBox)長寬的限制,在不改變圖像比例的情況下,調(diào)整圖像大小
/// author:huangyq1984@qq.com
/// </summary>
/// <param name="maxWidth">容器寬</param>
/// <param name="maxHeight">容器高</param>
/// <param name="srcImg">原圖</param>
/// <param name="backColor">空白處的背景色</param>
/// <returns></returns>
public static Image GetImageToFitContainer(int maxWidth,int maxHeight, Image srcImg, Color backColor)
{
    if (srcImg == null) return null;
    float Scale;
    int iw, ih;
    //計算原圖的長寬比例
    Scale = (float)srcImg.Height / (float)srcImg.Width;
    iw = srcImg.Width;
    ih = srcImg.Height;
    //如果原圖長寬都不大于容器長和寬,則不需要調(diào)整大小
    if (srcImg.Width <= maxWidth && srcImg.Height <= maxHeight)
    {
        iw = srcImg.Width;
        ih = srcImg.Height;
    }
    //如果原圖寬大于容器寬,且原圖高不大于容器高,則調(diào)整后的圖像寬就是容器寬,圖像高需要根據(jù)長寬比例來計算
    else if (srcImg.Width > maxWidth && srcImg.Height <= maxHeight)
    {
        iw = maxWidth;
        ih = (int)(Scale * iw);
    }
    //如果原圖高大于容器高,且原圖寬不大于容器寬,則調(diào)整后的圖像高就是容器高,圖像寬需要根據(jù)長寬比例來計算
    else if (srcImg.Width <= maxWidth && srcImg.Height > maxHeight)
    {
        ih = maxHeight;
        iw = (int)(ih / Scale);
    }
    //如果原圖高和寬都大于容器高和寬,則調(diào)整后的圖像高和圖像寬都需要重新計算
    else if (srcImg.Width > maxWidth && srcImg.Height > maxHeight)
    {
        iw = maxWidth;
        ih = (int)(Scale * iw);
        if (ih > maxHeight)
        {
            ih = maxHeight;
            iw = (int)(ih / Scale);
        }
    }
    //構(gòu)建新的位圖
    Bitmap bmp = new Bitmap(iw, ih);
    Graphics g = Graphics.FromImage(bmp);
    //用背景色填充
    g.Clear(backColor);
    //在位圖上根據(jù)調(diào)整后的高和寬繪制原圖
    g.DrawImage(srcImg, 0, 0, iw, ih);
    //保存
    System.IO.MemoryStream ms = new System.IO.MemoryStream();
    bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
    g.Dispose();

    srcImg = (Image)bmp;
    return srcImg;
}

C#Winform前端調(diào)用

如下:

Image srcImage = Image.FromFile(fileName);
pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;
pictureBox1.Image = GetImageToFitContainer(pictureBox1.Width,pictureBox1.Height,srcImage,Color.Transparent);

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C# 通過同步和異步實現(xiàn)優(yōu)化做早餐的時間

    C# 通過同步和異步實現(xiàn)優(yōu)化做早餐的時間

    本文以一個簡單的小例子—如何做一頓早餐及如何優(yōu)化做早餐的時間來讓大家具體了解一下同步和異步方法的區(qū)別,需要的朋友可以參考一下
    2021-12-12
  • C#中IList<T>與List<T>的區(qū)別深入解析

    C#中IList<T>與List<T>的區(qū)別深入解析

    本篇文章主要是對C#中IList<T>與List<T>的區(qū)別進行了詳細的分析介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-01-01
  • C#實現(xiàn)倒計時關(guān)閉提示框功能

    C#實現(xiàn)倒計時關(guān)閉提示框功能

    最近小編接到一個功能需要實現(xiàn)一個提示框并且能自動關(guān)閉的,看到這個需求真是懵了,四處搜集資料才搞定,接下來通過本文給大家分享C#實現(xiàn)倒計時關(guān)閉提示框功能,感興趣的朋友跟隨小編一起看看吧
    2019-07-07
  • 在Form_Load里面調(diào)用Focus無效的解決方法

    在Form_Load里面調(diào)用Focus無效的解決方法

    在調(diào)用Form_Load的時候,F(xiàn)orm其實還沒有進入展示階段,自然Focus()調(diào)用也就沒效果了。
    2013-02-02
  • C#使?XmlReader和XmlWriter操作XML?件

    C#使?XmlReader和XmlWriter操作XML?件

    這篇文章介紹了C#使?XmlReader和XmlWriter操作XML?件的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • Asp.Net中MVC緩存詳解

    Asp.Net中MVC緩存詳解

    這篇文章主要介紹了Asp.Net中MVC緩存的種類區(qū)別等內(nèi)容,一下來學(xué)習(xí)下。
    2017-12-12
  • C#對文件名智能排序的算法

    C#對文件名智能排序的算法

    這篇文章介紹了C#對文件名智能排序的算法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • C#?winform中ComboBox數(shù)據(jù)綁定的兩種方法及效率詳解

    C#?winform中ComboBox數(shù)據(jù)綁定的兩種方法及效率詳解

    這篇文章主要給大家介紹了關(guān)于C#?winform中ComboBox數(shù)據(jù)綁定的兩種方法及效率,Winform?ComboBox數(shù)據(jù)綁定是指將數(shù)據(jù)源中的數(shù)據(jù)與ComboBox控件進行關(guān)聯(lián),需要的朋友可以參考下
    2023-08-08
  • macOS系統(tǒng)下Vscode的python配置教程

    macOS系統(tǒng)下Vscode的python配置教程

    這篇文章主要介紹了macOS系統(tǒng)下Vscode的python配置教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • C#基于TimeSpan實現(xiàn)倒計時效果的方法

    C#基于TimeSpan實現(xiàn)倒計時效果的方法

    這篇文章主要介紹了C#基于TimeSpan實現(xiàn)倒計時效果的方法,比較實用的功能,需要的朋友可以參考下
    2014-08-08

最新評論