C#如何实现图片的剪裁并保存

下面是C#实现图片剪裁并保存的攻略,包含两个示例说明。

1.准备工作

在开始实现图片剪裁之前,需要先引用System.Drawing命名空间,该命名空间是提供处理图片的基本类。

在引用之前需要确保本地已安装.NET Framework SDK,如果未安装可在微软官网下载并安装。

如下所示:

using System.Drawing;

其次,需要了解图片剪裁需要的几个关键概念和类:

  • Image类:代表一个图片,是所有具体图像类型的基类。
  • Graphics类:代表一个绘图图面,提供了基本的绘制和变换方法。
  • Bitmap类:是一个包含像素的图像。可以从指定的文件或资源中创建Bitmap类,也可以通过使用Graphics类绘制。
  • Rectangle类:一个矩形结构,它由四个整数值构成,分别代表矩形的x坐标、y坐标、宽度和高度。

2.实现图片剪裁

以下是实现图片剪切的四个步骤:

  1. 根据指定的路径,创建一个Image对象。
Image sourceImage = Image.FromFile(@"C:\图片.jpg");
  1. 创建一个Bitmap对象并设置它的大小与剪切矩形的大小相同。
Bitmap targetImage = new Bitmap(cropWidth, cropHeight);
  1. 创建一个Graphics对象,并使用Graphics对象的DrawImage方法将想要剪裁的部分绘制在targetImage对象上。
Graphics graphics = Graphics.FromImage(targetImage);
graphics.DrawImage(sourceImage, new Rectangle(0, 0, cropWidth, cropHeight), cropX, cropY, cropWidth, cropHeight, GraphicsUnit.Pixel);

其中参数的意义分别为:

  • new Rectangle(0, 0, cropWidth, cropHeight):图片被剪裁后的矩形范围,这里设置为目标图片的大小。
  • cropX, cropY:指定需要剪切的矩形在源图片中的坐标。
  • cropWidth, cropHeight:指定需要剪切的矩形的宽度和高度。
  • GraphicsUnit.Pixel:指定矩形中的单位为像素。

  • 最后,将targetImage对象保存到本地文件中。

targetImage.Save(@"C:\剪裁后的图片.jpg");

3.示例1:剪裁图片中的人脸

下面是一个剪裁一张人脸图片的示例:

using System.Drawing;
using System.IO;

namespace ImageCropper
{
    class Program
    {
        static void Main(string[] args)
        {
            //加载源图片
            Image sourceImage = Image.FromFile(@"C:\face.jpg");

            //创建一个位图对象
            Bitmap targetImage = new Bitmap(200, 200);

            //创建一个Graphics对象
            Graphics graphics = Graphics.FromImage(targetImage);

            //剪切源图片中的矩形区域,并绘制到targetImage上
            graphics.DrawImage(sourceImage, new Rectangle(0, 0, 200, 200), new Rectangle(200, 200, 200, 200), GraphicsUnit.Pixel);

            //将targetImage保存到本地文件中
            targetImage.Save(@"C:\face_cropped.jpg");

            //释放所有对象,避免内存泄漏
            graphics.Dispose();
            targetImage.Dispose();
            sourceImage.Dispose();
        }
    }
}

上面的代码会将源图片中大小为200x200的矩形区域在新图片中剪裁保存,这个矩形区域是源图片中以(200, 200)为左上角顶点,大小为200x200的矩形。

4.示例2:剪裁多张图片并保存

下面是一个剪裁多张图片的示例:

using System.Drawing;
using System.IO;

namespace ImageCropper
{
    class Program
    {
        static void Main(string[] args)
        {
            //要剪裁的图片列表
            string[] imagePaths = new string[]
            {
                @"C:\flower1.jpg",
                @"C:\flower2.jpg",
                @"C:\flower3.jpg",
                @"C:\flower4.jpg",
            };

            //剪裁后的图片保存目录
            string directoryPath = @"C:\cropped_images\";

            //循环剪裁每个图片
            for (int i = 0; i < imagePaths.Length; i++)
            {
                //加载源图片
                Image sourceImage = Image.FromFile(imagePaths[i]);

                //创建一个位图对象
                Bitmap targetImage = new Bitmap(200, 200);

                //创建一个Graphics对象
                Graphics graphics = Graphics.FromImage(targetImage);

                //剪切源图片中的矩形区域,并绘制到targetImage上
                graphics.DrawImage(sourceImage, new Rectangle(0, 0, 200, 200), new Rectangle(200, 200, 200, 200), GraphicsUnit.Pixel);

                //将targetImage保存到本地文件中
                string fileName = Path.GetFileNameWithoutExtension(imagePaths[i]);
                targetImage.Save(Path.Combine(directoryPath, fileName + "_cropped.jpg"));

                //释放所有对象,避免内存泄漏
                graphics.Dispose();
                targetImage.Dispose();
                sourceImage.Dispose();
            }
        }
    }
}

