当前位置: 首页 > news >正文

Win8 Metro(C#)数字图像处理--2.43图像马赛克效果算法

原文: Win8 Metro(C#)数字图像处理--2.43图像马赛克效果算法



[函数名称]

  图像马赛克效果        MosaicProcess(WriteableBitmap src, int v)

[算法说明]

  图像马赛克效果其实就是将图像分成大小一致的图像块,每一个图像块都是一个正方形,并且在这个正方形中所有像素值都相等。我们可以将这个正方形看作是一个模板窗口,模板中对应的所有图像像素值都等于该模板的左上角第一个像素的像素值,这样的效果就是马赛克效果,而正方形模板的大小则决定了马赛克块的大小,即图像马赛克化的程度。

[函数代码]



<strong>       /// <summary>
        /// Mosaic process.
        /// </summary>
        /// <param name="src">The source image.</param>
        /// <param name="v">The threshould to control the result of mosaic process.</param>
        /// <returns></returns>
        public static WriteableBitmap MosaicProcess(WriteableBitmap src, int v)图像马赛克效果
        {
            if (src != null)
            {
                int w = src.PixelWidth;
                int h = src.PixelHeight;
                WriteableBitmap srcImage = new WriteableBitmap(w, h);
                byte[] temp = src.PixelBuffer.ToArray();
                byte[] tempMask = (byte[])temp.Clone();
                int dR = 0;
                int dG = 0;
                int dB = 0;
                int dstX = 0;
                int dstY=0;
                dR = tempMask[2];
                dG = tempMask[1];
                dB = tempMask[0];
                for (int j = 0; j < h; j++)
                {
                    for (int i = 0; i < w; i++)
                    {
                        dstX = i;
                        dstY = j;
                        if (j % v == 0)
                        {
                            if (i % v == 0)
                            {
                                dB = tempMask[dstX * 4 + dstY * w * 4];
                                dG = tempMask[dstX * 4 + 1 + dstY * w * 4];
                                dR = tempMask[dstX * 4 + 2 + dstY * w * 4];
                            }
                            else
                            {
                                temp[dstX * 4 + dstY * w * 4] = (byte)dB;
                                temp[dstX * 4 + 1 + dstY * w * 4] = (byte)dG;
                                temp[dstX * 4 + 2 + dstY * w * 4] = (byte)dR;
                            }
                        }
                        else
                        {
                            temp[dstX * 4 + dstY * w * 4] = temp[dstX * 4 + (dstY - 1) * w * 4];
                            temp[dstX * 4 + 1 + dstY * w * 4] = temp[dstX * 4 + 1 + (dstY - 1) * w * 4];
                            temp[dstX * 4 + 2 + dstY * w * 4] = temp[dstX * 4 + 2 + (dstY - 1) * w * 4];
                        }
                    }
                }  
                Stream sTemp = srcImage.PixelBuffer.AsStream();
                sTemp.Seek(0, SeekOrigin.Begin);
                sTemp.Write(temp, 0, w * 4 * h);
                return srcImage;
            }
            else
            {
                return null;
            }
        }</strong>

[图像效果]




相关文章:

  • PowerDesigner 概念数据模型(CDM)
  • [Contest20180313]灵大会议
  • Windows Developer Day - Adaptive Cards
  • 乘法逆元模板(Orz尧神)
  • 贪吃蛇
  • Logstash教程
  • JS 正则表达式
  • Linux 下修改Tomcat使用的JVM内存大小
  • ie中placeholder字体颜色兼容问题
  • jQuery多媒体播放器插件jQuery Media Plugin
  • https原理
  • [AR]Vumark(下一代条形码)
  • 实现前端MD5加密与记住用户名密码功能
  • 软件测试方法
  • Java EE作业(二)
  • SegmentFault for Android 3.0 发布
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • 【刷算法】求1+2+3+...+n
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • Android框架之Volley
  • classpath对获取配置文件的影响
  • Cumulo 的 ClojureScript 模块已经成型
  • JavaScript函数式编程(一)
  • Javascript基础之Array数组API
  • Java小白进阶笔记(3)-初级面向对象
  • JDK9: 集成 Jshell 和 Maven 项目.
  • Netty源码解析1-Buffer
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 后端_MYSQL
  • 计算机常识 - 收藏集 - 掘金
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 我感觉这是史上最牛的防sql注入方法类
  • 线上 python http server profile 实践
  • 与 ConTeXt MkIV 官方文档的接驳
  • 《码出高效》学习笔记与书中错误记录
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • 阿里云服务器购买完整流程
  • 函数计算新功能-----支持C#函数
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • #HarmonyOS:Web组件的使用
  • %@ page import=%的用法
  • (1)(1.9) MSP (version 4.2)
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (LeetCode) T14. Longest Common Prefix
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (力扣)循环队列的实现与详解(C语言)
  • (三分钟)速览传统边缘检测算子
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)程序员疫苗:代码注入
  • (转)四层和七层负载均衡的区别
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .NET 设计一套高性能的弱事件机制