C#不改變圖像長寬比例調(diào)整圖像大小方式
更新時間:2025年01月20日 14:51:04 作者:hyq106
文章介紹了在UI顯示圖片時,當容器大小固定而圖片尺寸大于容器時,可以通過編碼計算長寬來重繪圖像,以確保圖像的長寬比例不變,C#代碼示例展示了如何在Winform前端實現(xiàn)這一功能
C#不改變圖像長寬比例調(diào)整圖像大小
在UI顯示圖片時,如果容器大小固定,而圖片尺寸大于容器,那顯示圖片時會顯示不全。
有些容器(例如PictureBox)本身可以通過設置屬性來改變圖像大小,讓圖像大小自動適應容器,但這不能保證圖像的長寬比例不變。
這時,我們可以通過編碼計算長寬來重繪圖像。
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);
}
}
//構建新的位圖
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);
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
C# 通過同步和異步實現(xiàn)優(yōu)化做早餐的時間
本文以一個簡單的小例子—如何做一頓早餐及如何優(yōu)化做早餐的時間來讓大家具體了解一下同步和異步方法的區(qū)別,需要的朋友可以參考一下2021-12-12
C#中IList<T>與List<T>的區(qū)別深入解析
本篇文章主要是對C#中IList<T>與List<T>的區(qū)別進行了詳細的分析介紹,需要的朋友可以過來參考下,希望對大家有所幫助2014-01-01
在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?件的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-06-06
C#?winform中ComboBox數(shù)據(jù)綁定的兩種方法及效率詳解
這篇文章主要給大家介紹了關于C#?winform中ComboBox數(shù)據(jù)綁定的兩種方法及效率,Winform?ComboBox數(shù)據(jù)綁定是指將數(shù)據(jù)源中的數(shù)據(jù)與ComboBox控件進行關聯(lián),需要的朋友可以參考下2023-08-08
macOS系統(tǒng)下Vscode的python配置教程
這篇文章主要介紹了macOS系統(tǒng)下Vscode的python配置教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04