上面的代码会将4张花卉图片中大小为200x200的矩形区域在新图片中剪裁保存,剪裁后的图片会存储在一个指定的目录中。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#如何实现图片的剪裁并保存 - Python技术站

(0)
上一篇 2023年6月6日
下一篇 2023年6月6日

相关文章

  • C#绘制实时曲线图的方法详解

    针对网站上的这篇文章“C#绘制实时曲线图的方法详解”,以下是完整的攻略: 1. 了解实时曲线图的作用和实现原理 实时曲线图主要是用于显示一些随时间变化的数据,并实时更新数据,常见的使用场景是嵌入式监控、数据采集和控制等。关于实时曲线图的实现原理,一般使用的是C#中的Graphics技术。 2. 准备工作 引入namespace: using System.D…

    C# 2023年6月7日
    00
  • C#连接Oracle数据库使用Oracle.ManagedDataAccess.dll

    首先,要使用C#连接Oracle数据库,需要引用Oracle.ManagedDataAccess.dll库,并且在代码中使用相应的命名空间。以下是使用Oracle.ManagedDataAccess.dll连接Oracle数据库的步骤: 步骤一:引用Oracle.ManagedDataAccess.dll文件 在Visual Studio中新建项目后,右键“…

    C# 2023年6月2日
    00
  • C# using三种使用方法

    下面我将为你详细讲解C#中using语句的三种使用方法。 1. 用法一 第一种方法是using语句的基本用法,其格式为: using (资源申请语句) { // 执行代码 } 该用法可以简化书写资源申请和释放的步骤,例如以下示例: using (FileStream stream = new FileStream("test.txt", …

    C# 2023年5月15日
    00
  • C#中委托的基础入门与实现方法

    下面是C#中委托的基础入门与实现方法的攻略。 什么是委托 在C#中,委托是一种类型,它允许我们将一个或多个方法作为参数传递给其他方法,或者将方法保存在集合中等。委托本质上是一个指向方法的引用。使用委托可以使代码更加灵活、扩展性更好。 委托的声明和实例化 声明一个委托需要使用 delegate 关键字,并定义返回类型和参数列表。比如: delegate voi…

    C# 2023年5月15日
    00
  • Entity Framework代码优先Code First入门

    实体框架代码优先 – Code First 入门 实体框架代码优先 (Code First) 是 Entity Framework 中一种重要且高级的特性,它使用 C# 或 VB.NET 代码来定义数据模型,自动创建数据库和表之间的映射。本文将介绍如何入门实体框架代码优先,其中包括以下几个步骤: 安装 Entity Framework NuGet 包 创建数…

    C# 2023年6月3日
    00
  • C# 获取枚举值的简单实例

    获取枚举值是 C# 开发中比较基础的操作,以下是一个简单的实例,帮助大家快速了解如何获取枚举值。 前提条件 在代码中定义一个枚举类型: enum DaysOfWeek {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday } 实现获取枚举值 方式一 可以通过 Enum 类的 GetNa…

    C# 2023年6月7日
    00
  • C#使用远程服务调用框架Apache Thrift

    C#使用远程服务调用框架Apache Thrift Apache Thrift是一个高效的跨语言服务调用框架,支持多种编程语言之间的远程过程调用(RPC)。这里将详细介绍如何在C#中使用Apache Thrift框架来实现远程服务调用。 1. 安装Thrift 下载官方提供的Thrift工具包:https://thrift.apache.org/downlo…

    C# 2023年6月3日
    00
  • 关于.NET6 Minimal API的使用方式详解

    关于.NET6 Minimal API的使用方式详解 .NET6 Minimal API是.NET6中的一个新特性,它提供了一种更简单、更轻量级的方式来创建Web API。本攻略将详细介绍.NET6 Minimal API的使用方式。 创建.NET6 Minimal API项目 我们可以使用以下命令来创建一个.NET6 Minimal API项目: dotn…

    C# 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部