0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

教程:在ArkUI开发框架中实现马赛克处理功能

海阔天空的专栏 来源: HarmonyOS开发者 作者: HarmonyOS开发者 2022-05-27 09:48 次阅读



关于马赛克

马赛克是一种使用较为广泛的图片处理方式,通过将图片特定区域的色阶细节劣化、色块打乱让图片模糊化,常用来遮挡图片中的重要信息及隐私内容。本期,我们将通过图像的基础知识帮助大家了解图片马赛克处理的原理,同时给大家带来ArkUI开发框架中图片马赛克处理的实现。



一、图像基础

了解图片的像素以及分辨率等基础知识,有助于后文对马赛克原理的理解。

1. 像素

像素(英文名:pixel,简称px)是图片的最小单位,每张图片都是由无数的像素点组成。如图1所示,每个小方格就是一个个的像素点,每个像素点都具有明确的位置坐标和色彩数值,像素点的位置和颜色共同决定该图片所呈现出来的样子。

图片

图1 像素点

在计算机中,每个像素点的色彩数值都是通过RGB通道来控制,RGB即三原色:红Red,绿Green,蓝Blue的通道,这三种色彩混合叠加,几乎能形成人类视力所能感知的所有颜色。由此,设置图片中每个像素的RGB通道分量值,并根据特有的算法或者滤波器,便可让像素呈现任何颜色。

2. 分辨率

分辨率是图片在长和宽上各拥有的像素,分辨率越高,所包含的像素就越多,图片就越清晰,由于分辨率比较低,我们甚至无法辨别图片的内容。



二、马赛克原理

增大图片的分辨率可以让图片变得更清晰,那么我们是不是可以降低图片的分辨率来让图片变模糊?

马赛克的原理就是降低原图片的分辨率。如图5所示,首先我们将原图分割成若干个大小一致的小方格,然后获取每个小方格中的像素点的平均色彩数值,最后使用获取到的平均色彩数值替换该方格中所有的像素点,即可实现图片的马赛克处理,同时,我们还可以控制图片中小方格的个数来实现马赛克的强弱。



三、马赛克实现

相信大家已经熟悉了马赛克的原理,下面我们将以全马赛克图片为例,为大家介绍基于ArkUI开发框架的马赛克的具体实现。

1. 首先我们需获取ArkUI开发框架的image能力,该能力提供了图片开发的基本接口


import image from "@ohos.multimedia.image"

2. 通过readPixelsToBuffer接口,一次性读取图片中所有的像素点数据,每个像素点数据都包含了RGB通道的分量值(如Red:18、Green:250、Blue:20)。

poYBAGKQLNeAYQpAAAAa_RUY-ro266.png

其中ArrayBuffer里面缓存的像素点数据主要包括RGB通道的分量值及图片透明度,参考代码如下:

poYBAGKQLO-ADbmRAAAxQGb4az8813.png

3. 根据自定义的单个小方格的Width和Height,将整个图片分成若干小方格。

poYBAGKQLQeAW_NDAAAhZq4gp9c027.png

4. 获取每个小方格左上角的最大坐标及右下角的最小坐标,以确定小方格的区域。并根据每个小方格内的所有像素点数据统一该区域的像素,统一方式可以是取该区域内像素点的平均值,或者随机选取一个像素。

参考代码如下:

pYYBAGKQLSGAE46IAABzQyPojdI587.png

5. 通过writeBufferToPixels接口,将统一的像素点数据缓存到ArrayBuffer中,并写入PixelMap,由此得到整张马赛克处理的图片。

writeBufferToPixels(src: ArrayBuffer): Promise<void>



四、涂鸦马赛克

通过上文的介绍,相信大家已经基本掌握了马赛克的实现。下面我们将为大家带来马赛克开发的具体实例“涂鸦马赛克”,即可以根据手指滑动的轨迹,生成对应的马赛克区域。本文仅提供实现思路及关键代码,感兴趣的小伙伴可结合上文的介绍补全代码。

1. 给图片添加Touch事件,获取手指的运动轨迹。参考代码如下:

poYBAGKQLUGAGADZAABS_-Fmjvk083.png

2. 根据运动轨迹,以触摸点的坐标(x,y)为中心,根据自定义小方格的大小,动态确认马赛克区域的位置。参考代码如下:

pYYBAGKQLVGAPgXRAABkMNZ-HMo205.png

3. 统一马赛克区域的所有的像素点值。

