最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

這時(shí),我們可以通過編碼計(jì)算長(zhǎng)寬來重繪圖像。

C#代碼

如下:

/// <summary>
/// 根據(jù)容器(如PictureBox)長(zhǎng)寬的限制,在不改變圖像比例的情況下,調(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;
    //計(jì)算原圖的長(zhǎng)寬比例
    Scale = (float)srcImg.Height / (float)srcImg.Width;
    iw = srcImg.Width;
    ih = srcImg.Height;
    //如果原圖長(zhǎng)寬都不大于容器長(zhǎng)和寬,則不需要調(diào)整大小
    if (srcImg.Width <= maxWidth && srcImg.Height <= maxHeight)
    {
        iw = srcImg.Width;
        ih = srcImg.Height;
    }
    //如果原圖寬大于容器寬,且原圖高不大于容器高,則調(diào)整后的圖像寬就是容器寬,圖像高需要根據(jù)長(zhǎng)寬比例來計(jì)算
    else if (srcImg.Width > maxWidth && srcImg.Height <= maxHeight)
    {
        iw = maxWidth;
        ih = (int)(Scale * iw);
    }
    //如果原圖高大于容器高,且原圖寬不大于容器寬,則調(diào)整后的圖像高就是容器高,圖像寬需要根據(jù)長(zhǎng)寬比例來計(jì)算
    else if (srcImg.Width <= maxWidth && srcImg.Height > maxHeight)
    {
        ih = maxHeight;
        iw = (int)(ih / Scale);
    }
    //如果原圖高和寬都大于容器高和寬,則調(diào)整后的圖像高和圖像寬都需要重新計(jì)算
    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é)

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

相關(guān)文章

  • C#使用Process類調(diào)用外部程序分解

    C#使用Process類調(diào)用外部程序分解

    這篇文章主要介紹了C#使用Process類調(diào)用外部程序分解,分別介紹了啟動(dòng)外部程序、關(guān)掉外部程序、關(guān)掉后調(diào)用一些方法的方法,需要的朋友可以參考下
    2014-07-07
  • C#操作數(shù)據(jù)庫(kù)中存取圖片文件的方法

    C#操作數(shù)據(jù)庫(kù)中存取圖片文件的方法

    這篇文章主要介紹了C#操作數(shù)據(jù)庫(kù)中存取圖片文件的方法,以實(shí)例形式分析了C#將圖片存入數(shù)據(jù)庫(kù)及從數(shù)據(jù)庫(kù)讀取圖片文件的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-10-10
  • winform實(shí)現(xiàn)關(guān)閉按鈕失效的兩種方法

    winform實(shí)現(xiàn)關(guān)閉按鈕失效的兩種方法

    這篇文章主要介紹了winform實(shí)現(xiàn)關(guān)閉按鈕失效的兩種方法,實(shí)例分析了WinForm實(shí)現(xiàn)關(guān)閉按鈕失效的原理與所涉及的相關(guān)技巧,需要的朋友可以參考下
    2015-09-09
  • 使用C# 調(diào)用deepseek api接口實(shí)現(xiàn)正常訪問的過程

    使用C# 調(diào)用deepseek api接口實(shí)現(xiàn)正常訪問的過程

    本文介紹了使用C#調(diào)用deepseek API接口實(shí)現(xiàn)正常訪問的方法,包括解決SSL/TLS安全通道問題和切換模型等常見問題,并提供了默認(rèn)使用的reasoner模型和賬戶余額信息,感興趣的朋友一起看看吧
    2025-02-02
  • 詳解ObjectARX開發(fā)環(huán)境的創(chuàng)建與開發(fā)實(shí)例Hello World(VS2005+AutoCad2008+ObjectArx2008)

    詳解ObjectARX開發(fā)環(huán)境的創(chuàng)建與開發(fā)實(shí)例Hello World(VS2005+AutoCad2008+Object

    這篇文章主要介紹了ObjectARX開發(fā)環(huán)境的創(chuàng)建與開發(fā)實(shí)例Hello World(VS2005+AutoCad2008+ObjectArx2008),本文通過圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • C#操作xml文件之Linq To Xml詳解

    C#操作xml文件之Linq To Xml詳解

    Linq To Xml,不看其他,單純的看名字都能感覺到,其可以使用靈活且強(qiáng)大的Linq語(yǔ)法,同時(shí)也可以使用lambda以及Xpath定位。本文將利用C#實(shí)現(xiàn)操作Linq To Xml,感興趣的可以了解一下
    2022-11-11
  • unity實(shí)現(xiàn)貼圖矩陣運(yùn)算(旋轉(zhuǎn)平移縮放)

    unity實(shí)現(xiàn)貼圖矩陣運(yùn)算(旋轉(zhuǎn)平移縮放)

    這篇文章主要為大家詳細(xì)介紹了unity實(shí)現(xiàn)貼圖矩陣運(yùn)算,旋轉(zhuǎn)平移縮放,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • openfiledialog讀取txt寫入數(shù)據(jù)庫(kù)示例

    openfiledialog讀取txt寫入數(shù)據(jù)庫(kù)示例

    這篇文章主要介紹了openfiledialog讀取txt寫入數(shù)據(jù)庫(kù)示例,需要的朋友可以參考下
    2014-03-03
  • C#中的線程Threads與任務(wù)Tasks詳解(最新整理)

    C#中的線程Threads與任務(wù)Tasks詳解(最新整理)

    C#開發(fā)中推薦使用Task而非Thread,由于Task更高效,提供更簡(jiǎn)單的接口,并且由.NET運(yùn)行時(shí)管理線程,減少開發(fā)者負(fù)擔(dān),Task適合異步操作和返回值處理,而Thread則適用于需要低級(jí)控制和實(shí)時(shí)系統(tǒng),這篇文章介紹C#中的線程Threads與任務(wù)Tasks,感興趣的朋友跟隨小編一起看看吧
    2026-01-01
  • C#實(shí)現(xiàn)chart控件動(dòng)態(tài)曲線繪制

    C#實(shí)現(xiàn)chart控件動(dòng)態(tài)曲線繪制

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)chart控件動(dòng)態(tài)曲線繪制,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02

最新評(píng)論

辛集市| 天长市| 阿城市| 方山县| 疏勒县| 安平县| 望城县| 贵州省| 延庆县| 龙州县| 丽水市| 铜梁县| 界首市| 平山县| 乌兰浩特市| 望城县| 玉溪市| 朝阳区| 启东市| 于田县| 南宫市| 五台县| 全南县| 玉溪市| 宣威市| 呼图壁县| 南昌县| 柘荣县| 施秉县| 马龙县| 原阳县| 慈利县| 泰兴市| 星子县| 乌兰察布市| 宣汉县| 松滋市| 凌源市| 华池县| 扎囊县| 湘潭县|