C# 计算图片最大缩放宽高的函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | /// <summary> /// 计算同比缩放的值 /// </summary> /// <param name="oW">原宽</param> /// <param name="oH">原高</param> /// <param name="w">目标宽</param> /// <param name="h">目标高</param> /// <param name="mode">HW(指定高宽缩放(可能变形)),W(指定宽,高按比例),H(指定高,宽按比例),MaxHW(最大宽高比例缩放,比如原100*50->50*30,则结果是50*25)</param> /// <returns></returns> public static WidthHeight TBScale( double oW, double oH, double w, double h, string mode= "W" ) { WidthHeight wh = new WidthHeight(); double ow = wh.width = oW; double oh = wh.height = oH; switch (mode) { case "HW" : //指定高宽缩放(可能变形) wh.width = ( int )w; wh.height = ( int )h; break ; case "W" : //指定宽,高按比例 wh.height = oH * w / oW; break ; case "H" : //指定高,宽按比例 wh.width = oW * h / oH; break ; case "Cut" : //指定高宽裁减(不变形) if (( double )oW / ( double )oH > ( double )wh.width / ( double )wh.height) { oh = oH; ow = oH * wh.width / wh.height; } else { ow = oW; oh = oW * h / wh.width; } break ; case "MaxHW" : //最大宽高比例缩放,比如原100*50->50*30,则结果是50*25 var rmaxhw_d1w = oW * 1.0 / w; var rmaxhw_d2h = oH * 1.0 / h; if (rmaxhw_d1w > rmaxhw_d2h) { if (rmaxhw_d1w <= 1) { wh.width = oW; h = oH; goto case "HW" ; } wh.width = w; goto case "W" ; } if (rmaxhw_d2h <= 1) { wh.width = oW; h = oH; goto case "HW" ; } wh.height = h; goto case "H" ; default : break ; } wh.width = ( int )wh.width; wh.height = ( int )wh.height; return wh; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | /// <summary> /// 宽高类 /// </summary> public class WidthHeight { /// <summary> /// 宽 /// </summary> public double width { get ; set ; } /// <summary> /// 高 /// </summary> public double height { get ; set ; } } |
本文来自博客园,作者:jevan,转载请注明原文链接:https://www.cnblogs.com/DoNetCShap/p/14894781.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
2020-06-17 C# 16进制与Byte[]数组互转
2019-06-17 wpf中文本框只能输入整数