pYYBAGKQLWWAMSveAABFpATje6g460.png

4. 最后将更改的像素点写入图片中,即可得到手指滑动轨迹的马赛克图片。

以上就是本期全部内容,恭喜你花几分钟时间获得了一个实用的技能。期待广大开发者能开发出更多有趣的马赛克应用。

来源:HarmonyOS开发者

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 马赛克
    +关注

    关注

    0

    文章

    14

    浏览量

    7014
收藏 人收藏

    评论

    相关推荐

    #硬声创作季 4-6 马赛克

    图像处理马赛克
    Mr_haohao
    发布于 :2022年08月30日 18:19:01

    如何给一黑白图片打马赛克

    就是黑白图片的人脸上打上马赛克(仅仅在人脸)。本人初学,勿笑勿喷。。。。多谢。。
    发表于 03-24 10:45

    《Visual C# 2008程序设计经典案例设计与实现》---图像的马赛克效果

    《Visual C# 2008程序设计经典案例设计与实现》---图像的马赛克效果.zip[hide][/hide]
    发表于 05-13 19:46

    请问为什么PCB上会有马赛克的东西?

    `请问为什么PCB上会有这些马赛克的东西,只有VDD网络会有`
    发表于 06-18 14:22

    如何解决“马赛克”问题呢?

    什么是LED显示屏马赛克现象?如何解决“马赛克”问题呢?
    发表于 06-01 06:56

    基于ArkUI开发框架,图片马赛克处理实现

    马赛克处理的原理,同时给大家带来ArkUI开发框架图片马赛
    发表于 05-31 18:50

    数字电视的马赛克业务

    数字电视为用户提供了许多模拟电视无法提供的服务,马赛克业务就是其中一种有特色的业务。简要介绍了马赛克业务的原理以及DVB规范中马赛克业务的实现,并提出了一种利用机
    发表于 07-16 15:31 22次下载

    iPhone8支持去马赛克功能,钱包已经饥渴难耐

    而近日,有国外网友爆料,苹果今年9月即将发布的iPhone 8将支持去马赛克技术,这是反马赛克技术问世后的首部支持去马赛克的手机。据称,去马赛克功能
    发表于 04-06 09:04 9153次阅读

    如何解决"马赛克"问题呢?

    的。 什么是LED显示屏马赛克现象? LED模块就是把LED(发光二极管)按一定规则排列在一起再封装起来,加上一些防水处理组成的产品,就是LED模组。
    发表于 01-19 09:17 1491次阅读

    如何解决LED显示屏“马赛克”问题

    "马赛克"现象是一直以来困扰LED显示屏制造商的难题。从现象上看,LED显示屏"马赛克"的现象表现为显示面亮致性,即均匀性差。
    的头像 发表于 05-22 14:42 5728次阅读

    马赛克模拟屏组成单元_马赛克模拟屏的分类

    马赛克模拟屏是一种广泛电力、煤炭、水利、环保、公路、铁路、航空、化工等行业的电气设备,它在安全生产系统中发挥着不可替代的作用。
    的头像 发表于 12-09 14:30 5323次阅读
    <b class='flag-5'>马赛克</b>模拟屏组成单元_<b class='flag-5'>马赛克</b>模拟屏的分类

    美国开发自动还原马赛克的AI开源算法

    看到模糊的照片,是不是有还原真实面目的冲动?以前的技术做不到,AI时代一切皆有可能。美国杜克大学开发的AI算法就可以做到马赛克图片变高清。
    的头像 发表于 12-02 13:53 1486次阅读

    Depix:可通过AI一键移除马赛克

    人们都不喜欢马赛克,以至于诞生出了“马赛克阻止人类文明进步”的箴言。
    的头像 发表于 01-04 15:27 1.1w次阅读
    Depix:可通过AI一键移除<b class='flag-5'>马赛克</b>

    近期电视画面或将出现马赛克

    如果你最近看电视,那么小心了,因为电视画面可能出现马赛克
    的头像 发表于 03-07 09:43 1738次阅读

    Pooling与马赛克的秘密

     结合图像理解,相信你也会大概明白其中的本意。不过Pooling并不是只可以选取2x2的窗口大小,即便是3x3,5x5等等没问题,步长(Stride)也是一个道理。除了神经网络方面,Pooling为图片打马赛克也是可以取得不错的效果,结合几个例子看看。
    的头像 发表于 11-20 16:53 323次阅读
    Pooling与<b class='flag-5'>马赛克</b>的秘密