zoukankan      html  css  js  c++  java
  • C# 计算图片最大缩放宽高的函数

    /// <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;
            }
        }
    

      

    /// <summary>
        /// 宽高类
        /// </summary>
        public class WidthHeight
        {
            /// <summary>
            /// 宽
            /// </summary>
            public double width { get; set; }
            /// <summary>
            /// 高
            /// </summary>
            public double height { get; set; }
        }
    

      

  • 相关阅读:
    yocto/bitbake 学习资源
    QEMU/KVM学习资源
    ubuntu 中创建和删除用户
    git 重命名本地和远程分支
    Ubuntu 上搭建 FTP 服务器
    gdb 常见用法
    git log 显示与特定文件相关的 commit 信息
    基于 qemu system mode 运行 arm 程序
    基于 qemu user mode 运行 aarch64 程序
    checking in(airport)
  • 原文地址:https://www.cnblogs.com/DoNetCShap/p/14894781.html
Copyright © 2011-2022 走看看