首页 > 编程语言 >C# 等比例缩放图片

C# 等比例缩放图片

时间:2024-03-11 19:22:26浏览次数:21  
标签:缩放 C# destHeight System height sourImage destWidth Drawing 图片

/// <summary>
/// 等比例缩放图片
/// </summary>
/// <param name="bitmap">图片</param>
/// <param name="destHeight">高度</param>
/// <param name="destWidth">宽度</param>
/// <returns></returns>
private Bitmap ZoomImage(Bitmap bitmap, int destHeight, int destWidth)
{
    try
    {
        System.Drawing.Image sourImage = bitmap;
        int width = 0, height = 0;
        //按比例缩放
        int sourWidth = sourImage.Width;
        int sourHeight = sourImage.Height;
        if (sourHeight > destHeight || sourWidth > destWidth)
        {
            if ((sourWidth * destHeight) > (sourHeight * destWidth))
            {
                width = destWidth;
                height = (destWidth * sourHeight) / sourWidth;
            }
            else
            {
                height = destHeight;
                width = (sourWidth * destHeight) / sourHeight;
            }
        }
        else
        {
            width = sourWidth;
            height = sourHeight;
        }
        Bitmap destBitmap = new Bitmap(destWidth, destHeight);
        Graphics g = Graphics.FromImage(destBitmap);
        g.Clear(Color.Transparent);
        //设置画布的描绘质量
        g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
        g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
        g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
        g.DrawImage(sourImage, new Rectangle((destWidth - width) / 2, (destHeight - height) / 2, width, height), 0, 0, sourImage.Width, sourImage.Height, GraphicsUnit.Pixel);
        g.Dispose();
        //设置压缩质量
        System.Drawing.Imaging.EncoderParameters encoderParams = new System.Drawing.Imaging.EncoderParameters();
        long[] quality = new long[1];
        quality[0] = 100;
        System.Drawing.Imaging.EncoderParameter encoderParam = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);
        encoderParams.Param[0] = encoderParam;
        sourImage.Dispose();
        return destBitmap;
    }
    catch
    {
        return bitmap;
    }
}

 

标签:缩放,C#,destHeight,System,height,sourImage,destWidth,Drawing,图片
From: https://www.cnblogs.com/lgx5/p/18066867

相关文章

  • Kubernetes与Docker Swarm的区别如何
    1)安装和部署:k8s安装很复杂;但是一旦安装完毕,集群就非常强大,DockerSwarm安装非常简单;但是集群不是很强大;2)图形用户界面:k8s有,DockerSwarm无;3)可伸缩性:k8s支持,DockerSwarm比k8s快5倍;4)自动伸缩:k8s有,DockerSwarm无;5)负载均衡:k8s在不同的Pods中的不同容器之间平衡负载流量,需要手......
  • IfcUnitEnum
    IfcUnitEnumTypedefinitionIfcUnitEnum isanenumerationtypeforallowedunittypesof IfcNamedUnit.HISTORY NewtypeinIFC1.5.1. EnumerationdefinitionConstantDescriptionABSORBEDDOSEUNIT AMOUNTOFSUBSTANCEUNIT AREAUNIT DOSEEQUIVA......
  • 利用JavaRestClient依赖使用java操作索引库
    引入依赖<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.12.1</version></depend......
  • Axure RP 10:让原型设计更快、更直观、更智能 mac版
    AxureRP10是一款强大的原型设计工具,它能够帮助设计师快速创建高保真、交互式的原型,从而更好地展示和测试设计方案。这款软件凭借其直观易用的界面和丰富的功能,已经成为了许多设计师的首选工具。→→↓↓载AxureRP10forMac 首先,AxureRP10提供了丰富的组件库和样式设......
  • [learn]Set Up SAP Business Application Studio
    SetUpSAPBusinessApplicationStudiohttps://developers.sap.com/tutorials/set-up-bas.html按照教程,申请了https://account.hanatrial.ondemand.com/trial/#/home/trial的试用账号后,无法打开SAPBusinessApplicationStudio,按照上述课程设置SAPBusinessApplicationStud......
  • C++ 津津的储蓄计划
    描述津津的零花钱一直都是自己管理。每个月的月初妈妈给津津300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上20%还给津津。因此津津制定了一个储蓄计划:每个月的月初,在得到妈妈......
  • Gossip协议和Grpc协议的区别
    Gossip协议Gossip协议,也称为流言协议,是一种基于成员之间随机通信的分布式系统同步协议。它模仿社会中流言的传播方式,通过节点之间的随机交互传播信息,以此实现数据的最终一致性。Gossip协议特别适合于大规模、分布式的环境中,因为它能够很好地处理节点故障和网络分区问题。特点:......
  • c# 上传压缩包 解压,遍历文件夹和文件
    <body><formid="form1"runat="server"><div><asp:FileUploadID="FileUpload1"runat="server"/><asp:buttonID="Button1"runat="server"text="上传&q......
  • ElasticSearch架构介绍及原理解析
    前言在当今大数据时代,数据的快速增长使得有效地管理、检索和分析数据成为企业发展的关键。Elasticsearch(以下简称ES)作为一种开源的分布式搜索和分析引擎,在这个领域中扮演着重要的角色。它不仅仅只是全文搜索,还支持结构化搜索、数据分析、复杂的语言处理、地理位置和对象间关联关......
  • 你是怎么理解ES6中 Decorator 的?使用场景?
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助一、介绍Decorator,即装饰器,从名字上很容易让我们联想到装饰者模式简单来讲,装饰者模式就是一种在不改变原类和使用继承的情况下,动态地扩展对象功能的设计理论。ES6中Decorator功能亦如此,其本质也不是什么高大上的......