C#图片处理类分享

C#图片处理类分享

在本文中,我们将分享一些如何使用C#图片处理类(Image class)的技巧和实用示例。这些技巧涵盖的范围包括图片压缩,大小和比例的更改,旋转和翻转图片等。

图片压缩

压缩图片可以减小图片的大小,从而减少图片在服务器上的存储空间和网络传输带宽占用。下面是一个简单的示例,演示如何使用C#的Image类来压缩图片:

using System.Drawing;
using System.Drawing.Imaging;

public void CompressImage(string sourcePath, string destinationPath)
{
    using (Image image = Image.FromFile(sourcePath))
    {
        EncoderParameters encoderParameters = new EncoderParameters(1);
        encoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, 50L);

        ImageCodecInfo imageCodecInfo = GetEncoderInfo("image/jpeg");

        image.Save(destinationPath, imageCodecInfo, encoderParameters);
    }
}

private ImageCodecInfo GetEncoderInfo(string mimeType)
{
    ImageCodecInfo[] encoders = ImageCodecInfo.GetImageEncoders();
    foreach (ImageCodecInfo encoder in encoders)
    {
        if (encoder.MimeType == mimeType)
        {
            return encoder;
        }
    }
    return null;
}

在上面的代码中,我们首先使用 Image.FromFile 方法将源图片加载为 Image 对象。然后,我们设置一个 EncoderParameters 对象,将图片的质量压缩为50%。接着,我们使用 GetEncoderInfo 方法找到 image/jpeg 对应的 ImageCodecInfo 对象,最后将压缩后的图片保存到目标路径中。

图片大小和比例的更改

调整图片大小和比例可以使图片适用于不同尺寸的屏幕和设备上。下面是一个简单的示例代码,演示如何使用C#的Image类来调整图片的大小和比例:

using System.Drawing;

public void ResizeImage(string sourcePath, string destinationPath, float scaleFactor)
{
    using (Image image = Image.FromFile(sourcePath))
    {
        int newWidth = (int)(image.Width * scaleFactor);
        int newHeight = (int)(image.Height * scaleFactor);

        using (Bitmap bitmap = new Bitmap(newWidth, newHeight))
        {
            using (Graphics graphics = Graphics.FromImage(bitmap))
            {
                graphics.DrawImage(image, 0, 0, newWidth, newHeight);
                bitmap.Save(destinationPath, ImageFormat.Jpeg);
            }
        }
    }
}

在上面的代码中,我们使用 Image.FromFile 方法将源图片加载为 Image 对象。我们设置一个 scaleFactor 变量,将图片的大小调整为原大小的 scaleFactor 倍。接着,我们使用 Graphics 对象创建一个新的 Bitmap 对象,并调用 DrawImage 方法将原图片绘制到新的 Bitmap 对象上。最后,我们将新的 Bitmap 对象保存到目标路径中。

旋转和翻转图片

旋转和翻转图片可以使图片达到不同的效果和目的。下面是一个简单的示例示例代码,演示如何使用C#的Image类来对图片进行旋转和翻转:

using System.Drawing;

public void RotateAndFlipImage(string sourcePath, string destinationPath)
{
    using (Image image = Image.FromFile(sourcePath))
    {
        image.RotateFlip(RotateFlipType.Rotate90FlipNone);
        image.Save(destinationPath, ImageFormat.Jpeg);
    }
}

在上面的代码中,我们使用 Image.FromFile 方法将源图片加载为 Image 对象。然后,我们使用 RotateFlip 方法对该图片进行旋转和翻转操作,这里我们将图片从垂直方向翻转并向右旋转 90 度。最后,我们将操作后的图片保存到目标路径中。

示例

相信通过以上的介绍,我们都能够开始使用C#图片处理类开发图片相关的应用了,在这里我们带来两个示例。第一个示例演示了如何将一张图片分割成四个部分,第二个示例演示了如何使用滑块控件为图片添加模糊效果。

示例1:将一张图片分割成四个部分

using System.Drawing;

