c#对图片进行锐化
时间: 2023-07-10 11:24:41 浏览: 119
你可以使用C#中的图像处理库来对图片进行锐化。下面是一个简单的示例代码:
```csharp
using System.Drawing;
using System.Drawing.Imaging;
public static Bitmap Sharpen(Bitmap image, int strength)
{
Bitmap sharpenImage = new Bitmap(image.Width, image.Height);
//锐化矩阵
float[,] sharpenMatrix = new float[,] {
{ -1 * strength, -1 * strength, -1 * strength },
{ -1 * strength, 9 * strength, -1 * strength },
{ -1 * strength, -1 * strength, -1 * strength }
};
//锐化
BitmapData bmpData = sharpenImage.LockBits(new Rectangle(0, 0, image.Width, image.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
BitmapData bmpDataSrc = image.LockBits(new Rectangle(0, 0, image.Width, image.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
unsafe
{
byte* ptr = (byte*)bmpData.Scan0;
byte* ptrSrc = (byte*)bmpDataSrc.Scan0;
int stride = bmpData.Stride;
int strideSrc = bmpDataSrc.Stride;
int bytesPerPixel = 3;
int width = image.Width - 2 * strength;
int height = image.Height - 2 * strength;
for (int y = strength; y < height; ++y)
{
for (int x = strength; x < width; ++x)
{
float r = 0, g = 0, b = 0;
for (int i = -strength; i <= strength; ++i)
{
for (int j = -strength; j <= strength; ++j)
{
//获取当前像素
byte* data = ptrSrc + (y + i) * strideSrc + (x + j) * bytesPerPixel;
float factor = sharpenMatrix[strength + i, strength + j];
r += data[2] * factor;
g += data[1] * factor;
b += data[0] * factor;
}
}
//设置锐化后的像素
byte* dataDest = ptr + y * stride + x * bytesPerPixel;
dataDest[2] = (byte)Math.Min(Math.Max((int)r, 0), 255);
dataDest[1] = (byte)Math.Min(Math.Max((int)g, 0), 255);
dataDest[0] = (byte)Math.Min(Math.Max((int)b, 0), 255);
}
}
}
sharpenImage.UnlockBits(bmpData);
image.UnlockBits(bmpDataSrc);
return sharpenImage;
}
```
其中,参数 `image` 是待锐化的图片,`strength` 是锐化的强度,数值越大锐化效果越明显。调用示例:
```csharp
Bitmap image = new Bitmap("test.jpg");
Bitmap sharpenImage = Sharpen(image, 3);
sharpenImage.Save("sharpened.jpg", ImageFormat.Jpeg);
```