`
rsljdkt
  • 浏览: 454346 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

C#图片裁剪与缩放

    博客分类:
  • .NET
阅读更多

C#图片裁剪与缩放

  【参考】http://www.cnblogs.com/wu-jian/archive/2011/02/21/1959382.html

  最近由于需要C#图片处理的相关应用,遂在网上参考一下,写出如下代码作为总结。

  通常需要将图片缩放到指定宽度与高度的缩略图,若只对原图片进行缩放,当图片前后高宽比例不同时,缩放后的图片就会拉伸变形。可以采取的办法是先按照目标图片的高宽比进行裁剪,然后缩放到目标图片的高宽就ok了。

  原理很简单:

  1)首先根据目标图片的高宽比计算原图片的裁剪矩形区域

  2)然后将该矩形区域内的图像拷贝到目标高宽的矩形区域中,下面上代码:

        /// <summary>
        /// 图片转换(裁剪并缩放)
        /// </summary>
        /// <param name="ASrcFileName">源文件名称</param>
        /// <param name="ADestFileName">目标文件名称</param>
        /// <param name="AWidth">转换后的宽度(像素)</param>
        /// <param name="AHeight">转换后的高度(像素)</param>
        /// <param name="AQuality">保存质量(取值在1-100之间)</param>
        public static void DoConvert(string ASrcFileName, string ADestFileName, int AWidth, int AHeight, int AQuality)
        {
            Image ASrcImg = Image.FromFile(ASrcFileName);
            if (ASrcImg.Width <= AWidth && ASrcImg.Height <= AHeight)
            {//图片的高宽均小于目标高宽,直接保存
                ASrcImg.Save(ADestFileName);
                return;
            }
            double ADestRate = AWidth * 1.0 / AHeight;
            double ASrcRate = ASrcImg.Width * 1.0 / ASrcImg.Height;
            //裁剪后的宽度
            double ACutWidth = ASrcRate > ADestRate ? (ASrcImg.Height * ADestRate) : ASrcImg.Width;
            //裁剪后的高度
            double ACutHeight = ASrcRate > ADestRate ? ASrcImg.Height : (ASrcImg.Width / ADestRate);
            //待裁剪的矩形区域,根据原图片的中心进行裁剪
            Rectangle AFromRect = new Rectangle(Convert.ToInt32((ASrcImg.Width - ACutWidth) / 2), Convert.ToInt32((ASrcImg.Height - ACutHeight) / 2), (int)ACutWidth, (int)ACutHeight);
            //目标矩形区域
            Rectangle AToRect = new Rectangle(0, 0, AWidth, AHeight);

            Image ADestImg = new Bitmap(AWidth, AHeight);
            Graphics ADestGraph = Graphics.FromImage(ADestImg);
            ADestGraph.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
            ADestGraph.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            ADestGraph.DrawImage(ASrcImg, AToRect, AFromRect, GraphicsUnit.Pixel);

            //获取系统image/jpeg编码信息
            ImageCodecInfo[] AInfos = ImageCodecInfo.GetImageEncoders();
            ImageCodecInfo AInfo = null;
            foreach (ImageCodecInfo i in AInfos)
            {
                if (i.MimeType == "image/jpeg")
                {
                    AInfo = i;
                    break;
                }
            }
            //设置转换后图片质量参数
            EncoderParameters AParams = new EncoderParameters(1);
            AParams.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)AQuality);
            //保存
            ADestImg.Save(ADestFileName, AInfo, AParams);
        }

 

0
0
分享到:
评论

相关推荐

    C#图片裁剪与缩放最简单的写法

    本篇文章介绍了一种非常简洁的C#图片裁剪与缩放的方法。通过合理的计算和使用`System.Drawing`命名空间下的类库,可以轻松实现图片的按比例缩放和裁剪功能。这种方法适用于多种应用场景,如网页开发、移动应用等。...

    c#图片保存、缩放、裁剪、合成

    图片裁剪是指从图片中选取一个矩形区域并保存为新的图片。同样使用Graphics类的DrawImage方法,但需要指定源图像的裁剪区域。例如: ```csharp using System.Drawing; Image original = Image.FromFile("image....

    C#实现缩放和剪裁图片的方法示例

    本文主要介绍了C#实现缩放和剪裁图片的方法,结合实例形式分析了C#针对图片属性的缩放、裁剪等相关操作技巧。 图片缩放 图片缩放是指将原始图片按照一定的比例或尺寸进行缩放,以适应不同的显示需求。在C#中,可以...

    C# WPF实现的图片处理小工具,可进行图片裁剪、缩放、涂鸦、旋转、查看图片信息、保存

    这个工具集成了多种功能,包括图片裁剪、缩放、涂鸦、旋转以及查看和保存图片信息。我们将讨论每个功能的关键技术和实现方法。 首先,我们需要了解WPF的基本概念。WPF是.NET Framework的一部分,用于构建具有丰富...

    用c#实现的图片裁剪并保存

    本项目“用c#实现的图片裁剪并保存”聚焦于这一领域,通过扫描指定文件夹中的图片,对不符合尺寸要求的图片进行裁剪和缩放,并将处理后的图片覆盖原有的文件。以下是对这一技术实现的详细解析: 首先,我们需要引入...

    C# 图片裁剪器(使用:Bitmap)

    本教程将详细讲解如何利用C#的Bitmap类创建一个图片裁剪器,允许用户自定义裁剪尺寸和生成缩略图。 首先,我们需要引入必要的命名空间,以便使用Bitmap类和其他相关组件: ```csharp using System.Drawing; using ...

    C#图片处理基本应用(裁剪,缩放,清晰度,水印)

    本文将深入探讨如何使用C#进行图片的基本处理,包括裁剪、缩放、调整清晰度以及添加水印,这些都是在图像处理中常见的需求。 ### 一、裁剪图像 裁剪是图片处理中最基础的操作之一,主要用于去除图像边缘或特定区域...

    C# winForm 图片裁剪代码(用户控件)

    本资源提供的就是一个实现了这一功能的用户控件,名为"C# winForm 图片裁剪代码",并且经过实际测试,其效果理想,界面设计与QQ截图的体验相似。 首先,我们需要理解WinForm用户控件(User Control)的概念。它是...

    C#图片剪裁例子

    总之,C#图片剪裁涉及到图像处理和GUI编程技术,通过.NET Framework提供的工具,可以轻松地实现这一功能。对于更复杂的需求,如旋转、缩放或添加滤镜效果,可以进一步研究`System.Drawing`命名空间中的其他类和方法...

    c# 处理图片源码 缩放 裁剪 等

    图片裁剪** 裁剪图片则是选取原始图片的一部分区域进行保留。同样使用`Bitmap`的`Clone()`方法,但需要指定源矩形和目标矩形: ```csharp Rectangle cropRect = new Rectangle(x, y, width, height); Bitmap ...

    C# 像PS一样裁剪原图片,鼠标拖动裁剪图片

    在这个特定的项目中,我们关注的是如何实现“像PS一样裁剪原图片”,即在C#环境中模仿Photoshop的裁剪功能,允许用户通过鼠标拖动来裁剪图片。这涉及到图像的选取、坐标计算、缩放以及纠偏、亮度和对比度调整等技术...

    图片处理、二维码识别生成工具c#支持图片裁剪、任意缩放 支持二维码识别和生成.zip

    这个压缩包“图片处理、二维码识别生成工具c#支持图片裁剪、任意缩放 支持二维码识别和生成.zip”包含了一些核心的C#项目,用于实现图像处理和二维码操作的功能。 首先,我们来探讨C#中的图像处理。C#提供了丰富的...

    C# 标记图片实现裁剪功能demo

    本教程将聚焦于“C# 标记图片实现裁剪功能”,通过一个实际的demo来详细阐述如何进行图片裁剪。 首先,我们需要理解C#中的图像处理库,如System.Drawing命名空间。这个命名空间提供了许多类,如Image、Graphics和...

    C# 图片工具类 上传 缩放 裁剪 水印 生成缩略图

    C# 图片工具类 上传 缩放 裁剪 水印 生成缩略图

    C# Winform图片缩放剪切组件

    这个组件的核心功能在于提供了一种方便的方式来缩放和裁剪图像,使得开发者无需深入理解图像处理的底层细节,就能在应用程序中实现灵活的图片操作。 首先,我们要理解什么是Winform。Winform是.NET Framework的一...

    图片裁剪,缩放,转换格式等小工具,含源代码

    本文将深入探讨使用C#语言进行图片裁剪、缩放和转换格式的技术细节,以及这些功能的实现方式。 首先,C#是一种面向对象的编程语言,由微软公司开发,广泛应用于Windows平台的软件开发,包括桌面应用和Web应用。对于...

    C#批量裁剪源码

    2. 图片裁剪:裁剪是图像处理中的基本操作,用于删除图片的某些部分或选取特定区域。在C#中,可以使用System.Drawing命名空间下的类来实现,如Bitmap和Graphics。通过指定坐标和尺寸,我们可以创建一个新的图像区域...

Global site tag (gtag.js) - Google Analytics