public void SplitImage(string sourcePath, string destinationPath)
{
    using (Image image = Image.FromFile(sourcePath))
    {
        int width = image.Width / 2;
        int height = image.Height / 2;

        Rectangle rectangle1 = new Rectangle(0, 0, width, height);
        Rectangle rectangle2 = new Rectangle(width, 0, width, height);
        Rectangle rectangle3 = new Rectangle(0, height, width, height);
        Rectangle rectangle4 = new Rectangle(width, height, width, height);

        using (Bitmap bitmap1 = new Bitmap(width, height))
        {
            using (Graphics graphics = Graphics.FromImage(bitmap1))
            {
                graphics.DrawImage(image, new Rectangle(0, 0, width, height), rectangle1, GraphicsUnit.Pixel);
                bitmap1.Save(Path.Combine(destinationPath, "part1.jpg"), ImageFormat.Jpeg);
            }
        }

        using (Bitmap bitmap2 = new Bitmap(width, height))
        {
            using (Graphics graphics = Graphics.FromImage(bitmap2))
            {
                graphics.DrawImage(image, new Rectangle(0, 0, width, height), rectangle2, GraphicsUnit.Pixel);
                bitmap2.Save(Path.Combine(destinationPath, "part2.jpg"), ImageFormat.Jpeg);
            }
        }

        using (Bitmap bitmap3 = new Bitmap(width, height))
        {
            using (Graphics graphics = Graphics.FromImage(bitmap3))
            {
                graphics.DrawImage(image, new Rectangle(0, 0, width, height), rectangle3, GraphicsUnit.Pixel);
                bitmap3.Save(Path.Combine(destinationPath, "part3.jpg"), ImageFormat.Jpeg);
            }
        }

        using (Bitmap bitmap4 = new Bitmap(width, height))
        {
            using (Graphics graphics = Graphics.FromImage(bitmap4))
            {
                graphics.DrawImage(image, new Rectangle(0, 0, width, height), rectangle4, GraphicsUnit.Pixel);
                bitmap4.Save(Path.Combine(destinationPath, "part4.jpg"), ImageFormat.Jpeg);
            }
        }
    }
}

在上面的代码中,我们首先使用 Image.FromFile 方法将源图片加载为 Image 对象。然后,我们将该图片分割成四部分,分别将每部分保存为一个指定格式的新图片。

示例2:使用滑块控件为图片添加模糊效果

using System.Drawing;

public void AddBlurEffect(string sourcePath, string destinationPath, int blurRadius)
{
    using (Image image = Image.FromFile(sourcePath))
    {
        using (Bitmap bitmap = new Bitmap(image.Width, image.Height))
        {
            using (Graphics graphics = Graphics.FromImage(bitmap))
            {
                graphics.DrawImage(image, new Rectangle(0, 0, bitmap.Width, bitmap.Height), new Rectangle(0, 0, image.Width, image.Height), GraphicsUnit.Pixel);
                bitmap.Save(destinationPath, ImageFormat.Jpeg);
            }
        }

        using (Bitmap tempBitmap = new Bitmap(destinationPath))
        {
            using (Graphics graphics = Graphics.FromImage(tempBitmap))
            {
                Rectangle rectangle = new Rectangle(0, 0, tempBitmap.Width, tempBitmap.Height);
                ImageAttributes imageAttributes = new ImageAttributes();
                imageAttributes.SetColorMatrix(GetColorMatrix(blurRadius), ColorMatrixFlag.Default, ColorAdjustType.Bitmap);

                graphics.DrawImage(tempBitmap, rectangle, 0, 0, tempBitmap.Width, tempBitmap.Height, GraphicsUnit.Pixel, imageAttributes);
                tempBitmap.Save(destinationPath, ImageFormat.Jpeg);
            }
        }
    }
}

private ColorMatrix GetColorMatrix(int blurRadius)
{
    int n = blurRadius;
    float[][] matrix = new float[n][];
    float factor = 1.0f / (n * n);

    for (int i = 0; i < n; i++)
    {
        matrix[i] = new float[n];
        for (int j = 0; j < n; j++)
        {
            matrix[i][j] = factor;
        }
    }

    return new ColorMatrix(matrix);
}

