原文:图像滤镜艺术---(Sketch Filter)素描滤镜

(Sketch Filter)素描滤镜

素描滤镜的实现方法比较简单,这里我们直接写出算法过程如下:

1,对原图S进行去色命令得到灰度图A;

2,对A进行反色得到图像B;

3,对B进行高斯模糊得到图C;

4,将C与B进行颜色减淡的图层混合算法:

P(x,y) = Pb(x,y) + (Pb(x,y)* Pc(x,y)) / (256 - Pc(x,y));

在步骤3中,可以添加变量edgeIntensity(edgeIntensity>=0),来控制素描的边缘强度;

以上就是素描的算法实现。

核心代码如下:

private Bitmap SketchFilterProcess(Bitmap src, int edgeIntensity)

        {

            Bitmap gaussBitmap = gf.Apply(src, edgeIntensity);   

            Bitmap dst = new Bitmap(src);

            int w = dst.Width;

            int h = dst.Height;

            BitmapData dstData = dst.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);

            BitmapData edgeData = gaussBitmap.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);

            byte* pGauss = (byte*)edgeData.Scan0;

            byte* pDst = (byte*)dstData.Scan0;

            int offset = dstData.Stride - w * 4;

            int gray, graySrc, grayGauss;

            for (int j = 0; j < h; j++)

            {

                for (int i = 0; i < w; i++)

                {

                    graySrc = (pDst[0] + pDst[1] + pDst[2]) / 3;

                    grayGauss = 255 - (pGauss[0] + pGauss[1] + pGauss[2]) / 3;

                    gray = graySrc + (graySrc * grayGauss) / (256 - grayGauss);

                    gray = Math.Min(255, Math.Max(0, gray));

                    pDst[0] = (byte)gray;

                    pDst[1] = (byte)gray;

                    pDst[2] = (byte)gray;

                    pDst[3] = (byte)255;

                    pGauss += 4;

                    pDst += 4;

                }

                pGauss += offset;

                pDst += offset;

            }

            dst.UnlockBits(dstData);

            gaussBitmap.UnlockBits(edgeData);

            return dst;

        }

效果图如下所示:

原图

素描滤镜效果图

最后放上完整C#/C程序DEMO下载连接:http://www.zealpixel.com/thread-64-1-1.html

最新文章

  1. Mybatis XML配置
  2. 点击空白处div消失的方法
  3. URL优化之IIS7如何开启伪静态
  4. asp.net mvc4 HTTP Error 403.14
  5. 1016. Phone Bills (25)
  6. 关于开发Windows服务程序容易搞混的地方!
  7. JavaScript高级程序设计之基本包装类型
  8. android中如何实现离线缓存
  9. SAX PULL解析实例
  10. C++教材
  11. Unity3d物体模型(实现旋转缩放平移自动旋转)
  12. uptime 命令详解
  13. MySQL8.0.x免安装配置
  14. 高可用Hadoop平台-Oozie工作流
  15. Missing artifact com.github.pagehelper:pagehelper:jar:3.4.2-fix的解决方法(最简单的方法)
  16. Oracle Grid 11.2.0.4 安装是出现“[INS-41112] Specified network interface doesnt maintain connectivity across cluster”错误
  17. [洛谷 P2508] 圆上的整点
  18. Navicat permium工具连接Oracle的配置
  19. css文字链接滑过向上移动1像素
  20. [python]pip 版本9.0.1升级到10.0.1故障解决办法

热门文章

  1. 接入Erlang控制台的几种方法
  2. iis配置反向代理oss
  3. 小强的HTML5移动开发之路(30)—— JavaScript回顾5
  4. 【Qt程序】基于Qt词典开发系列&amp;lt;十二&amp;gt;呼叫讲述
  5. gdal库对ENVI文件的一点支持不好
  6. 微信小程序实现城市定位:获取当前所在的国家城市信息
  7. 【u235】背单词
  8. MVVM、MVVMLight、MVVMLight Toolkit之我见
  9. 如何在spring quartz类中拿到ServletContext
  10. 64 位系统 vs2013 配置 OpenCV-3.1.0