很多图片处理的算法从原理上讲其实非常简单,难点往往在如何去写算法实现它,更加难的就是如何去优化实现的算法。

马赛克算法很简单,说白了就是把一张图片分割成若干个val * val像素的小区块(可能在边缘有零星的小块,但不影响整体算法),每个小区块的颜色都是相同的。为了方便起见,我们不妨让这个颜色就用该区域最左上角的那个点的颜色。当然还可以有其他方法,比如取区块中间点的颜色,或区块中随机点的颜色作代表等等。

下面的示意图就是取val=2的结果。

原图像素

ABCDEFG

HIJKLMN

OPQRSTU

VWXYZ01

2345678

马赛克处理后

AACCEEG

AACCEEG

OOQQSSU

OOQQSSU

2244668

public static Bitmap KiMosaic(Bitmap b, int val)

{

if (b.Equals(null))

{

return null;

}

int w = b.Width;

int h = b.Height;

int stdR, stdG, stdB;

stdR = 0;

stdG = 0;

stdB = 0;

BitmapData srcData = b.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);

unsafe

{

byte* p = (byte*)srcData.Scan0.ToPointer();

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

{

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

{

if (y % val == 0)

{

if (x % val == 0)

{

stdR = p[2]; stdG = p[1]; stdB = p[0];

}

else

{

p[0] = (byte)stdB;

p[1] = (byte)stdG;

p[2] = (byte)stdR;

}

}

else

{

// 复制上一行

byte * pTemp = p - srcData.Stride;

p[0] = (byte)pTemp[0];

p[1] = (byte)pTemp[1];

p[2] = (byte)pTemp[2];

}

p += 3;

} // end of x

p += srcData.Stride - w * 3;

} // end of y

b.UnlockBits(srcData);

}

return b;

}

先上原图:

再上效果图

给图像马赛克处理的程序c语言,C#中的图像处理(附带生成马赛克范例)相关推荐

  1. python程序员专用壁纸_程序员炫技必备:用Python生成马赛克画!(文末附源码)...

    原标题:程序员炫技必备:用Python生成马赛克画!(文末附源码) 源 | Python与数据分析文 | 强哥 大家知道马赛克画是什么吗?不是动作片里的马赛克哦~~ 马赛克画是一张由小图拼成的大图,本 ...

  2. 给图像马赛克处理的程序c语言,C#对图片进行马赛克处理可控制模糊程度的实现代码...

    具体代码如下所示: using System.Drawing; using System.Drawing.Imaging; using System.Web.Mvc; namespace MVC201 ...

  3. 程序开发语言c#中的 应该发成什么音,0006. 如何在C# winform 上开发 文字转语音

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? Android 学习笔记 1. 先到该网站下载微软的Speech SDK5.1  让windows操作系统拥有中文语音 ...

  4. ds18b20程序c语言,单片机中使用DS18B20温度传感器C语言程序(参考6)

    /******************************************/ // //       DS18B20温度计C程序 //       2007.06.08 /******** ...

  5. android 存储私有文件,是否可以只在Android应用程序的私有目录中保存图像,而不是设备的内部或任何外部存储?...

    我不想将我的Android应用程序图像存储在内部或外部设备存储中,这样它将对库可见. 现在,我正在外部设备存储中保存我的应用程序图像.但是我想把图像保存到应用程序的私有目录中.我怎样才能做到这一点? ...

  6. java实现马赛克,java如何用Processing生成马赛克风格的图像

    java如何用Processing生成马赛克风格的图像 首先使用PImage来实例化对象,再通过loadImage赋值,两层for循环遍历图片上的像素点,每隔5个像素点,画一个直径为3的圆.颜色通过p ...

  7. 用EasyX图形库编写动态彩色万花尺程序(c语言)

    用EasyX图形库编写动态彩色万花尺程序(c语言) 在EasyX看到别人写的万花尺程序,想起来小时候玩的,就动手改进增加了一些效果.参考程序连接(侵删):万花尺_慢羊羊 我的效果如下,输入数据:[30 ...

  8. java 验证码图片识别_JavaSE图像验证码简单识别程序详解

    本文为大家分享了JavaSE图像验证码简单识别程序,供大家参考,具体内容如下 首先你应该对图片进行样本采集,然后将样本进行灰度处理,也就是变成黑白两色. 然后你就可以使用该类,对目标文件进行分析.具体 ...

  9. 编写一个程序,实现将c语言源程序中的注释全部删除

    <程序设计基础-c语言>杨莉 刘鸿翔 ISBN-978-7-03-032903-5 p257 习题8 6.编写一个程序,实现将c语言源程序中的注释全部删除 #include<stdl ...

最新文章

  1. 用零知识证明解决投票安全
  2. 有限单元法基本原理和数值方法_SPH法介绍
  3. [Objective-C] Copy 和 MutableCopy
  4. Java简单知识梳理
  5. Python档案袋(列表、元组、字典、集合 )
  6. javaScript获取url中的参数
  7. 大学计算机上机实验指导与测试pdf,4大学计算机基础上机实验指导与习题--习题.pdf...
  8. 哈苏相机加持!一加9 Pro海外抢先发布:采用120Hz LTPO屏幕
  9. redis中集群的故障恢复
  10. sql基础语法(增、删、改、查)
  11. 彩云之南,难忘的地方
  12. 复现KDL:使用Msnhnet实现串联机器人运动数值逆解(一)
  13. ubuntu18.04中基于Docker搭建tensorflow-gpu开发环境
  14. 针对零基础的UE开发(05)
  15. EasyRecovery15MacPro离线便捷扫描恢复数据
  16. 【C++】类和对象---什么是类?
  17. 指数移动平均(EMA)的原理及PyTorch实现
  18. linux texlive 中文,[linux-004] texlive的安装以及用xetex和xelatex进行中文编辑
  19. DJI Flight Simulator 大疆飞行模拟器 安装教程
  20. 车牌识别笔记:从图像中定位并裁剪车牌照

热门文章

  1. ESP32学习笔记(7)——SmartConfig接口使用(ESP-Touch和AirKiss)
  2. kali安装beef
  3. c# 0x8007007e:找不到指定模块
  4. 聊聊从iOS固件提取系统库符号
  5. XAudio2学习之混音
  6. 牙齿美白灯市场深度研究分析报告
  7. 简单的对对碰小游戏源码
  8. iscsi 基础指南
  9. 【博学谷学习记录】超强总结,用心分享| presto框架
  10. [音乐]Pink Floyd - The Great gig of the sky