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日

相关文章

  • .NET之后台用户权限管理实现

    下面是“.NET之后台用户权限管理实现”的完整攻略。 1. 确认需求 在实现任何功能之前,我们需要明确需求。对于后台用户权限管理这个功能,我们需要确定以下几点: 用户分组:用户可以被分配到不同的组别,不同组别可以拥有不同的权限。 权限管理:针对不同的权限,我们需要确定哪些用户有权限访问哪些页面、哪些操作。 页面控制:对于没有权限访问的页面,需要实现跳转或者显…

    C# 2023年5月31日
    00
  • C# Count:获取集合中的元素数

    C#中的Count方法是用来统计序列中满足指定条件的元素个数的方法。它属于LINQ扩展方法,可以用于IEnumerable泛型接口的所有实现类。下面我们将详细讲解C# Count方法的使用。 基本语法 Count方法的基本语法如下: int count = source.Count(); 其中,source表示需要统计元素个数的序列。Count方法返回一个i…

    C# 2023年4月19日
    00
  • C# 获取系统DPI缩放比例以及分辨率大小

    一般方法 System.Windows.Forms.Screen类 // 获取当前主屏幕分辨率 int screenWidth = Screen.PrimaryScreen.Bounds.Width; int screenHeight = Screen.PrimaryScreen.Bounds.Height; // 获取指定屏幕分辨率 Screen seco…

    C# 2023年4月27日
    00
  • .Net的GC垃圾回收原理及实现

    .NET的GC垃圾回收原理及实现 在.NET中,垃圾回收(GC)是一种自动内存管理机制,它负责在运行时自动释放不再使用的内存。在本攻略中,我们将详细讲解.NET的GC垃圾回收原理及实现,并提供两个示例说明。 垃圾回收原理 .NET的GC垃圾回收原理基于以下两个核心概念: 1. 引用计数 引用计数是一种内存管理技术,它通过计算对象的引用数来确定对象是否可以被释…

    C# 2023年5月17日
    00
  • ASP.Net使用System.Security.Principal模拟用户

    ASP.Net使用System.Security.Principal模拟用户 什么是System.Security.Principal? System.Security.Principal是.Net Framework中提供的一个命名空间,该命名空间提供了许多用于安全和身份验证的类和接口。其中,WindowsIdentity和WindowsPrincipal…

    C# 2023年6月3日
    00
  • C#调用易语言写的Dll文件方法

    C# 调用易语言写的DLL文件有两种方式:使用DllImport特性和使用COM组件。下面详细讲解这两种方法的完整攻略。 DllImport 编写易语言DLL 在易语言中编写函数代码。 在函数顶部添加 #dllexport 命令。 在函数返回值的数据类型前加上 #stdcall 命令。 将函数编译为DLL文件。 以下为示例代码,函数名称为 Add ,返回类型…

    C# 2023年6月7日
    00
  • c# 成员类型访问权限低于字段本身的实现

    首先,需要理解C#语言中成员类型的访问权限。 C#语言给成员类型(包括类、结构体、枚举、接口等)能够设置访问权限,同样也允许字段有访问权限。成员类型的访问权限指的是该类型能够被哪些程序集中的代码访问。字段的访问权限指的是该字段能够被定义它的类型或其他类型的代码访问。 针对问题中的情况,既然成员类型的访问权限低于字段本身,那么我们可以通过某种方式绕过成员类型的…

    C# 2023年5月15日
    00
  • C# Guid长度雪花简单生成器的示例代码

    下面是针对如何编写C# Guid长度的雪花简单生成器的攻略。 1. 为何选择C# Guid C# Guid(全称为全球唯一标识符)是一个128位的数字,由字母和数字构成,它具备全局唯一性,即全球内任意两个Guid的相同概率是非常低的。因此,我们可以利用Guid生成唯一字符串,例如用户ID、订单编号等。 2. 如何生成雪花ID 雪花ID是一种Twitter开源…

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