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
对象。接着,我们使用 ImageAttributes
和 ColorMatrix
对象实现图片的模糊效果。最后,我们将带有模糊效果的图片保存到目标路径中。
以上就是关于C#图片处理类分享的完整攻略,如果您在实际应用中有遇到或需要进一步的指导,请随时联系我们。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#图片处理类分享 - Python技术站