编辑
2025-09-29
C#
00

摘要

在图像处理中,翻转是一种常见的操作,它可以改变图像的方向或镜像图像。在本文中,我们将学习如何使用 C# 来进行图像翻转,并介绍常用的属性和方法。

正文

图像翻转的常用属性和方法

在 C# 中,我们可以使用 System.Drawing 命名空间中的 Bitmap 类来加载和处理图像。下面是一些常用的属性和方法:

属性

  • Bitmap.Width:获取图像的宽度。
  • Bitmap.Height:获取图像的高度。

方法

  • Bitmap.Clone(Rectangle rect, PixelFormat format):创建一个图像的副本,并指定副本的像素格式。
  • Graphics.DrawImage(Image image, Rectangle destRect, int srcX, int srcY, int srcWidth, int srcHeight, GraphicsUnit srcUnit):将图像绘制到指定的矩形区域中。

水平翻转图像

下面是一个示例代码,演示如何水平翻转图像:

C#
public class ImageProcessor { public Bitmap FlipHorizontal(Bitmap image) { // 创建图像的副本,并指定像素格式 Bitmap flippedImage = image.Clone(new Rectangle(0, 0, image.Width, image.Height), image.PixelFormat); // 水平翻转图像 flippedImage.RotateFlip(RotateFlipType.RotateNoneFlipX); return flippedImage; } }
C#
// 使用示例 ImageProcessor imageProcessor = new ImageProcessor(); Bitmap image = (Bitmap)Image.FromFile("D:\\BaiduSyncdisk\\11Test\\feGsv0kJ6CEBng3.png"); Bitmap flippedImage = imageProcessor.FlipHorizontal(image); pictureBox1.Image=flippedImage;
编辑
2025-09-29
C#
00

摘要

在图像处理中,图片水印是一种常见的技术,它可以在图像上添加文本或图形,用于标识、保护或美化图像。在本文中,我们将介绍如何使用 C# 来实现图片水印,包括常用的属性和方法,以及一些示例代码。

正文

添加文本水印

添加文本水印是一种简单且常用的方式,下面是一些常用的属性和方法:

属性

  • Text:水印文本内容。
  • Font:水印文本的字体。
  • Color:水印文本的颜色。
  • Opacity:水印文本的透明度。

方法

  • AddTextWatermark(string imagePath, string watermarkText, Font font, Color color, float opacity):将文本水印添加到指定的图像文件中。

下面是一个示例代码,演示如何添加文本水印:

C#
public string AddTextWatermark(string imagePath, string watermarkText, Font font, Color color, float opacity) { string decImage = imagePath + "_watermarked.jpg"; using (Image image = Image.FromFile(imagePath)) using (Graphics graphics = Graphics.FromImage(image)) { // 创建一个画刷,用于设置文本颜色和透明度 SolidBrush brush = new SolidBrush(Color.FromArgb((int)(opacity * 255), color)); // 创建一个 StringFormat 对象,用于设置文本对齐方式 StringFormat format = new StringFormat(); format.Alignment = StringAlignment.Center; format.LineAlignment = StringAlignment.Center; // 绘制文本水印 graphics.DrawString(watermarkText, font, brush, new Point(image.Width / 2, image.Height / 2), format); // 保存图像 image.Save(decImage, ImageFormat.Png); } return decImage; }
C#
// 使用示例 WatermarkProcessor watermarkProcessor = new WatermarkProcessor(); string img= watermarkProcessor.AddTextWatermark("D:\\BaiduSyncdisk\\11Test\\promo.png" , "hello world", new Font("Arial", 24), Color.Red, 0.5f); pictureBox1.Image=Image.FromFile(img);
编辑
2025-09-29
C#
00

摘要

在图像处理中,生成缩略图是一项常见的任务。缩略图是原始图像的小尺寸版本,通常用于在网页、移动应用程序等场景中显示图像的预览或缩略图。本文将介绍如何使用C#来实现生成缩略图的功能,并介绍常用的属性和方法。

正文

使用System.Drawing命名空间

在C#中,我们可以使用System.Drawing命名空间中的类来进行图像处理。这个命名空间提供了许多用于处理图像的类和方法,包括生成缩略图的功能。

首先,我们需要在项目中引用System.Drawing命名空间。在Visual Studio中,右键点击项目,选择“添加” -> “引用”,然后在“程序集”中找到并选中System.Drawing,点击“确定”按钮以添加引用。

加载图像

在生成缩略图之前,我们需要加载原始图像。可以使用Image类的FromFile方法来从文件中加载图像,或者使用FromStream方法从流中加载图像。

C#
// 从文件加载图像 Image originalImage = Image.FromFile("D:\\BaiduSyncdisk\\11Test\\promo.png");
C#
// 从流加载图像 using (FileStream stream = new FileStream("path/to/image.jpg", FileMode.Open)) { Image newImage = Image.FromStream(stream); }
编辑
2025-09-28
C#
00

在C#编程中,字符串(string)是字符的序列,而字符数组(char[])是字符的集合,它们在内存中以连续的方式存储。尽管字符串和字符数组在概念上类似,但它们在C#中是不同的类型,并且具有不同的属性和方法。了解如何在字符串和字符数组之间转换是处理文本数据的基础技能之一。

从字符串到字符数组

使用ToCharArray方法

string类提供了一个名为ToCharArray的方法,可以将字符串转换为字符数组。

C#
string exampleString = "Hello World!"; char[] charArray = exampleString.ToCharArray(); foreach (char c in charArray) { Console.WriteLine(c); } // 输出: // H // e // l // l // o // // W // o // r // l // d // !

image.png

编辑
2025-09-28
C#
00

在C#中,字符串是一系列字符的集合。字符串是通过System.String类实现的,通常用双引号""表示。字符串是不可变的,这意味着一旦创建,就不能更改其值。在本文中,我们将探讨C#中字符串的不可变性以及如何使用字符串操作来处理文本数据。

字符串不可变性

字符串不可变性意味着一旦字符串被创建,它的内容就不能被改变。如果你想修改字符串,C#实际上会创建一个新的字符串对象来代替原来的字符串。

不可变性的好处包括:

  1. 线程安全:由于字符串内容不会改变,多个线程可以安全地读取同一个字符串而不需要额外的同步或锁定机制。
  2. 性能优化:字符串不可变可以让编译器和运行时进行一些优化,比如字符串字面量池,这样相同的字符串字面量只需在内存中存储一份。
  3. 安全性:字符串作为许多程序中的关键部分(比如文件路径、网络请求等),不可变性确保了一旦字符串被创建,它的值就不会被意外改变,从而避免了潜在的安全风险。
  4. 设计简单:不可变对象通常比可变对象更容易理解和使用,因为它们的状态不会改变,这使得调试和维护代码更加容易。

然而,不可变性也有其缺点,主要是性能开销。由于每次字符串修改都会创建一个新的字符串对象,如果在循环或大量字符串操作中不慎使用,可能会导致大量的临时对象被创建,这会增加垃圾收集器的工作量,并可能导致内存使用的增加。