C#实现图像锐化的方法
作者:沧海一粟…… 时间:2023-07-23 01:08:21
本文实例讲述了C#实现图像锐化的方法。分享给大家供大家参考。具体如下:
//定义图像锐化函数
private static Bitmap Sharpen(Bitmap a,double v)
{
int w = a.Width;
int h = a.Height;
try
{
Bitmap dstBitmap = new Bitmap(w, h, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
System.Drawing.Imaging.BitmapData srcData = a.LockBits(new Rectangle
(0, 0, w, h), System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
System.Drawing.Imaging.BitmapData dstData = dstBitmap.LockBits(new Rectangle
(0, 0, w, h), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
unsafe
{
byte* pIn = (byte*)srcData.Scan0.ToPointer();
byte* pOut = (byte*)dstData.Scan0.ToPointer();
byte* p;
int stride = srcData.Stride;
for (int y = 0; y < h; y++)
{
for (int x = 0; x < w; x++)
{
//边缘八个点像素不变
if (x == 0 || x == w - 1 || y == 0 || y == h - 1)
{
pOut[0] = pIn[0];
pOut[1] = pIn[1];
pOut[2] = pIn[2];
}
else
{
int r0, r1, r2, r3, r4, r5, r6, r7, r8;
int g1, g2, g3, g4, g5, g6, g7, g8, g0;
int b1, b2, b3, b4, b5, b6, b7, b8, b0;
double vR, vG, vB;
//左上
p = pIn - stride - 3;
r1 = p[2];
g1 = p[1];
b1 = p[0];
//正上
p = pIn - stride;
r2 = p[2];
g2 = p[1];
b2 = p[0];
//右上
p = pIn - stride + 3;
r3 = p[2];
g3 = p[1];
b3 = p[0];
//左
p = pIn - 3;
r4 = p[2];
g4 = p[1];
b4 = p[0];
//右
p = pIn + 3;
r5 = p[2];
g5 = p[1];
b5 = p[0];
//左下
p = pIn + stride - 3;
r6 = p[2];
g6 = p[1];
b6 = p[0];
//正下
p = pIn + stride;
r7 = p[2];
g7 = p[1];
b7 = p[0];
// 右下
p = pIn + stride + 3;
r8 = p[2];
g8 = p[1];
b8 = p[0];
//中心点
p = pIn;
r0 = p[2];
g0 = p[1];
b0 = p[0];
vR = (double)r0 - (double)(r1 + r2 + r3 + r4 + r5 + r6 + r7 + r8) / 8;
vG = (double)g0 - (double)(g1 + g2 + g3 + g4 + g5 + g6 + g7 + g8) / 8;
vB = (double)b0 - (double)(b1 + b2 + b3 + b4 + b5 + b6 + b7 + b8) / 8;
vR = r0 + vR * v;
vG = g0 + vG * v;
vB = b0 + vB * v;
if (vR > 0)
{
vR = Math.Min(255, vR);
}
else
{
vR = Math.Max(0, vR);
}
if (vG > 0)
{
vG = Math.Min(255, vG);
}
else
{
vG = Math.Max(0, vG);
}
if (vB > 0)
{
vB = Math.Min(255, vB);
}
else
{
vB = Math.Max(0, vB);
}
pOut[0] = (byte)vB;
pOut[1] = (byte)vG;
pOut[2] = (byte)vR;
}
pIn += 3;
pOut += 3;
}
pIn += srcData.Stride - w * 3;
pOut += srcData.Stride - w * 3;
}
}
a.UnlockBits(srcData);
dstBitmap.UnlockBits(dstData);
return dstBitmap;
}
catch
{
return null;
}
}
希望本文所述对大家的C#程序设计有所帮助。
标签:C#,图像,锐化
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Java解析xml文件遇到特殊符号异常的情况(处理方案)
2023-10-23 17:31:48
浅谈单例模式和线程安全问题
2023-11-25 06:27:34
![](https://img.aspxhome.com/file/2023/2/98402_0s.jpg)
Kotlin实现图片选择器的关键技术点总结
2023-03-05 02:31:57
![](https://img.aspxhome.com/file/2023/0/118980_0s.jpg)
详解IDEA多module项目maven依赖的一些说明
2023-07-21 06:09:05
![](https://img.aspxhome.com/file/2023/4/67974_0s.png)
C#实现12306自动登录的方法
2023-11-07 13:20:27
![](https://img.aspxhome.com/file/2023/0/100100_0s.jpg)
详解Spring如何解析占位符
2023-11-27 12:44:46
解决SpringBoot web项目启动后立即关闭的问题
2023-07-26 02:33:37
![](https://img.aspxhome.com/file/2023/9/64909_0s.png)
Java基础教程之static五大应用场景
2023-11-11 05:10:43
C# 屏蔽由于崩溃弹出的windows异常弹框
2023-08-24 04:41:57
![](https://img.aspxhome.com/file/2023/5/91345_0s.png)
Android10开发者常见问题(小结)
2023-05-08 10:27:24
flutter 怎么实现app整体灰色效果
2023-01-24 21:23:22
![](https://img.aspxhome.com/file/2023/7/137727_0s.jpg)
SpringCloudConfig之client端报错Could not resolve placeholder问题
2023-11-23 11:19:17
![](https://img.aspxhome.com/file/2023/5/59255_0s.png)
flutter 中监听滑动事件
2021-10-05 11:39:00
Android使用ViewDragHelper实现图片下拽返回示例
2023-08-08 00:14:12
![](https://img.aspxhome.com/file/2023/2/138982_0s.gif)
Android GridView实现滚动到指定位置的方法
2021-08-29 10:04:21
SpringBoot零基础入门之基本操作与概念
2023-10-25 00:41:36
![](https://img.aspxhome.com/file/2023/3/128853_0s.png)
android图片处理 让图片变成圆形
2023-10-03 00:47:30
![](https://img.aspxhome.com/file/2023/6/83536_0s.jpg)
Winform窗体中打开PDF文件的三种方式
2023-05-15 19:46:52
![](https://img.aspxhome.com/file/2023/5/119535_0s.png)
Android控件之Spinner用法实例分析
2022-08-06 08:36:33
![](https://img.aspxhome.com/file/2023/0/126690_0s.png)
Android列表选择框Spinner使用方法详解
2023-10-04 13:18:02
![](https://img.aspxhome.com/file/2023/6/139126_0s.png)