图像特效---马赛克滤镜
图像马赛克滤镜
图像马赛克效果其实就是将图像分成大小一致的图像块,每一个图像块都是一个正方形,并且在这个正方形中所有像素值都相等。我们可以将这个正方形看作是一个模板窗口,模板中对应的所有图像像素值都等于该模板的左上角第一个像素的像素值,这样的效果就是马赛克效果,而正方形模板的大小则决定了马赛克块的大小,即图像马赛克化的程度。
核心代码如下:
///
/// Mosaic filter.
///
/// Source image.
/// The size of mosaic effect.
/// Resullt image.
public Bitmap MosaicFilter(Bitmap src, int blockSize)
{
Bitmap srcBitmap = new Bitmap(src);
int w = srcBitmap.Width;
int h = srcBitmap.Height;
System.Drawing.Imaging.BitmapData srcData = srcBitmap.LockBits(new Rectangle(0, 0, w, h), System.Drawing.Imaging.ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
IntPtr ptr = srcData.Scan0;
int bytes = h * srcData.Stride;
byte[] srcValues = new byte[bytes];
System.Runtime.InteropServices.Marshal.Copy(ptr, srcValues, 0, bytes);
byte[] tempValues = (byte[])srcValues.Clone();
int stride = srcData.Stride;
int b = 0, g = 0, r = 0;
int dR = 0;
int dG = 0;
int dB = 0;
int dstX = 0;
int dstY = 0;
blockSize = Math.Min(blockSize, (w + h) / 2);
for (int j = 0; j < h; j++)
{
for (int i = 0; i < w; i++)
{
b = srcValues[i * 4 + j * w * 4];
g = srcValues[i * 4 + 1 + j * w * 4];
r = srcValues[i * 4 + 2 + j * w * 4];
dstX = i;
dstY = j;
if (j % blockSize == 0)
{
if (i % blockSize == 0)
{
dB = srcValues[dstX * 4 + dstY * w * 4];
dG = srcValues[dstX * 4 + 1 + dstY * w * 4];
dR = srcValues[dstX * 4 + 2 + dstY * w * 4];
}
else
{
tempValues[dstX * 4 + dstY * w * 4] = (byte)dB;
tempValues[dstX * 4 + 1 + dstY * w * 4] = (byte)dG;
tempValues[dstX * 4 + 2 + dstY * w * 4] = (byte)dR;
}
}
else
{
tempValues[dstX * 4 + dstY * w * 4] = tempValues[dstX * 4 + (dstY - 1) * w * 4];
tempValues[dstX * 4 + 1 + dstY * w * 4] = tempValues[dstX * 4 + 1 + (dstY - 1) * w * 4];
tempValues[dstX * 4 + 2 + dstY * w * 4] = tempValues[dstX * 4 + 2 + (dstY - 1) * w * 4];
}
}
}
srcValues = (byte[])tempValues.Clone();
System.Runtime.InteropServices.Marshal.Copy(srcValues, 0, ptr, bytes);
srcBitmap.UnlockBits(srcData);
return srcBitmap;
}
程序demo:点击打开链接
图像特效---马赛克滤镜相关推荐
- 图像特效及滤镜算法汇总
OpenCV 版:OpenCV 图像处理 PS 图像处理算法汇总 图层混合算法: PS图层混合算法之一(不透明度,正片叠底,颜色加深,颜色减淡) PS图层混合算法之二(线性加深,线性减淡,变亮,变暗) ...
- 图像特效---漫画滤镜
漫画滤镜 所谓漫画滤镜就是通过复杂的算法来模拟漫画的特点,从而使真实照片呈现出漫画的风格.要实现漫画的效果,首先要了解漫画的特点,漫画具有几个比较明显的特点如下: 1,颜色泛用 漫画中,使用的颜色比较 ...
- [Python图像处理] 二十五.图像特效处理之素描、怀旧、光照、流年以及滤镜特效
该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...
- FCPX插件:半调图像高级马赛克特效Yanobox Mosaic
FCPX插件:Yanobox Mosaic 共100种半调图像高级马赛克特效,可以放到标题,图像,视频和生成器上,可以在屏幕上或屏幕外进行视频特效制作,不一样的马赛克总有你喜欢的一款哦!! 插件仅适用 ...
- 视觉特效之马赛克滤镜
GPUImagePixellateFilter 马赛克滤镜. 我们先来看mod函数的定义: m o d ( x , y ) = x − y ∗ f l o o r ( x y ) mod(x,y) = ...
- IOS – OpenGL ES 图像CGA色彩滤镜 GPUImageCGAColorspaceFilter
目录 一.简介 二.效果演示 三.源码下载 四.猜你喜欢 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 基础 零基础 Ope ...
- PhotoScape X Pro for Mac(图像特效处理及编辑工具)
Photoscape for Mac 破解版不仅仅是一款有趣和简单的照片编辑器,同时它还集成了各种图片的编辑功能,可以说是轻量级的PS,使您能够修复和增强照片,简单易用,它不仅能够将照片修饰得十分完美 ...
- canvas--putImageData--(灰色滤镜、黑白滤镜、反色滤镜、模糊滤镜、马赛克滤镜)
示例 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title& ...
- OpenGL ES之GLSL实现多种“马赛克滤镜”效果
⻢赛克效果 "⻢赛克效果"就是把图⽚的⼀个相当⼤⼩的区域⽤同⼀个点的颜⾊来表示,可以认为是⼤规模的降低图像的分辨率,⽽让图像的⼀些细节隐藏起来. 无马赛克滤镜 "无滤镜& ...
最新文章
- Maya 2022中的硬表面建模技术学习视频教程
- Linux常用指令---find | locate(查找)
- 验算神经网络谐振子模型的第二组数据
- 开发C语言的3款神器,VS2019、VScode和IntelliJ Clion
- Tomcat Filter 自己动手实现
- 数据挖掘竞赛-轴承故障检测训练赛
- 浏览器打开出现证书错误_PADI 电子潜水证书更新啦!
- Buck-Boost变换
- adb 抓取日志到指定文件,文件命名为当前电脑时间
- Oracle 软件的安装
- ElasticSearch 文档路由,你的数据到底存在哪一个分片上_06
- 类模板 templateclass T
- titanium开发教程-04-05从rows打开window
- Tableau过期处理方法
- 计算机的手机储存在哪里,手机wps文件保存在哪里?
- MyBatisPlus自动填充
- -bash:/etc/profile: line 21: syntax error near unexpected token `$‘do\r‘‘
- 1、乐趣国学——“君子不器”
- 解决浏览器连不上校园网问题
- js写一个开心消消乐
热门文章
- 2017北大信科夏令营机试B:编码字符串
- 基于Arduino的HX711称重实验
- pycharm用token登录github账号
- 视频教程-清华-尹成老师-java基础-Day2-Java
- 大话设计模式之爱你一万年:第十三章 行为型模式:策略模式:女友在手,说走就走:3.策略模式之三国刘备江东娶夫人
- 三星K2200复印机提示更换传输卷问题的简单处理
- AnyChat云视频服务平台建立应用的收费情况
- C51单片机实现双机通讯
- 2021-02-03
- Linux系统开机后/etc/rc.d/rc.local文件中的命令没有执行(已解决)