原文:Win8Metro(C#)数字图像处理--2.15图像霓虹效果



[函数名称]

图像霓虹效果函数NeonProcess(WriteableBitmap src)

上述公式进行开方即可。

[函数代码]

       ///<summary>

       /// Neon process.

       ///</summary>

       ///<param name="src">Source image.</param>

       ///<returns></returns>

       publicstaticWriteableBitmap NeonProcess(WriteableBitmap src)////15霓虹处理

       {

           if(src!=null )

           {

           int w = src.PixelWidth;

           int h = src.PixelHeight;

           WriteableBitmap neonImage =newWriteableBitmap(w, h);

           byte[] temp = src.PixelBuffer.ToArray();

           byte[] tempMask = (byte[])temp.Clone();

           int b = 0, g = 0, r = 0;

           for (int j = 1; j < h - 1; j++)

           {

               for (int i = 4; i < w * 4 - 4; i += 4)

               {

                   if (i == 0 || i == w - 4 || j == 0 || j == h - 1)

                   {

                       temp[i + j * w * 4] = (byte)0;

                       temp[i + 1 + j * w * 4] = (byte)0;

                       temp[i + 2 + j * w * 4] = (byte)0;

                   }

                   else

                   {

                       b = (int)Math.Sqrt((tempMask[i + j * w * 4] - tempMask[i + 4 + j * w * 4]) * (tempMask[i + j * w * 4] - tempMask[i + 4 + j * w * 4])

                           + (tempMask[i + j * w * 4] - tempMask[i + (j + 1) * w * 4]) * (tempMask[i + j * w * 4] - tempMask[i + (j + 1) * w * 4]));

                       g = (int)Math.Sqrt((tempMask[i + 1 + j * w * 4] - tempMask[i + 4 + 1 + j * w * 4]) * (tempMask[i + 1 + j * w * 4] - tempMask[i + 4 + 1 + j * w * 4])

                           + (tempMask[i + 1 + j * w * 4] - tempMask[i + 1 + (j + 1) * w * 4]) * (tempMask[i + 1 + j * w * 4] - tempMask[i + 1 + (j + 1) * w * 4]));

                       r = (int)Math.Sqrt((tempMask[i + 2 + j * w * 4] - tempMask[i + 4 + 2 + j * w * 4]) * (tempMask[i + 2 + j *w * 4] - tempMask[i + 4 + 2 + j * w * 4])

                           + (tempMask[i + 2 + j * w * 4] - tempMask[i + 2 + (j + 1) * w * 4]) * (tempMask[i + 2 + j * w * 4] - tempMask[i + 2 + (j + 1) * w * 4]));

                       temp[i + j * w * 4] = (byte)(b > 0 ? (b < 255 ? b : 255) : 0);

                       temp[i + 1 + j * w * 4] = (byte)(g > 0 ? (g < 255 ? g : 255) : 0);

                       temp[i + 2 + j * w * 4] = (byte)(r > 0 ? (r < 255 ? r : 255) : 0);

                   }

                   b = 0; g = 0; r = 0;

               }

           }

           Stream sTemp = neonImage.PixelBuffer.AsStream();

           sTemp.Seek(0,SeekOrigin.Begin);

           sTemp.Write(temp, 0, w * 4 * h);

           return neonImage;

           }

           else

           {

               returnnull;

           }  

       }

[图像效果]

最新文章

  1. win10下安装Ubuntu出现win10无法进入的情况
  2. 基础字符串处理_C++
  3. django-based blog- mezzanine
  4. Winform之SpreadSheetGear转DevExpress.XtraSpreadsheet.v13.2 z
  5. poj1472[模拟题]
  6. JS计算字符串所占字节数
  7. [MODx] 10. Using Babel for Muti-languages support
  8. XJOI网上同步训练DAY5 T1
  9. IT行业,需要经常锻炼,开篇从本钱开始
  10. React Native 之 数据持久化
  11. 用curl采集需要登录的页面
  12. linux vsftp 简单配置
  13. [asp.net core]SignalR一个例子
  14. [C++ Primer Plus] 第6章、分支语句和逻辑运算符(一)程序清单
  15. Linux之更改Nginx映射默认根目录
  16. Linux之定时器与时间管理 【转】
  17. mac下编译cpu only caffe并用xCode建caffe工程
  18. html文件在head标签中引入js地址和直接写js代码,所用时间是不同的,因为引入js地址,文件加载的时候需要通过通讯协议去解析地址,读取外部文件
  19. Flask 目录
  20. 好的MongoDB学习文章链接

热门文章

  1. 以Network Dataset(网络数据集)方式实现的最短路径分析
  2. MySQL复制格式小结
  3. 电子商务系统的设计与实现(十):DWZ框架与第三方分页组件整合
  4. JS中构造函数与原型对象的同名属性,实例会取哪一个
  5. Java带参数的线程类ParameterizedThread——即如何给Thread传递参数
  6. Arcgis api for javascript学习笔记(4.5版本) - 点击多边形(Polygon)并高亮显示
  7. Qt实用技巧:界面切换使用Dialog全屏切换
  8. VS2015如何自定义类模板、我的模板——原来这么简单!
  9. 在WPF窗体中重绘
  10. HashMap工作原理的介绍!