C# 对图像进行锐化 锐化的算法

   /锐化
        /// <summary>
        /// 对图像进行锐化,参考:http://msdn.microsoft.com/en-us/library/ms534073(v=vs.85).aspx
        /// </summary>
        /// <param name="Rect">需要锐化的区域,会对该值进行边界的修正并返回.</param>
        /// <param name="Radius">指定高斯卷积核的半径,有效范围[0,255],因为这个锐化算法是以高斯模糊为基础的,所以他的速度肯定比高斯模糊妈妈</param>
        /// <param name="ExpandEdge">指定锐化的程度,0表示不锐化。有效范围[0,255]. </param>
        ///
        public static void UsmSharpen(this Bitmap Bmp, ref Rectangle Rect, float Radius, float Amount)
        {
            int Result;
            IntPtr UnSharpMaskEffect;
            SharpenParams sharpenParams;
            if ((Radius < 0) || (Radius > 255))
            {
                throw new ArgumentOutOfRangeException("参数Radius必须在[0,255]范围内");
            }
            if ((Amount < 0) || (Amount > 100))
            {
                throw new ArgumentOutOfRangeException("参数Amount必须在[0,255]范围内");
            }
            sharpenParams.Radius = Radius;
            sharpenParams.Amount = Amount;
            Result = GdipCreateEffect(UsmSharpenEffectGuid, out UnSharpMaskEffect);
            if (Result == 0)
            {
                IntPtr Handle = Marshal.AllocHGlobal(Marshal.SizeOf(sharpenParams));
                Marshal.StructureToPtr(sharpenParams, Handle, true);
                GdipSetEffectParameters(UnSharpMaskEffect, Handle, (uint)Marshal.SizeOf(sharpenParams));
                GdipBitmapApplyEffect(Bmp.NativeHandle(), UnSharpMaskEffect, ref Rect, false, IntPtr.Zero, 0);
                GdipDeleteEffect(UnSharpMaskEffect);
                Marshal.FreeHGlobal(Handle);
            }
            else
            {
                throw new ExternalException("不支持的GDI+版本,必须为GDI+1.1及以上版本,且操作系统要求为Win Vista及之后版本.");
            }
        }
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用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); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值