iOS开发:实现图片的打码效果

    马赛克(mosaic)作为人类进步路上的一大绊脚石,被人们所深恶痛绝。作为阻止人类进步小能手,我今天就给大家普及一下关于如何在iOS平台实现图片打码效果的。

图1、效果图

本文主要介绍的是使用iOS平台自身的API去实现图片打码效果的,没有使用openCV。

一、将UIImage转换为CGImage,并获取图片的大小

 

图2、获取CGImage图片的宽高

二、获取图片的颜色空间

       这一步通俗的来讲就是我需要知道我要操作的图片是彩色的还是灰色的,颜色空间也是创建图片上下文所需要的参数之一,所以这里必须获取。

 

图3、颜色空间

三、创建图片上下文

创建图片上下文是为了下一步的绘制图片,图片上下文是绘制图片函数的一个参数。

 

图4、图形上下文

四、更具图形上下文绘制图片

 

图5、绘制图片

五、更具上下文获取图片(位图)

将CGImage转换为可以操作像素的位图,方便打码。

图6、位图信息

六、打码算法

下面的斜线为代码部分,关于打码算法的详细情况,我会在下一篇文章中介绍一下。

//第六:进行打码过程

intcurrentIndex=0, preindex=0;

intlevel=20;

//定义像素点数组,用于保存像素点的值

unsignedcharpixcels[4]={0};

for(inti=0; i

for(intj=0; j

//计算当前的位置

currentIndex = i*width+j;

//获取马赛克第一列第一行的像素值

if(i%level==0) {

//马赛克矩形第一行

if(j%level==0) {

//马赛克第一行第一列

//要想获取第一个像素的值,要使用C语言的数据拷贝

/*

参数一:目标数据(拷贝到哪里)

参数二:数据源(从哪里拷贝)

参数三:拷贝多少内容

*/

memcpy(pixcels, imageData+4*currentIndex,4);

}else{

//其他列

//将第一个像素点的值复制给其他像素(在同一行的)

//实现:C函数的拷贝

//计算上一行马赛克的位置

memcpy(imageData+4*currentIndex, pixcels,4);

}

}else{

//马赛克矩形的其他行

//相对于上一行

preindex=(i-1)*width+j;

memcpy(imageData+4*currentIndex, imageData+4*preindex,4);

}

}

}

七、获取图片数据集合

 

图7、图片数据集合

 

八、创建马赛克图片并显示在屏幕上

将重新计算过的imageData重新显示在图片上就是最终要的马赛克图片。

图8、马赛克图片

九、释放内存

所有的CoreGraphics框架中的类所创建的对象要手动释放掉。

图9、释放内存

demo连接地址:https://github.com/myNameIsZuiCai/masaicImage/tree/master

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我头像是啥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值