在上面的代码中,我们首先使用 Image.FromFile 方法将源图片加载为 Image 对象。然后,我们将该图片保存为一个新的 Bitmap 对象。接着,我们使用 ImageAttributesColorMatrix 对象实现图片的模糊效果。最后,我们将带有模糊效果的图片保存到目标路径中。

以上就是关于C#图片处理类分享的完整攻略,如果您在实际应用中有遇到或需要进一步的指导,请随时联系我们。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#图片处理类分享 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • 很有用的学习ASP常用到的代码第1/2页

    下面是关于“很有用的学习ASP常用到的代码第1/2页”的详细讲解攻略。 什么是ASP? ASP(Active Server Pages)是一种用于开发动态网站的服务器端脚本语言,它可以与HTML、CSS、JavaScript和数据库等技术结合使用,实现动态网站的开发和设计。 很有用的学习ASP常用到的代码第1/2页 这篇文章收集了一些常用的ASP代码,包括连…

    C# 2023年5月31日
    00
  • c#在sql中存取图片image示例

    下面我将为您详细讲解如何使用C#在SQL中存取图片的完整攻略。 1. 创建存储图片的表 首先,需要在SQL Server中创建一个表来存储图片。以下是一个简单的示例表: CREATE TABLE Images( ImageID INT IDENTITY(1,1) PRIMARY KEY, ImageName VARCHAR(100), ImageData V…

    C# 2023年6月2日
    00
  • C#清除字符串内空格的方法

    以下是关于C#清除字符串内空格的方法的详细攻略。 1. 使用Replace方法 C#字符串的Replace方法可以帮助我们快速的将一个字符串中的空格替换为指定字符或删除空格。下面是一个示例代码: string str = "Hello World! "; string newStr = str.Replace(" ",…

    C# 2023年6月8日
    00
  • ASP.NET AJAX 4.0的模版编程(Template Programming)介绍

    ASP.NET AJAX 4.0的模板编程(Template Programming)是一种用于生成动态HTML内容的技术。在本文中,我们将介绍ASP.NET AJAX 4.0的模板编程,包括模板引擎、模板语法和示例代码。 模板引擎 ASP.NET AJAX 4.0的模板引擎是一种用于生成动态HTML内容的技术。它使用一种类似于ASP.NET的语法来定义模板…

    C# 2023年5月15日
    00
  • .net中 关于反射的详细介绍

    关于“.net中关于反射的详细介绍”的攻略: 什么是反射 反射是一种元编程技术,它允许我们在不知道类结构的前提下,动态获取和使用类型信息、操作对象的属性、方法和构造函数。 反射主要涉及到以下的类型: Type:表示类型的元数据 MethodInfo:表示方法的元数据 PropertyInfo:表示属性的元数据 FieldInfo:表示字段的元数据 Const…

    C# 2023年5月31日
    00
  • C#软件注册码的实现代码

    下面为您提供 “C#软件注册码的实现代码” 的详细攻略。 1. 概述 “软件注册码” 是一串由软件作者生成的唯一代码,用于验证软件的合法性。通常,用户需要在安装软件后输入注册码,以便解锁软件的全部功能。 在C#语言中,我们可以生成随机的注册码,并将其与用户输入的注册码进行比对来验证其合法性。 2. 实现方法 我们可以使用”MD5加密算法”和”Base64编码…

    C# 2023年5月31日
    00
  • .NET Core 环境变量详解

    一、概述 软件从开发到正式上线,在这个过程中我们会分为多个阶段,通常会有开发、测试、以及上线等。每个阶段对应的环境参数配置我们会使用不同的参数。比如数据库的连接字符串,开发环境一般我们都是连接的测试库。以前这种情况通常是 COPY 两个同名的配置文件来进行处理,然后在本地就使用本地的配置,生产环境就使用生产环境的配置文件,十分麻烦。而 ASP .NET CO…

    C# 2023年4月22日
    00
  • C#实现操作windows系统服务(service)的方法

    C#实现操作Windows系统服务的方法,可以通过以下几个步骤来完成: 引入System.ServiceProcess命名空间 在代码文件中,使用以下代码引入System.ServiceProcess命名空间: using System.ServiceProcess; 创建服务的控制器类 public partial class Service1 : Ser…

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